将审计方案的AI分析和审计报告分开

This commit is contained in:
2026-06-13 00:20:22 +08:00
parent c2bb3aba9c
commit aa0b7b112f

View File

@@ -55,7 +55,6 @@ import com.gxwebsoft.ai.enums.AuditReportEnum;
import com.gxwebsoft.ai.service.AuditReportService; import com.gxwebsoft.ai.service.AuditReportService;
import com.gxwebsoft.ai.service.KnowledgeBaseService; import com.gxwebsoft.ai.service.KnowledgeBaseService;
import com.gxwebsoft.ai.service.AiHistoryService; import com.gxwebsoft.ai.service.AiHistoryService;
import com.gxwebsoft.ai.util.AuditReportUtil;
import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.common.system.entity.User;
@@ -94,6 +93,8 @@ public class AuditReportController extends BaseController {
private final static String AUDIT_REPORT_TOKEN = "Bearer app-PlYMOvcUQrW7tromrqCNcX9M"; private final static String AUDIT_REPORT_TOKEN = "Bearer app-PlYMOvcUQrW7tromrqCNcX9M";
private final static String AUDIT_SCHEMA_TOKEN = "Bearer app-d7Ok9FECVZG2Ybw9wpg7tGu9";
// private final AiCloudFileService aiCloudFileService; // private final AiCloudFileService aiCloudFileService;
// //
// private final AiCloudDocService aiCloudDocService; // private final AiCloudDocService aiCloudDocService;
@@ -133,10 +134,9 @@ public class AuditReportController extends BaseController {
/** /**
* 生成审计报告-单一模块 * 生成审计报告-单一模块
*/ */
@Deprecated @Operation(summary = "生成审计方案")
@Operation(summary = "生成审计报告-单一模块")
@PostMapping("/generate") @PostMapping("/generate")
public ApiResult<?> generateAuditReport(@RequestBody AuditReportRequest req) { public ApiResult<?> generateAuditSchema(@RequestBody AuditReportRequest req) {
final User loginUser = getLoginUser(); final User loginUser = getLoginUser();
Set<String> kbIdSet = new HashSet<>(); Set<String> kbIdSet = new HashSet<>();
@@ -155,7 +155,7 @@ public class AuditReportController extends BaseController {
// String ret = this.invok(query, knowledge, AuditReportUtil.generateReportContent(req), req.getSuggestion(), loginUser.getUsername()); // String ret = this.invok(query, knowledge, AuditReportUtil.generateReportContent(req), req.getSuggestion(), loginUser.getUsername());
// String ret = this.invok(query, knowledge, AuditReportUtil.generateReportContentByFormCommit(req), req.getSuggestion(), req.getFrom00(), loginUser.getUsername()); // String ret = this.invok(query, knowledge, AuditReportUtil.generateReportContentByFormCommit(req), req.getSuggestion(), req.getFrom00(), loginUser.getUsername());
return success(invokeAIAnalysis(query, knowledge, loginUser.getUsername())); return success(invokeSchemaAIAnalysis(query, knowledge, loginUser.getUsername()));
} }
/** /**
@@ -1622,7 +1622,7 @@ public class AuditReportController extends BaseController {
log.info("生成审计报告标题:{}AI 提示词:{}", request.getChapterTitle(), prompt); log.info("生成审计报告标题:{}AI 提示词:{}", request.getChapterTitle(), prompt);
// TODO 调用 AI 接口 // TODO 调用 AI 接口
String result = invokeAIAnalysis(prompt, kbId, loginUser.getUsername()); String result = invokeReportAIAnalysis(prompt, kbId, loginUser.getUsername());
// 保存历史记录到数据库 // 保存历史记录到数据库
try { try {
@@ -1660,7 +1660,7 @@ public class AuditReportController extends BaseController {
return fail("AI 生成默认话术异常:" + e.getMessage(), null); return fail("AI 生成默认话术异常:" + e.getMessage(), null);
} }
} }
/** /**
* AI 分析用户自定义输入 * AI 分析用户自定义输入
*/ */
@@ -1691,12 +1691,12 @@ public class AuditReportController extends BaseController {
PwlProject project = pwlProjectService.getById(projectId); PwlProject project = pwlProjectService.getById(projectId);
// TODO 调用 AI 接口 // TODO 调用 AI 接口
String result = invokeAIAnalysis(promptBuilder.toString(), project.getKbId(), loginUser.getUsername()); String result = invokeSchemaAIAnalysis(promptBuilder.toString(), project.getKbId(), loginUser.getUsername());
return success(result); return success(result);
} catch (Exception e) { } catch (Exception e) {
log.error("AI 分析用户自定义输入异常", e); log.error("AI 分析用户自定义输入异常", e);
return fail("AI 分析用户自定义输入异常:" + e.getMessage(), null); return fail("AI 分析用户自定义输入异常:" + e.getMessage(), AUDIT_SCHEMA_TOKEN);
} }
} }
@@ -1777,7 +1777,7 @@ public class AuditReportController extends BaseController {
/** /**
* 调用 AI 分析用户输入 * 调用 AI 分析用户输入
*/ */
private String invokeAIAnalysis(String prompt, String kbId, String userName) { private String invokeReportAIAnalysis(String prompt, String kbId, String userName) {
// 构建请求体 // 构建请求体
JSONObject requestBody = new JSONObject(); JSONObject requestBody = new JSONObject();
JSONObject inputs = new JSONObject(); JSONObject inputs = new JSONObject();
@@ -1854,6 +1854,69 @@ public class AuditReportController extends BaseController {
throw new RuntimeException("调用 AI 工作流失败:" + e.getMessage(), e); throw new RuntimeException("调用 AI 工作流失败:" + e.getMessage(), e);
} }
} }
private String invokeSchemaAIAnalysis(String prompt, String kbId, String userName) {
// 构建请求体
JSONObject requestBody = new JSONObject();
JSONObject inputs = new JSONObject();
if(StrUtil.isNotBlank(kbId)){
prompt += "\n\n只能在以下知识库中读取数据标签编号" + kbId;
}
inputs.put("query", prompt);
inputs.put("title", "审计方案 AI 分析");
requestBody.put("inputs", inputs);
requestBody.put("response_mode", "blocking");
requestBody.put("user", userName);
try {
// 发送 POST 请求
String result = HttpUtil.createPost("http://1.14.159.185:8180/v1/workflows/run")
.header("Authorization", AUDIT_SCHEMA_TOKEN)
.header("Content-Type", "application/json")
.body(requestBody.toString())
.timeout(600000)
.execute()
.body();
log.info("AI 工作流返回结果:{}", result);
// 解析返回的 JSON 字符串
JSONObject jsonResponse = JSONObject.parseObject(result);
// 检查是否有错误
if (jsonResponse.containsKey("error")) {
JSONObject error = jsonResponse.getJSONObject("error");
String errorMsg = error != null ? error.getString("message") : "未知错误";
throw new RuntimeException("AI 服务返回错误:" + errorMsg);
}
JSONObject data = jsonResponse.getJSONObject("data");
if (data == null) {
log.error("AI 响应中缺少 data 字段,完整响应:{}", result);
throw new RuntimeException("AI 服务响应格式异常,缺少 data 字段");
}
JSONObject outputs = data.getJSONObject("outputs");
if (outputs == null) {
log.error("AI 响应中缺少 outputs 字段,完整响应:{}", result);
throw new RuntimeException("AI 服务响应格式异常,缺少 outputs 字段");
}
/*JSONObject resultJSON = outputs.getJSONObject("result");
if (resultJSON == null) {
log.warn("AI 返回的结果为空,完整响应:{}", result);
return "";
}*/
return outputs.getString("result");
} catch (Exception e) {
log.error("调用 AI 工作流失败", e);
throw new RuntimeException("调用 AI 工作流失败:" + e.getMessage(), e);
}
}
/** /**
* 根据取证单生成审计建议 * 根据取证单生成审计建议
@@ -1915,12 +1978,12 @@ public class AuditReportController extends BaseController {
); );
// TODO 调用 AI 接口 // TODO 调用 AI 接口
String result = invokeAIAnalysis(prompt, project.getKbId(), loginUser.getUsername()); String result = invokeSchemaAIAnalysis(prompt, project.getKbId(), loginUser.getUsername());
return success(result); return success(result);
} catch (Exception e) { } catch (Exception e) {
log.error("根据取证单生成审计建议异常", e); log.error("根据取证单生成审计建议异常", e);
return fail("根据取证单生成审计建议异常:" + e.getMessage(), null); return fail("根据取证单生成审计建议异常:" + e.getMessage(), AUDIT_SCHEMA_TOKEN);
} }
} }