Nhảy tới nội dung

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

Tham khảo

官网