结构化输出解析
结构化输出解析是把模型生成结果转换成程序可用数据的过程。生产系统不能直接相信模型返回的 JSON,而要解析、校验、修复和兜底。
# 1. 基本流程
模型输出
-> 提取 JSON
-> 解析
-> Schema 校验
-> 业务规则校验
-> 安全校验
-> 入库或执行动作
# 2. Schema 设计
Schema 应明确:
- 字段名。
- 类型。
- 是否必填。
- 默认值。
- 枚举范围。
- 最大长度。
- 数值范围。
- 嵌套结构。
不要只在 Prompt 中自然语言描述字段。
# 3. 校验层次
| 层次 | 示例 |
|---|---|
| 语法校验 | JSON 是否能解析 |
| 类型校验 | age 是否是 number |
| 枚举校验 | priority 是否为 high/medium/low |
| 业务校验 | 开始时间必须早于结束时间 |
| 权限校验 | 当前用户能否操作该对象 |
| 安全校验 | 字段是否包含敏感内容 |
# 4. 解析失败处理
解析成功 -> 继续
解析失败 -> 请求模型修复格式
修复失败 -> 返回错误或人工处理
修复 Prompt 示例:
下面内容不是合法 JSON。请在不改变字段含义的前提下修复为合法 JSON,只输出 JSON。
# 5. 防御性设计
- 限制输出长度。
- 对字符串字段做长度和字符集限制。
- 对 URL、文件路径、SQL 等危险字段单独校验。
- 对金额、数量、权限类字段二次确认。
- 对工具调用参数使用白名单。
# 6. 常见坑
| 问题 | 后果 |
|---|---|
| 解析成功就执行 | 业务规则可能错误 |
| 缺字段自动猜 | 生成错误数据 |
| 不限制字符串长度 | 存储和展示风险 |
| 不记录原始输出 | 出错难排查 |
| 修复无限重试 | 成本和延迟失控 |
# 7. Tips 快问快答
Q:模型支持 JSON 模式还需要校验吗?
A:需要。JSON 模式提高格式稳定性,但业务规则、权限和安全仍要程序校验。
Q:解析失败应该重试几次?
A:通常 1 到 2 次即可。持续失败说明 Prompt、Schema 或任务设计有问题。
Q:结构化输出能直接驱动工具调用吗?
A:不能直接。工具调用前必须做参数、权限和风险校验。
上次更新: 2026/06/25, 17:53:09