首页/AI/提示词工程速查/结构化输出的可解析率
评估与迭代50 条

结构化输出的可解析率

结构化任务把“能不能解析”当独立指标:解析成功率、字段缺失率、类型错误率分开统计,再谈内容正确率。

提示词工程速查AI更新于 2026-10-13

先保证能解析,再谈对不对

结构化输出任务要把「能不能解析」当作独立指标:解析成功率、字段缺失率、类型错误率分开统计,然后再看内容正确率。顺序不能颠倒——解析都失败时,内容正确率无从谈起,而把解析失败的样本直接剔除会让真实失败率被隐藏。常用做法是给可解析率设一个门槛(如 99.5%),跌破就回滚。

基本信息

检查顺序可解析 → 必填键齐全 → 类型正确 → 内容正确
统计口径分开报解析成功率、字段缺失率、类型错误率
门槛可解析率设阈值(如 99.5%),跌破回滚
口径区分首次成功率与最终成功率(含重试)要分开写

典型使用场景

  • 抽取流水线上线前:跑解析链路检查点,确认各环节失败率
  • 版本对比:新版提示可解析率是否下降
  • 重试策略评估:衡量重试带来的收益与额外成本
  • 异常定位:按检查点分桶,区分是结构问题还是截断问题
  • 线上监控:持续统计解析失败率,设阈值告警

解析链路检查点

解析链路检查点
checks = [
  ("json_loadable", lambda raw: json.loads(raw) is not None),
  ("required_keys", lambda obj: set(KEYS) <= set(obj)),
  ("types_ok", lambda obj: all(isinstance(obj[k], T[k]) for k in KEYS)),
]
# 按检查点分桶统计:失败率高的环节优先修
# 截断导致的解析失败与结构错误要分开看
# 失败样本必须留存原文,便于定位是提示问题还是长度问题
# 重试成功也算一次失败,统计时区分首次与最终成功率

检查点与处置

检查点含义失败时的常见原因
json_loadable整体能否被解析输出被截断、混入解释文字
required_keys必填键是否齐全提示未列全字段、模型自行省略
types_ok字段类型是否正确数字写成字符串、空值写成 ""
内容正确取值是否与原文一致抽取偏差,与格式无关
把解析失败的样本直接剔除再算准确率,会把问题藏起来;失败率必须单列,并保留失败原文用于定位。
重试成功也算一次失败:统计口径要写清是首次成功率还是最终成功率,两者差值反映重试收益。

易错点

  • 剔除解析失败样本后再算准确率,指标虚高,线上真实失败率被掩盖
  • 首次成功率与最终成功率混报,读者以为解析很稳定,实际依赖多次重试
  • 输出被截断造成的解析失败与结构错误混在一起统计,改进方向无法确定
  • 不设可解析率门槛,上线后先出现下游大批解析报警再回头查提示

数据来源与参考

  • OpenAI Structured Outputs 文档:JSON Schema 遵循与解析保障说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌