结构化输出(Structured Output / JSON Mode)
指强制 LLM 按预定义 schema 输出,而不是自由文本。实现方式:
- JSON Mode:模型保证输出合法 JSON,但字段结构仍需校验
- Function/Tool Calling:模型输出结构化的
tool_call(函数名 + 参数对象),由框架解析执行 - Constrained Decoding / Grammar:在解码阶段用正则/CFG 约束 token,硬保证输出完全符合 schema(如 OpenAI 的
response_format、Anthropic 的 tool use、Outlines/Instructor 等)
核心价值:把"模型输出"从不可靠的自然语言变成可被程序直接解析的数据。
在 Agent 工具调用中为什么重要
1. 工具调用依赖严格契约
Agent 要执行search_db(sql=...)、send_email(to=...),参数必须是合法 JSON。自由文本里混入一个多余逗号、引号或字段名拼错,解析就失败,整个链路中断。
2. 减少"幻觉工具名 / 非法参数"
约束解码能杜绝模型编造不存在的函数名或非法枚举值,从源头降低调用失败率。
3. 可编程、可校验、可重试
- 输出可直接
json.loads/ schema 校验,无需正则硬抠。 - 校验失败可精准定位字段并触发局部重试(只重生成错误字段),而非整段重来。
- 便于接入类型系统(Pydantic、Zod),把模型输出当强类型数据用。
4. 支撑多步闭环的稳定性
Agent 是链式决策,前一步输出是后一步输入。结构化输出保证每步的"接口"稳定,误差不会因格式漂移而累积放大。
5. 安全与审计
结构化输出可被 guardrail 规则检查(如"action 字段是否在白名单内"),也便于记录 trace 做审计。
一句话:结构化输出把 LLM 从"会说话的组件"变成"可编程的组件"——Agent 工具调用本质是程序与模型的接口,只有输出可解析、可校验、可重试,多步闭环才能稳定可靠地跑起来。