结构化输出与工具调用协议
结构化输出与工具调用协议:让模型结果经过语法、schema 和业务三层校验后才进入程序控制流,通过架构、轨迹和故障重放完成验收。
学习目标
- 能解释“结构化输出与工具调用协议”如何让模型结果经过语法、schema 和业务三层校验后才进入程序控制流
- 能区分结构化输出、JSON Schema、语法校验、业务校验、修复预算,并指出控制权、数据与副作用边界
- 能固定输入与版本,沿以下证据定位首个分叉:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数
- 能注入“从自由文本中正则截取 JSON 后直接执行,忽略缺字段、额外字段和业务边界”,完成阻断、恢复、复位和同输入重放
来源、课程编排与适用边界
“结构化输出与工具调用协议”以Anthropic 公开全文《Building effective agents》为总纲,并用Claude Platform《How tool use works》核对本单元机制;涉及 MCP 的控制权边界再由MCP 2025-06-18 官方规范交叉检查。
这不是 Anthropic 出版的“19 章教材”。平台把公开文章、官方工具文档与协议规范重组为 19 个应用单元;下列 152 个节点是站内课程地图,不冒充原文目录。正文、代码、图表、实验和练习均为独立教学重写;产品接口、模型行为或协议版本变化时必须重新验证。
本单元的八个课程坐标
- 结构化输出与工具调用协议:这是“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”的第 1 个课程坐标;必须进入机制解释、实验观察或练习证据,不能只停在目录。
- 先打个比方:这是“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”的第 2 个课程坐标;必须进入机制解释、实验观察或练习证据,不能只停在目录。
- 第一个概念:为什么非要结构化:这是“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”的第 3 个课程坐标;必须进入机制解释、实验观察或练习证据,不能只停在目录。
- 第二个概念:JSON 模式与 schema,约束的是两层:这是“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”的第 4 个课程坐标;必须进入机制解释、实验观察或练习证据,不能只停在目录。
- 动手看:一次工具调用,消息是怎么来回走的:这是“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”的第 5 个课程坐标;必须进入机制解释、实验观察或练习证据,不能只停在目录。
- 一段段把它写出来:这是“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”的第 6 个课程坐标;必须进入机制解释、实验观察或练习证据,不能只停在目录。
- 第一段:定义一个带 schema 的结构化请求:这是“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”的第 7 个课程坐标;必须进入机制解释、实验观察或练习证据,不能只停在目录。
- 第二段:解析 assistant 返回的 toolcalls:这是“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”的第 8 个课程坐标;必须进入机制解释、实验观察或练习证据,不能只停在目录。
术语与运行合同
↡结构化输出:按机器可验证合同生成的结果;在“结构化输出与工具调用协议”中按以下证据核对:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。、↡JSON Schema:描述对象字段、类型和约束的声明式规范;在“结构化输出与工具调用协议”中按以下证据核对:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。、↡语法校验:确认文本能否被 JSON 解析器接受;在“结构化输出与工具调用协议”中按以下证据核对:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。、↡业务校验:检查跨字段、权限和真实资源等领域规则;在“结构化输出与工具调用协议”中按以下证据核对:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。、↡修复预算:允许纠错请求消耗的次数、时间和 token 上限;在“结构化输出与工具调用协议”中按以下证据核对:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。。
本页不变量是:只有完全验证的对象可以触发工具、数据库写入或后续自动化。任何“成功”结论都要保存以下证据:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数,模型生成的计划或自信不能替代环境事实。
关键机制与可推翻实验
合法 JSON 仍可能不合 schema
解析成功不代表字段齐全、类型正确或没有多余属性。
动手验证:分别输入截断、缺字段和额外字段样本,保存每层错误。
schema 正确仍可能业务非法
结束时间早于开始时间、金额越权等规则需要确定性业务代码。
动手验证:构造格式正确但越权的对象,确认业务层拒绝。
修复必须有限且留原文
自动纠错可能掩盖模型回归;每轮都要保留原始响应与错误。
动手验证:连续返回两次坏对象,验证达到预算后结构化失败。
失败对象零副作用
不能先执行部分字段再补校验,否则会留下不可回滚状态。
动手验证:监听工具注册表,确认所有失败样本的调用数为零。
先预测,再操作三类证据
1. 架构与复杂度边界
在“结构化输出与工具调用协议”中切换简单基线、受控工作流与自主循环,先预测“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”在哪个阶段需要增加控制权,再比较延迟、成本、可观测性和自主性。
Architecture decision laboratory
结构化输出与工具调用协议
让模型结果经过语法、schema 和业务三层校验后才进入程序控制流
不变量:只有完全验证的对象可以触发工具、数据库写入或后续自动化
最小可运行实现
function decode(raw: string, schema: Schema) {
const parsed = JSON.parse(stripFence(raw));
const value = schema.parse(parsed);
validateBusinessRules(value);
return value;
}
const value = decode(rawResponse, requestSchema);
await dispatchOnlyValidated(value);这段切片只暴露“让模型结果经过语法、schema 和业务三层校验后才进入程序控制流”的最小运行合同。交付版本还要补齐超时、密钥隔离、结构化日志、幂等和批量评测;缺少schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数时,代码能运行也不代表本章结论成立。
练习与答案
练习
问题 1:最小证明。 怎样用最少样本证明“只有完全验证的对象可以触发工具、数据库写入或后续自动化”?
问题 2:课程覆盖。 结构化输出与工具调用协议、先打个比方、第一个概念:为什么非要结构化、第二个概念:JSON 模式与 schema,约束的是两层、动手看:一次工具调用,消息是怎么来回走的、一段段把它写出来、第一段:定义一个带 schema 的结构化请求、第二段:解析 assistant 返回的 toolcalls如何进入可操作验证?
问题 3:恢复闭环。 怎样证明“从自由文本中正则截取 JSON 后直接执行,忽略缺字段、额外字段和业务边界”已经修复?
本章回顾
- “结构化输出与工具调用协议”的主问题是让模型结果经过语法、schema 和业务三层校验后才进入程序控制流。
- 核心不变量是只有完全验证的对象可以触发工具、数据库写入或后续自动化。
- 首要反例是从自由文本中正则截取 JSON 后直接执行,忽略缺字段、额外字段和业务边界。
- 最小证据包包含schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 结构化输出
按机器可验证合同生成的结果。在“结构化输出与工具调用协议”中必须能按以下证据重新定位:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。
- JSON Schema
描述对象字段、类型和约束的声明式规范。在“结构化输出与工具调用协议”中必须能按以下证据重新定位:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。
- 语法校验
确认文本能否被 JSON 解析器接受。在“结构化输出与工具调用协议”中必须能按以下证据重新定位:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。
- 业务校验
检查跨字段、权限和真实资源等领域规则。在“结构化输出与工具调用协议”中必须能按以下证据重新定位:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。
- 修复预算
允许纠错请求消耗的次数、时间和 token 上限。在“结构化输出与工具调用协议”中必须能按以下证据重新定位:schema 版本、原始响应、解析错误、字段错误、业务错误、修复次数与下游调用数。