Spring AI使用JSON Schema导致模型调用速度极慢

最近在开发一个基于 Spring AI 的 AI 项目。为了确保大模型返回的数据一定是结构化的 JSON 格式,我在调用时显式指定了 response_formatJSON_SCHEMA

到目前为止,效果确实不错,每次返回的都是合法 JSON,字段和类型完全符合预期。

代码大致是下面这种,配置了一个jsonSchema,每次调用大概在11秒左右,最快的时候8秒。

java 复制代码
public String callAI(RequestDTO request) {
    String systemPrompt = TemplateReaderUtil.readTemplate("template/business-rule-template.md");

    // 构造对话上下文
    List<Message> messages = List.of(
        new SystemMessage(systemPrompt),
        new UserMessage(request.getInputText())
    );

    String jsonSchema = """
        {
          "type": "object",
          "properties": {
            "result": { "type": "integer", "minimum": 0, "maximum": 100 },
            "details": {
              "type": "object",
              "properties": {
                "metricA": { "type": "integer", "minimum": 0, "maximum": 30 },
                "metricB": { "type": "integer", "minimum": 0, "maximum": 25 },
                "metricC": { "type": "integer", "minimum": 0, "maximum": 20 },
              },
              "required": ["metricA", "metricB", "metricC"],
              "additionalProperties": false
            },
            "comment": { "type": "string", "maxLength": 100 }
          },
          "required": ["result", "details", "comment"],
          "additionalProperties": false
        }
        """;

    // 配置大模型请求:强制按 JSON Schema 输出
    Prompt prompt = new Prompt(messages, OpenAiChatOptions.builder()
        .responseFormat(new ResponseFormat(ResponseFormat.Type.jsonSchema , jsonSchema))
        .temperature(0.8)
        .topP(0.9)
        .build());

    ChatResponse response = chatModel.call(prompt);
    return response.getResults().get(0).getOutput().getText();
}

今天突发奇想,把prompt放在Cherry Studio里面直接用,发现只需要1秒左右就回答完毕,当时就觉得不对劲。拿着CS调整了是否流式输出等一些参数,发现还是很快。最后怀疑是这个jsonSchema的问题,就写了一个最简单的调用。发现调用速度也是在1秒左右。

java 复制代码
    String call(RequestDTO request) {
        String systemPrompt = TemplateReaderUtil.readTemplate("template/business-rule-template.md");

        // 构造对话上下文
        List<Message> messages = List.of(
                new SystemMessage(systemPrompt),
                new UserMessage(request.getInputText())
        );
        Prompt prompt = new Prompt(messageList, OpenAiChatOptions.builder()
                .temperature(0.4)
                .topP(0.6)
                .build());
        ChatResponse chatResponse = chatModel.call(prompt);
        return chatResponse.getResults().get(0).getOutput().getText();
    }

最后,又验证了一下其他写法,把jsonSchema的值改了一下,依旧使用responseFormat。发现速度也很快。

也试了一下把type的值改成json_object,调用直接报错了,可能和使用的大模型也有关,我这次使用的Qwen

java 复制代码
String jsonSchema = """
                {
                  "type": "object"
                }
                """;

所以为了速度,可以去掉jsonSchema,去掉之后大模型输出JSON的格式有时候会不稳定(比如输出会加上```json),这种要在后端处理一下。

也可以只配置一个type就行(注意测试不同模型type值是否会有差异)

只能说谨慎使用jsonSchema

相关推荐
赵广陆32 分钟前
企业实战:Markdown图片检索
android·java·开发语言
C++、Java和Python的菜鸟33 分钟前
第3章 从0开始用若依
java·开发语言
嵌入式学习_force36 分钟前
BES2810ZP深度解析
ai·蓝牙·bes2810
lifallen1 小时前
DeepSeek Harness:把 Agent 做成可替换的运行时插件树
人工智能·学习·ai·开源软件·ai编程
Json____1 小时前
五金制品行业-企业官网源码
java·大数据·数据库·企业站·wwwoop.com
御风之翼_唤星者1 小时前
LoadFramePackModel模块报错bad escape
python·ai
todoitbo1 小时前
把蓝耘接入鸿蒙健康教练:一句话打卡,模型估热量,网关记账
华为·ai·harmonyos·蓝耘·第三方api
counting money2 小时前
Spring AI Alibaba 从入门到实战:构建企业级 AI 应用
java·人工智能·spring
科技每日热闻2 小时前
AI 赋能财务资金管理、风险预警、经营数据分析,合适的云上财务智能 Agent 有哪些?—— 优先采用 Amazon Quick 四链路解决方案
人工智能·ai·数据挖掘·数据分析
DS随心转APP2 小时前
生成word文档的DeepSeek底层解码与“AI导出鸭”工程化方案:一份技术架构师的全维度测评
人工智能·ai·chatgpt·word·deepseek·ai导出鸭