跳至内容

结构化输出

GenAIScript支持生成带有自动数据修复功能的结构化输出。它可以利用LLM提供商内置的模式验证,或根据需要执行自己的验证。

播放

结构化输出通过两个标志进行配置:responseType,用于控制数据格式;以及responseSchema,用于控制数据结构。

响应类型

响应类型由可选参数responseType控制,具有以下选项:

  • json: 告诉LLM生成有效的JSON输出。
  • yaml: 告诉LLM生成有效的YAML输出。
  • json_object: 使用内置的OpenAI JSON输出
  • json_schema: 使用内置的OpenAI JSON输出功能,并带有JSON模式验证

请注意,textmarkdown 也支持用于配置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"],
})