Administrator
2025-08-11 f477fdd6d71426ff84f4ae9abb15d87636acf165
feat(ai): 添加 jsonTemplate 字段并更新相关逻辑

- 在 AiProductRole 和 AiRequest 类中添加 jsonTemplate 字段
- 更新 AiServiceImpl 中的逻辑,加入 jsonTemplate 的校验和使用
- 修改错误日志,增加对 jsonTemplate 空值的提示
3 files modified
28 ■■■■ changed files
src/main/java/cc/mrbird/febs/ai/entity/AiProductRole.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/req/ai/AiRequest.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java 22 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/entity/AiProductRole.java
@@ -34,6 +34,11 @@
    private String promptTemplate;
    /**
     * 返回数据格式要求
     */
    private String jsonTemplate;
    /**
     * 小图标
     */
    private String iconImg;
src/main/java/cc/mrbird/febs/ai/req/ai/AiRequest.java
@@ -11,6 +11,7 @@
public class AiRequest {
    private String promptTemplate;
    private String jsonTemplate;
    private String linkId;
    private String content;
}
src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java
@@ -112,14 +112,20 @@
        String promptTemplate = aiProductRole.getPromptTemplate();
        String linkId = aiProductRole.getLinkId();
        String jsonTemplate = aiProductRole.getJsonTemplate();
        if (!StringUtils.hasText(promptTemplate) || !StringUtils.hasText(linkId)) {
            log.warn("角色配置不完整,promptTemplate 或 linkId 为空,productRoleId: {}", productRoleId);
        if (
                !StringUtils.hasText(promptTemplate)
                || !StringUtils.hasText(linkId)
                || !StringUtils.hasText(jsonTemplate)
        ) {
            log.warn("角色配置不完整,promptTemplate 或 linkId 或 jsonTemplate为空,productRoleId: {}", productRoleId);
            return buildErrorResponse(CODE_ERROR, "角色配置不完整");
        }
        AiRequest aiRequest = new AiRequest();
        aiRequest.setPromptTemplate(promptTemplate);
        aiRequest.setJsonTemplate(jsonTemplate);
        aiRequest.setLinkId(linkId);
        aiRequest.setContent(content);
@@ -131,8 +137,14 @@
        String promptTemplate = aiRequest.getPromptTemplate();
        String linkId = aiRequest.getLinkId();
        String content = aiRequest.getContent();
        if (!StringUtils.hasText(promptTemplate) || !StringUtils.hasText(linkId) || !StringUtils.hasText(content)) {
            log.warn("请求参数不完整,promptTemplate: {}, linkId: {}, content: {}", promptTemplate, linkId, content);
        String jsonTemplate = aiRequest.getJsonTemplate();
        if (
                !StringUtils.hasText(promptTemplate)
                        || !StringUtils.hasText(linkId)
                        || !StringUtils.hasText(content)
                        || !StringUtils.hasText(jsonTemplate)
        ) {
            log.warn("请求参数不完整,promptTemplate: {}, linkId: {}, content: {}, jsonTemplate: {}", promptTemplate, linkId, content, jsonTemplate);
            return buildErrorResponse(CODE_ERROR, "请求参数不完整");
        }
@@ -143,7 +155,7 @@
        messages.add(userMessage);
        try {
            JsonNode schemaNode = objectMapper.readTree(SCHEMA_JSON);
            JsonNode schemaNode = objectMapper.readTree(jsonTemplate);
            ChatCompletionRequest.ChatCompletionRequestResponseFormat responseFormat = new ChatCompletionRequest.ChatCompletionRequestResponseFormat(
                    "json_schema",
                    new ResponseFormatJSONSchemaJSONSchemaParam(