Amazon Bedrock为Claude模型上线结构化输出
AWS表示,bedrock-runtime与bedrock-mantle两个端点均支持JSON Schema输出和严格工具调用,模型在生成token时即受约束,不再需要自定义解析或重试逻辑。
AI解读:该功能通过约束解码在生成token时强制执行JSON Schema,AWS称输出格式因此从概率性变为确定性;配套的严格工具使用会把工具参数限制在输入schema内。
AWS表示输出字段类型和必填字段得到保证,并称只输出schema定义的字段可减少输出token数,在高并发场景可能降低推理成本——这一成本说法未附公开数据。
使用时需在所有对象上设置additionalProperties: false;递归schema、外部 $ref、数值与字符串长度约束等关键字虽被API接受,但不在生成阶段强制执行。
首次使用新schema需编译语法产物,可能略慢,编译结果按账户缓存 24 小时;修改schema结构会使缓存失效,仅改字段名或描述则保留缓存。
该功能支持批量推理,bedrock-runtime端点还支持跨区域推理和流式返回类型化事件;出现拒绝或max_tokens截断时仍可能返回不符合schema的内容,需检查stop_reason。
AWS机器学习博客发文称,Amazon Bedrock现已为所有Anthropic Claude模型提供结构化输出,适用于bedrock-runtime和bedrock-mantle两个端点中模型可用的区域与场景。该功能已正式可用(generally available)。
据AWS描述,结构化输出使用约束解码,在生成token的过程中执行用户提供的JSON Schema,AWS称模型不会生成违反schema的token,输出格式由概率性变为确定性。
两个端点各自的能力
在bedrock-runtime端点,用户可通过Boto3调用InvokeModel API,schema放在请求体的output_config.format中,以JSON对象而非JSON字符串传入;也可通过Converse API使用。
在面向智能体应用的bedrock-mantle端点,Messages API支持严格工具使用:为工具设置strict: true后,模型返回的工具参数须与input_schema完全一致,不能添加schema之外的字段。
- JSON Schema输出格式:控制模型响应结构,AWS列举的用途包括数据抽取、报告生成和API响应。
- 严格工具使用:按schema校验工具参数,用于智能体工作流、函数调用和多步自动化。
- 批量推理在两个端点均可用;跨区域推理和流式类型化事件仅在bedrock-runtime端点提供。
性能、缓存与限制
AWS说明,收到新schema时Bedrock会先校验schema并编译语法产物,因此首次请求可能稍慢;编译结果按账户缓存 24 小时,同一schema的后续请求开销很小。修改schema结构会触发重新编译,只改字段名或描述则不影响缓存。
schema需符合JSON Schema Draft 2020-12的一个受支持子集。AWS明确列出不被强制执行的关键字:递归schema、外部 $ref、minimum/maximum/multipleOf、minLength/maxLength,以及additionalProperties取false以外的值。含这些关键字的请求会成功返回,但模型仍可能输出违反约束的值,需在应用层校验。
- 所有对象必须设置additionalProperties: false,否则schema不被接受。
- 数组minItems仅支持 0 和 1。
- 字符串格式支持date-time、date、time、duration、email、hostname、uri、ipv4、ipv6、uuid等。
- AWS建议从最少必填字段开始,复用schema以利用缓存,并用贴近生产的数据测试schema。
仍需处理的失败情形
AWS称每个响应都是合法JSON,字段类型被强制执行、必填字段始终存在,因此不需要为schema违规重试。但博客同时指出,两种情况下仍可能返回不符合schema的内容:模型因安全原因拒绝,或在完成前达到max_tokens。AWS建议在代码中检查stop_reason并分别处理。