文档
结构化响应
您可以通过向 .respond()
方法提供模式(JSON 或 zod
),来强制 LLM 返回特定的响应格式。这可以保证模型的输出符合您提供的模式。
zod
模式强制执行如果您希望模型生成满足给定模式的 JSON,建议使用 zod
来提供模式。当提供 zod
模式时,预测结果将包含一个额外的字段 parsed
,其中包含已解析、验证和类型化的结果。
zod
模式import { z } from "zod"; // A zod schema for a book const bookSchema = z.object({ title: z.string(), author: z.string(), year: z.number().int(), });
const result = await model.respond("Tell me about The Hobbit.",
{ structured: bookSchema },
maxTokens: 100, // Recommended to avoid getting stuck
);
const book = result.parsed;
console.info(book);
// ^
// Note that `book` is now correctly typed as { title: string, author: string, year: number }
您还可以使用 JSON 模式强制执行结构化响应。
// A JSON schema for a book const schema = { type: "object", properties: { title: { type: "string" }, author: { type: "string" }, year: { type: "integer" }, }, required: ["title", "author", "year"], };
const result = await model.respond("Tell me about The Hobbit.", {
structured: {
type: "json",
jsonSchema: schema,
},
maxTokens: 100, // Recommended to avoid getting stuck
});
const book = JSON.parse(result.content);
console.info(book);
结构化生成的工作原理是约束模型仅生成符合所提供模式的 tokens (标记)。这在正常情况下确保了有效的输出,但也带来了两个重要的限制:
模型(尤其是较小的模型)有时可能会卡在未闭合的结构中(例如,一个开放的括号),当它们“忘记”自己处于这样的结构中,并且由于模式要求而无法停止。因此,建议始终包含 maxTokens
参数以防止无限生成。
模式合规性仅在完整、成功的生成中得到保证。如果生成被中断(由于取消、达到 maxTokens
限制或其他原因),输出很可能违反模式。使用 zod
模式输入,这将引发错误;使用 JSON 模式,您将收到一个不满足模式的无效字符串。