结构化输出(JSON + 修复重试)
解决的问题
一旦你希望模型输出 机器可读数据(路由结果、工具调用、计划列表…),纯文本就会变脆弱:
- JSON 外围夹杂解释文字
- code fence(
json ...) - 缺字段 / 类型错 / 值不合法
结构化输出提供了“可测试的纪律层”:把模型输出变成可验证的对象。
核心做法
- 要求输出 JSON。
- 从返回中提取第一个可解析的 JSON 值。
- 用小 parser 做 schema 校验。
- 校验失败则发 repair prompt 重试。
flowchart TD
P["提示:只返回 JSON"] --> LLM["模型"]
LLM --> X["提取 JSON"]
X --> V{"schema 校验?"}
V -->|通过| OK["得到类型化结果"]
V -->|失败| R["修复提示 + 重试"] --> LLM
什么时候用
- 路由决策
- 工具调用 / action schema
- 计划(步骤列表)
- 任何需要离线回归测试的“类 API 输出”
本仓库对应代码
- 实现:
src/agent_patterns_lab/runtime/structured.py - 示例:
examples/10_structured_output.py - 测试:
tests/test_structured.py