Ana içeriğe geç

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);
}

Referans

官网