AI Services:JSON模式

在提取自定义 POJO 时,实际上是 JSON,然后会被解析为 POJO。建议在模型配置中启用“JSON 模式”,这样,大语言模型(LLM)将被迫返回有效的 JSON。不然的话,大模型返回的 JSON 字符串可能是格式错误的,如缺少一个引号,或缺少一个括号等等。

注意:

JSON 模式与工具/函数调用是相似的功能,但它们具有不同的 API,且用于不同的目的。

JSON 模式在你始终需要大语言模型以结构化格式(有效的 JSON)返回响应时非常有用。此外,通常不需要状态/记忆,因此与大语言模型的每次交互都是相互独立的。例如,你可能希望从文本中提取信息,比如文本中提到的人员列表,或者将自由形式的产品评论转换为结构化形式,包含诸如 String productName、Sentiment sentiment、List claimedProblems 等字段。

另一方面,当大语言模型(LLM)需要执行某些操作(例如查询数据库、搜索网络、取消用户的预订等)时,工具/函数会很有用。在这种情况下,会向大语言模型(LLM)提供一系列带有预期 JSON 模式的工具,它会自主决定是否调用其中任何工具来满足用户的请求。

此前,函数调用常被用于结构化数据提取,但现在我们有了 JSON 模式功能,它更适合这一用途。

以下是启用 JSON 模式的方法:

  • 对于OpenAI

对于支持结构化输出的较新模型(例如,gpt-4o-mini、gpt-4o-2024-08-06):

OpenAiChatModel.builder()
    //...
    .supportedCapabilities(RESPONSE_FORMAT_JSON_SCHEMA)
    .strictJsonSchema(true)
    .build();

对于较旧的模型(例如,gpt-3.5-turbo、gpt-4):

OpenAiChatModel.builder()
    //...
    .responseFormat("json_object")
    .build();
  • 对于Azure OpenAI:

AzureOpenAiChatModel.builder()
    //...
    .responseFormat(new ChatCompletionsJsonResponseFormat())
    .build();
  • 对于Vertex AI Gemini:

VertexAiGeminiChatModel.builder()
    //...
    .responseMimeType("application/json")
    .build();

或者通过从 Java 类中指定一个明确的模式:

VertexAiGeminiChatModel.builder()
    // ...
    .responseSchema(SchemaHelper.fromClass(Person.class))
    .build();

来自一个 JSON 模式:

VertexAiGeminiChatModel.builder()
    // ...
    .responseSchema(Schema.builder()...build())
    .build();
  • 对于谷歌 AI Gemini:

GoogleAiGeminiChatModel.builder()
    // ...
    .responseFormat(ResponseFormat.JSON)
    .build();

或者通过从 Java 类中指定一个明确的模式:

GoogleAiGeminiChatModel.builder()
    // ...
    .responseFormat(ResponseFormat.builder()
        .type(JSON)
        .jsonSchema(JsonSchemas.jsonSchemaFrom(Person.class).get())
        .build())
    .build();

来自一个 JSON 模式:

GoogleAiGeminiChatModel.builder()
    //...
    .responseFormat(ResponseFormat.builder()
        .type(JSON)
        .jsonSchema(JsonSchema.builder()...build())
        .build())
    .build();
  • 对于Mistral AI:

MistralAiChatModel.builder()
    //...
    .responseFormat(MistralAiResponseFormatType.JSON_OBJECT)
    .build();
  • 对于Ollama:

OllamaChatModel.builder()
    //...
    .responseFormat(JSON)
    .build();

注意:对于其他模型提供商,如果基础模型提供商不支持 JSON 模式,那么使用提示词工程实现 JSON 模式是最佳选择。此外,你还可以尝试降低温度值以获得更高的确定性。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号