AWS 于 2026-10-19 宣布 Amazon Bedrock 上的全部 Anthropic Claude 模型支持结构化输出,已正式可用。它在生成过程中用约束解码强制 JSON Schema,而不是生成后再校验,因此每个响应都是合法 JSON、字段类型被强制、必填字段始终存在。除响应结构外,工具调用也可开启严格模式校验入参。官方同时列出了一批「接受但不强制」的 Schema 关键字,以及首次调用要编译语法制品这一性能细节。
Amazon Bedrock 上的 Claude 支持结构化输出:约束解码强制 JSON Schema,工具入参可严格校验
这次发布的是什么
AWS 在 2026-10-19 的机器学习博客上宣布:Amazon Bedrock 上的全部 Anthropic Claude 模型现已支持结构化输出(structured outputs),并且是正式可用状态。页内时间戳是 2026-10-19T15:32:19-08:00(换算为 2026-10-19T23:32:19Z),署名行日期为 19 OCT 2026。
结构化输出解决的是一个很具体的痛点:让模型返回 JSON 时,你得到的结果在大多数时候像 JSON,偶尔不是——多一个逗号、少一个引号、字段类型变成了字符串、必填字段整个不见。常见应对是在提示词里反复强调格式、再加解析失败重试。这次的做法是把这件事从「提示词约定」改成「生成过程的硬约束」。
官方说明它用的是约束解码:在词元生成期间就强制执行你给的 JSON Schema,而不是等生成完再校验。由此得到的性质有四条:每个响应都是合法 JSON,不会遇到解析错误;字段类型被强制;必填字段始终存在;输出只含 Schema 里定义的字段。
功能分成两种互补的机制:
- JSON Schema 输出格式:控制模型响应本身的结构,适用于数据抽取、报告生成、接口响应。
- 严格工具使用:按 Schema 校验工具入参,适用于智能体流程、函数调用与多步自动化。
覆盖范围上,两个端点都可用:bedrock-runtime 与 bedrock-mantle,并且支持批处理推理、跨区域推理(bedrock-runtime 侧),以及以类型化事件流式返回结构化响应。
可用性与限制
- 状态:正式可用(generally available),不是预览。
- 覆盖范围:Bedrock 上全部 Anthropic Claude 模型,在模型可用的位置可用;两个端点分别是 bedrock-runtime 与 bedrock-mantle。
- 硬性要求:Schema 里所有对象必须把 additionalProperties 设为 false,否则 Schema 不会被接受。这是结构化输出能工作的必要条件,也是上手时最容易卡住的一条。
- 接受但不强制的关键字(API 会收下,但生成时不强制,仍需在应用层自行校验):递归 Schema、外部引用、数值约束(最小值、最大值、倍数)、字符串长度约束(最小长度、最大长度)、以及 additionalProperties 设为 false 以外的任何取值。
- 支持的范围是 JSON Schema Draft 2020-12 的一个子集:全部基础类型;枚举(限字符串、数字、布尔与空值);常量、anyOf 与 allOf(有限制);内部引用(仅内部引用,不支持外部引用);一组字符串格式(日期时间、时间、日期、时长、邮箱、主机名、URI、IPv4、IPv6、UUID);数组的 minItems 仅支持 0 和 1 两个取值。
- 首次调用的开销:第一次使用某个 Schema 时,Bedrock 会编译一份语法制品,因此首次请求可能偏慢;编译结果按账户缓存 24 小时,之后同 Schema 的开销很小。
- 缓存失效规则:改动 Schema 的结构会导致缓存失效并重新编译;只改名称或描述字段不影响缓存。建议复用 Schema。
- 每次响应都要检查结束原因:正常结束才解析;若是长度截断,需要调大上限后重试;此外还要处理模型因安全原因拒答的情况。这两种情况都可能产生不符合 Schema 的响应。
- Schema 本身计入请求体积:官方提示保持请求精简,字段名与描述要清晰(例如用有意义的字段名而不是占位名),有限取值集合用枚举约束,从基础字段起步再逐步加复杂度。
- 本文不写任何单价与降本幅度。官方只从机制上说明:输出被限制为 Schema 定义的字段,因而会减少输出长度,对高容量负载的推理成本可能有利。实际费率以官方定价页为准。
主要功能
- 请求时提交 JSON Schema,模型返回符合该 Schema 的响应
- 约束解码:在生成期间强制 Schema,而非生成后校验
- 每个响应都是合法 JSON,不必再写解析容错与重试逻辑
- 字段类型被强制,必填字段始终存在,输出不含 Schema 之外的字段
- 严格工具使用:按 Schema 校验工具入参,模型不能添加 Schema 之外的字段
- 支持批处理推理,异步处理大批请求时同样返回合规输出
- 在 bedrock-runtime 上支持跨区域推理,无需额外配置
- 支持以类型化事件流式返回结构化响应
- 首次使用某 Schema 后编译结果按账户缓存 24 小时
- 提供结构化输出用户指南与示例笔记本作为上手材料
技术原理
理解这次的改动,关键是区分两种「让模型输出 JSON」的实现路径。
第一种是生成后校验:模型自由生成文本,你拿到之后再解析、校验、失败就重试。这条路的问题是它是概率性的——同一个 Schema、同一批输入,偶尔就会失败一次;而重试意味着多一轮完整生成,成本与延迟都翻倍。提示词里写「请务必返回合法 JSON」之所以时灵时不灵,原因就在这里:它约束的是模型的倾向,不是模型的输出空间。
第二种是生成期约束,也就是这次用的约束解码。做法是在每一步生成时,先根据 Schema 算出「这一步哪些词元是合法的」,把不合法的词元屏蔽掉,只让模型在合法集合里选。这样生成的整个序列在构造上就不会违反 Schema——不需要事后补救,因为根本没有机会违反。代价是需要先把 Schema 编译成一份可供逐步匹配使用的语法制品,这就是官方说「首次请求偏慢、之后缓存 24 小时」的原因;也正因为有编译这一步,Schema 结构一改就得重新编译。
再看为什么严格工具使用值得和响应结构并列。在智能体流程里,工具调用的参数错误比响应格式错误更麻烦:响应格式错了你顶多解析失败,而参数错了会直接以错误的入参去执行动作,且往往在更下游才暴露。严格模式保证入参完全匹配输入 Schema——声明为字符串的位置一定是字符串,取值受限的字段只能落在枚举里,模型也不能自行添加 Schema 之外的字段。这把「参数校验」从应用层前移到了生成层。
还有一处容易被忽略的:输出只含 Schema 定义的字段不只是格式收益,也是成本收益。模型不再生成那些客套的包裹文案与解释性文字,输出长度随之下降。
最后是那批「接受但不强制」的关键字,值得单独记住。它意味着有些约束写在 Schema 里看起来生效了,实际上模型仍可能返回违反它的值——递归结构、外部引用、数值与字符串长度约束都在这一档。这类约束必须留在应用层校验,不能因为写了就以为拦住了。
实际体验
这篇不提供第一人称实测,只给出读者可以自己复现的验证步骤。
第一步,先写一个最小 Schema 跑通链路。四个字段即可:两个字符串、一个布尔、一个枚举。别忘了给对象加上 additionalProperties 为 false——少了这条 Schema 会被直接拒绝,这是上手时最常见的卡点。
第二步,测「必填与类型」。故意在提示词里诱导模型漏掉某个必填字段或把类型写错,观察响应是否仍然合规。这一步通过后,你对这套机制的信心就有了事实基础,而不是停留在文档描述上。
第三步,对比首次与后续调用。同一个 Schema 连发两次请求,记录各自的耗时;然后改动 Schema 的结构(比如增删一个字段)再发一次,看是否重新出现首次那种偏慢。这一步能帮你判断自己该不该为 Schema 复用做设计。
第四步,验证流式。如果要用流式返回,确认拿到的是类型化事件且最终拼接结果与 Schema 一致;不要假设流式和一次性返回的行为完全等价。
第五步,处理两种不合规的来源。一是把上限调得很小,人为制造长度截断,确认你能正确识别结束原因并重试;二是用一段会触发拒答的输入,确认你的代码把拒答当拒答处理,而不是当成格式错误去重试。官方明确说这两种情况都可能产生不合规响应。
第六步,把「接受但不强制」的那批关键字单独测一遍。写几个带数值范围与字符串长度约束的 Schema,看模型是否仍可能返回违反值。测完后把这些约束的校验补在应用层——这一步做完,你才算真正把这套能力用稳了。
项目地址与获取方式
官方博客:https://aws.amazon.com/blogs/machine-learning/structured-outputs-for-anthropic-claude-models-on-amazon-bedrock/
结构化输出用户指南:https://docs.aws.amazon.com/bedrock/latest/userguide/structured-output.html
示例笔记本:https://github.com/aws-samples/anthropic-on-aws
Amazon Bedrock 文档:https://docs.aws.amazon.com/bedrock/
具体区域清单、可用模型与费率请以官方当期页面为准。
适合谁用
- 在 Bedrock 上用 Claude 做数据抽取、报告生成、接口响应、需要下游稳定解析的团队
- 跑智能体与函数调用流程、被工具入参不合规问题困扰的工程人员
- 高容量批处理场景、希望输出长度可控以压住开销的负责人
- 此前靠提示词加重试来「骗」出 JSON、想换成确定性机制的人
- 不必用的情况:输出本来就是自由文本(比如写作、总结给人类看),加 Schema 只会限制发挥
常见问题
它和「在提示词里要求返回 JSON」有什么不同?
后者约束的是模型的输出倾向,这次约束的是输出空间。约束解码在每一步生成时就把不合法的词元屏蔽掉,得到的序列在构造上不可能违反 Schema,因此不需要解析容错与重试。
为什么我的 Schema 被拒绝了?
最常见的原因是某个对象没把 additionalProperties 设为 false。官方写明这是结构化输出工作的必要条件,所有对象都要设。此外还要检查是否用了外部引用——只支持内部引用。
哪些约束写了也不一定生效?
官方列出的这几类属于「接受但不强制」:递归 Schema、外部引用、数值约束(最小值、最大值、倍数)、字符串长度约束(最小长度、最大长度),以及 additionalProperties 设为 false 以外的取值。这些仍需在应用层校验。
第一次调用为什么慢?
因为首次使用某个 Schema 时 Bedrock 要编译一份语法制品。编译结果按账户缓存 24 小时,之后同一 Schema 的开销很小。改动 Schema 结构会失效并触发重新编译,只改名称或描述不会。
有了它就不用检查响应了吗?
要检查,但检查的东西变了。每次响应都要看结束原因:正常结束才解析;被长度截断需要调大上限重试;模型因安全原因拒答也要单独处理。官方明确说这两种情况都可能产生不符合 Schema 的响应。
相关工具与内容
相关内容
Cloudflare 发布 Clairic:不生成文本、只给带类型值的「提取模型」
Cloudflare 于 2026-10-19 公布 Clairic,这是它提出的 System One 模型家族里的第一个「提取模型」。它不逐字生成文本,而是走单次并行前向传播,直接给出带类型的值:从输入里摘出来的原文片段、算出来的数字与日期、有证据支撑的估计分布、以及对时间序列的预测。每个答案都附带置信度与「这个值不在输入里」的概率。目前以预览形式托管在 Workers AI 上,官方表示打算稍后发布开放权重。
OpenAI 公开 MultiLangBench:用 20 种语言从零写 SQLite,顺带考了 COBOL 迁移
OpenAI 于 2026-10-19 发布《Advancing coding in low-resource programming languages》,同时公开 MultiLangBench 评测。它的题目是让模型用 20 种编程语言从零构建一个 SQLite 兼容的数据库引擎,通过「交换数据库文件、用参考实现校验」的办法让同一套测试跨语言复用。文中另一项评测是把 COBOL 程序迁移到 C++、Java、Kotlin、Python 或 Rust,并要求可观察输出逐字节一致。评测配置与测试套件已在 GitHub 开源。
MiniMax M3.1 Flash 上架 Vercel AI Gateway:1M 上下文的开放权重模型,限时免费到 10 月 22 日
Vercel 于 2026-10-19 把 MiniMax M3.1 Flash 加进 AI Gateway,并给出到 10 月 22 日为止的免费期。官方描述它是面向编码与智能体工作的开放权重多模态模型,上下文窗口为 1M token。调用名是 minimax/minimax-m3.1-flash,可通过四种接口调用,也能接到已接入网关的编码智能体上。需要注意的是免费档只在请求由 MiniMax 自己处理时生效,需要用供应方排序把它排到前面。
继续阅读:MiniMax M3.1 Flash 上架 Vercel AI Gateway:1M 上下文的开放权重模型,限时免费到 10 月 22 日 · vLLM 发布 v0.32.0:结构化决策端点默认开启,低精度 KV 缓存铺向更多显卡架构