结构化输出
从自然语言转为可校验的数据,区分格式正确、字段完整与事实有据。
先设计数据,再生成内容
当结果需要保存、筛选或交给其他程序时,提前约定字段比事后从一段文字中猜测含义更方便。服务支持的结构化输出可以按 Schema 约束格式;只在提示词里写“输出 JSON”,并不等于启用了这类能力。各平台支持范围不同,可参考 Anthropic 的结构化输出说明。
一个行动项的数据约定
下面是本站的教学数据结构。日期只在原文明确时填写,缺失值使用 null;source_id 和 evidence 用来回查材料。
{
"task": "整理试运行问题清单",
"owner": null,
"due_date": "2026-11-09",
"source_id": "P-02",
"evidence": "2026年11月9日为整理试运行问题清单的截止日期,负责人待定。"
}| 字段 | 约定 | 校验问题 |
|---|---|---|
| task | 非空文本 | 是否描述一个明确任务? |
| owner | 文本或空值 | 材料是否明确指定负责人? |
| due_date | 日期文本或空值 | 年份和日期是否有依据? |
| source_id | 材料编号 | 该材料是否在本次允许范围内? |
| evidence | 原文片段 | 是否确实存在于对应材料? |
做三层检查
解析检查: 确认响应完整,能够按预期格式读取。超时、截断和拒绝响应应单独处理,不把错误文本当作业务数据。
结构检查: 检查必填字段、类型、枚举值与额外字段。即使使用平台的结构化输出,也应按应用自身的数据约定验证边界。
业务检查: 核对编号、日期和原文证据。满足 Schema 的字符串仍可能包含错误事实;格式约束不能替代来源核对。
失败时给出明确状态
教学流程可以使用 ok、needs_review、failed 三种状态。缺少负责人时保留空值并进入人工核对;证据无法回查时不写入最终行动表;请求失败时保存错误类型,按受限次数重试。
重试前区分原因。缺少输入材料需要补充资料,格式错误需要修正约定,权限错误需要解决访问范围。重复相同请求不一定能解决问题。
动手检查
用一份完整记录和一份故意缺少日期的记录分别测试。确认第二份输出保留空值,而不是编造日期。再修改一个材料编号,确认程序能够发现无效引用。
下一步:RAG 与知识检索,解决材料多到无法全部放进一次请求的问题。