搶先一步
VMware 提供培訓和認證,以加速您的進度。
了解更多OpenAI 最近推出了一項強大的功能,稱為結構化輸出,可確保 AI 產生的回應嚴格遵守預定義的 JSON 結構描述。此功能顯著提高了 AI 產生內容在實際應用中的可靠性和可用性。今天,我們很高興宣布 Spring AI (1.0.0-SNAPSHOT) 已完全整合了對 OpenAI 結構化輸出的支援,以無縫的 Spring 原生方式將此功能帶給 Java 開發人員。
下圖顯示了新的結構化輸出功能如何擴展 OpenAI Chat API
注意: Spring AI 已經提供了一個強大的、模型無關的結構化輸出工具,可以用於包括 OpenAI 在內的各種 AI 模型。 OpenAI 結構化輸出功能提供了一個額外的、一致的,但特定於模型的解決方案,目前僅適用於
gpt-4o
、gpt-4o-mini
和更新的模型。
OpenAI 的 Structured Outputs
功能保證 AI 模型將生成符合提供的 JSON Schema 的回應。這解決了 AI 驅動應用程式中的幾個常見挑戰:類型安全:不再需要擔心遺失必要的鍵或無效的枚舉值;明確拒絕:基於安全性的模型拒絕變得可以透過程式設計檢測;簡化提示:無需求助於過於具體的提示即可實現一致的格式。
Spring AI 允許開發人員以最少的配置利用此功能。 讓我們探索如何在您的 Spring 應用程式中使用它。
您可以使用 OpenAiChatOptions builder 程式化地設定回應格式,如下所示
String jsonSchema = """
{
"type": "object",
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"explanation": { "type": "string" },
"output": { "type": "string" }
},
"required": ["explanation", "output"],
"additionalProperties": false
}
},
"final_answer": { "type": "string" }
},
"required": ["steps", "final_answer"],
"additionalProperties": false
}
""";
Prompt prompt = new Prompt("how can I solve 8x + 7 = -23",
OpenAiChatOptions.builder()
.withModel(ChatModel.GPT_4_O_MINI)
.withResponseFormat(new ResponseFormat(ResponseFormat.Type.JSON_SCHEMA, jsonSchema))
.build());
ChatResponse response = this.openAiChatModel.call(prompt);
注意:您必須遵守 OpenAI JSON Schema 的子集語言格式。
Spring AI 提供了一個方便的 BeanOutputConverter 工具,可以自動從您的網域物件產生 JSON 結構描述,並將結構化回應轉換為 Java 實例
record MathReasoning(
@JsonProperty(required = true, value = "steps") Steps steps,
@JsonProperty(required = true, value = "final_answer") String finalAnswer) {
record Steps(
@JsonProperty(required = true, value = "items") Items[] items) {
record Items(
@JsonProperty(required = true, value = "explanation") String explanation,
@JsonProperty(required = true, value = "output") String output) {}
}
}
var outputConverter = new BeanOutputConverter<>(MathReasoning.class);
var jsonSchema = outputConverter.getJsonSchema();
Prompt prompt = new Prompt("how can I solve 8x + 7 = -23",
OpenAiChatOptions.builder()
.withModel(ChatModel.GPT_4_O_MINI)
.withResponseFormat(new ResponseFormat(ResponseFormat.Type.JSON_SCHEMA, jsonSchema))
.build());
ChatResponse response = this.openAiChatModel.call(prompt);
String content = response.getResult().getOutput().getContent();
MathReasoning mathReasoning = outputConverter.convert(content);
注意: 確保您使用 @JsonProperty(required = true,…)
註解。這對於產生一個準確標記欄位為必要的結構描述至關重要。 OpenAI 強制執行此操作,以使結構化回應能夠正常工作。
或者,當使用 OpenAI 自動配置時,您可以透過以下 chat 應用程式屬性配置所需的回應格式
spring.ai.openai.api-key=YOUR_API_KEY
spring.ai.openai.chat.options.model=gpt-4o-mini
spring.ai.openai.chat.options.response-format.type=JSON_SCHEMA
spring.ai.openai.chat.options.response-format.name=MySchemaName
spring.ai.openai.chat.options.response-format.schema={"type":"object","properties":{"steps":{"type":"array","items":{"type":"object","properties":{"explanation":{"type":"string"},"output":{"type":"string"}},"required":["explanation","output"],"additionalProperties":false}},"final_answer":{"type":"string"}},"required":["steps","final_answer"],"additionalProperties":false}
spring.ai.openai.chat.options.response-format.strict=true
使用結構化輸出時,OpenAI 模型偶爾會因為安全原因而拒絕滿足請求。由於拒絕不一定遵循您在 response_format 中提供的結構描述,因此 API 回應包含一個名為 refusal
的新欄位,以指示模型拒絕滿足請求。
Spring AI 將此拒絕欄位映射到 AssistantMessage 的中繼資料。依 refusal
鍵搜尋。
我們正在探索將新的 OpenAI 特定結構化輸出功能整合到 Spring AI 的模型無關結構化輸出工具集中的可能性。
如需更多資訊,請查閱 Spring AI 和 OpenAI 參考文檔。
Spring AI - 結構化輸出 (部落格)
Spring AI 部落格
Spring AI 對 OpenAI 結構化輸出功能的支援使 AI 驅動的應用程式更加可靠且易於開發。透過確保類型安全和一致的結構化格式,開發人員可以專注於建構創新的功能,而不是與不可預測的 AI 輸出作鬥爭。
我們可以強調 Spring 開發人員的以下優勢
請探索此新功能並分享您的經驗。 與往常一樣,我們歡迎提供回饋和貢獻,以協助改進 Spring AI 並使其更加強大和使用者友善。
請繼續關注更多更新,因為我們將繼續增強 Spring AI 與尖端 AI 技術的整合!