Đầu ra có cấu trúc
giải quyết vấn đề gì
Bắt buộc LLM để xuất định dạng JSON và là Schema được chỉ định
những giải pháp cũ
Trong lời nhắc yêu cầu LLM đầu ra định dạng JSON và tên và loại của mỗi trường, ví dụ:
output in JSON object with follow fileds:
- name: string
- age: number
- isFemale: boolean
LangChain có một Parser để giúp bạn tạo ra lời nhắc.
Câu hỏi thứ 1
Tuy nhiên, LLM vẫn có khả năng xuất ra định dạng không phải JSON hoặc trường không được mong đợi.
các giải pháp sau này
API của OpenAI giới thiệu chế độ 'json_object', có thể buộc LLM phải trả về định dạng JSON.
Câu hỏi thứ hai
Các lĩnh vực trở lại của LLM có thể không được mong đợi.
Giải pháp mới nhất
Sơ đồ đầu ra có cấu trúc của OpenAI có thể truyền một JSON Schema rõ ràng vào các trường của API để LLM có thể xuất ra định dạng được chỉ định.
response_format: { "type": "json_schema", "json_schema": … , "strict": true }
Bạn có thể xác định định dạng trong json_schema, ví dụ:
{
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
}
}
Trong Node.js, bạn có thể dễ dàng sử dụng:
Định nghĩa JSON Schema trước
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(),
});
Đưa vào trường response_format
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"),
});
rất thuận tiện ở nơi này.
** Làm thế nào để sử dụng trong LangChain **
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);
}