Yapılandırılmış Çıkışlar
Neyi çözeceğiz
LLM 'yi JSON formatında ve belirtilen Schema' da zorlar
Eski çözümler
LLM 'den JSON formatında ve her alanın adı ve türünü sormak için bir ipucu, örneğin
output in JSON object with follow fileds:
- name: string
- age: number
- isFemale: boolean
LangChain'in size işaretler oluşturmanıza yardımcı olacak bir parser'i vardır.
Soru 1
Ancak, LLM'nin JSON dışı formatta çıkış yapma ihtimali ya da alanların beklenmedik olması mümkündür.
Daha sonra çözüm
OpenAI API'si, LLM'leri JSON formatına döndürmeye zorlayan json_object
modunu tanıtır.
Soru 2
LLM tarafından döndürülen alanlar beklenmeyen olabilir.
En yeni çözümler
OpenAI'nin Structured Outputs programı, API alanlarına açık bir JSON şema iletebilir, böylece LLM'ler belirtilen formatta çıkış yapabilir.
response_format: { "type": "json_schema", "json_schema": … , "strict": true }
Json_schema içinde bir format belirtebilirsiniz, örneğin:
{
type: "json_schema",
json_schema: {
name: "math_response",
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
},
strict: true
}
}
Node.js 'de, daha kolay kullanabilirsiniz:
Öncelikle JSON Schema
import { z } from "zod";
import { zodResponseFormat } from "openai/helpers/zod";
const Step = z.object({
explanation: z.string(),
output: z.string(),
});
const MathResponse = z.object({
steps: z.array(Step),
final_answer: z.string(),
});
response_format alanına girer
const completion = await openai.beta.chat.completions.parse({
model: "gpt-4o-mini",
messages: [
{ role: "system", content: "You are a helpful math tutor. Guide the user through the solution step by step." },
{ role: "user", content: "how can I solve 8x + 7 = -23" },
],
response_format: zodResponseFormat(MathResponse, "math_response"),
});
Çok rahat bir yer.
LangChain'de nasıl kullanılır
import { ChatOpenAI } from "@langchain/openai";
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
import { StringOutputParser } from "@langchain/core/output_parsers";
import { z } from "zod";
import { zodResponseFormat } from "openai/helpers/zod";
export async function main() {
const CalendarEvent = z.object({
name: z.string(),
date: z.string(),
participants: z.array(z.string()),
});
const model = new ChatOpenAI({
model: "gpt-4o-mini",
// 在这里添加
modelKwargs: {
response_format: zodResponseFormat(CalendarEvent, "event"),
},
});
const messages = [
new SystemMessage("Extract the event information."),
new HumanMessage("我和小明参加婚礼"),
];
const parser = new StringOutputParser();
const chain = model.pipe(parser);
const resp = await chain.invoke(messages);
console.log(resp);
}