结构化输出

内置的 generate_object 工具会让配置的 LLM 生成 JSON 对象,对响应执行你提供的 JSON Schema 校验,并且只在零退出码结果中返回校验后的对象。当你需要机器可读的结果时 使用它:抽取、分类、配置生成,或者作为另一个程序的输入。

你可以通过 session.tool('generate_object', ...) 直接调用它。工具结果会把校验后的对象以 JSON 形式放在 result.output 上——解析它并读取 object 字段。同一个工具也支持 agent 自主调用,即模型在 send 过程中自行决定调用它。

直接工具调用

最简单的方式:直接调用 generate_object,先检查工具退出码,再从结果中解析出校验后的对象。

Rust
Node.js
Python
Go

校验后的值位于解析输出的 object 键上。当 result.exitCode(Node)/ result.exit_code(Python)为零时,required 中声明的字段已经通过运行时校验。 如果模型在修复重试后仍无法满足 schema,工具会报告非零退出码。

枚举分类

用 enum 把字段约束到一个固定集合。这会把自由文本分类变成带 schema 闸门的结果。

Rust
Node.js
Python
Go

嵌套模式与数组

Schema 可以任意深度地嵌套对象和数组,运行时会校验整个结构。这能在一次调用中建模真实的配置文件、清单或 API 载荷。

Rust
Node.js
Python
Go

智能体自主调用

你也可以让 agent 自行决定何时使用结构化输出。让它在 send 过程中调用 generate_object;它会先收集上下文,再输出对象。

Rust
Node.js
Python
Go
Rust
let result = session
.send(
"使用 generate_object 从下面内容提取电影标题、年份和类型:\
《盗梦空间》于 2010 年上映,是一部科幻惊悚片。",
None,
)
.await?;
println!(
"工具调用:{},令牌:{}",
result.tool_calls_count,
result.usage.total_tokens
);

模式校验覆盖

内置校验器支持:

  • type(包括 nullable 数组如 ["string", "null"])
  • required、properties、additionalProperties
  • enum、const
  • anyOf、oneOf
  • minLength、maxLength、pattern
  • minimum、maximum、exclusiveMinimum、exclusiveMaximum
  • minItems、maxItems、items
  • 嵌套对象和数组校验

说明

  • 校验后的值位于解析后 result.output 的 object 键上。当前跨 provider 默认路径传 mode: 'tool',仅 prompt 的回退方式传 mode: 'prompt'。auto、strict 和 json 在当前运行路径中都会解析为 tool。
  • 把你依赖的每个字段都列入 required——运行时会强制执行,因此缺失或类型错误的字段会导致校验失败,而不是悄悄返回部分数据。
  • generate_object 是独立注册的内置工具,不依赖 built-in skills。
  • 直接 session.tool(...) 调用是宿主控制面调用。允许模型在 send / run / stream 中自行选择工具时使用 permissionPolicy;直接 SDK 调用前应使用宿主自己的授权逻辑。

可运行版本随源码提供,位于 sdk/node/examples/basic/test_generate_object.ts 和 sdk/python/examples/test_generate_object.py。