结构化输出
GenAIScript支持生成带有自动数据修复功能的结构化输出。它可以利用LLM提供商内置的模式验证,或根据需要执行自己的验证。
结构化输出通过两个标志进行配置:responseType
,用于控制数据格式;以及responseSchema
,用于控制数据结构。
响应类型
响应类型由可选参数responseType
控制,具有以下选项:
json
: 告诉LLM生成有效的JSON输出。yaml
: 告诉LLM生成有效的YAML输出。json_object
: 使用内置的OpenAI JSON输出json_schema
: 使用内置的OpenAI JSON输出功能,并带有JSON模式验证
请注意,text
和 markdown
也支持用于配置LLM输出。
json
在此模式下,GenAIScript会提示大语言模型生成有效的JSON输出。它还会验证输出内容,并在无效时尝试修复。 该模式由GenAIScript实现,不依赖于大语言模型供应商的支持。
script({ responseType: "json",})
如果提供了responseSchema
,则会应用模式验证。
yaml
在此模式下,GenAIScript会提示LLM生成有效的JSON输出。它还会验证输出内容,并在输出无效时尝试修复。 该模式由GenAIScript实现,不依赖LLM提供商的支持。
script({ responseType: "yaml",})
如果提供了responseSchema
,则会应用模式验证。
json_object
在此模式下,GenAIScript会提示LLM生成有效的JSON输出。它还会验证输出内容,并在无效时尝试修复。 该模式依赖于LLM(如OpenAI)的内置支持功能。
script({ responseType: "json_object",})
json_schema
结构化输出是一项功能,允许您以数据格式(如使用JSON schema)生成结构化数据。这比json_object
更为严格。
要启用此模式,请将responseType
设置为json_schema
并提供responseSchema
对象。
script({ responseType: "json_schema", responseSchema: { type: "object", properties: { name: { type: "string" }, age: { type: "number" }, }, required: ["name", "age"], },})
请注意,此模式支持的架构功能存在若干限制。
additionalProperties: true
不支持。- 所有可选字段(例如不在
required
中的字段)将被返回,且可能为null
响应模式
您可以通过responseSchema
指定一个schema,这将自动启用结构化输出模式。输出将根据该模式进行验证,如果输出无效,GenAIScript会尝试修复。如果输出与模式不匹配,脚本将失败。
script({ responseType: "json", responseSchema: { type: "object", properties: { name: { type: "string" }, age: { type: "number" }, }, required: ["name", "age"], },})
内联模式
请注意,本节内容适用于整个聊天输出。您也可以使用内联模式,并混合使用markdown和数据格式,GenAIScript将能够解析这种混合格式。
选项
如果您正在构建一个LLM-as-a-Judge(大语言模型作为评判者)并且只需要输出一组特定词汇,您也可以考虑使用choices来提高模型生成指定词汇的概率。
cast
cast 函数是一个 GenAIScript 运行时助手,用于将非结构化文本/图像转换为结构化数据。
import { cast } from "genaiscript/runtime"
const { data } = await cast((_) => _.defImages(images), { type: "object", properties: { keywords: { type: "array", items: { type: "string", description: "Keywords describing the objects on the image", }, }, }, required: ["keywords"],})