K4.4.2 Task 4.4

对缺失数据重试会导致幻觉——格式错误会收敛,缺失数据会发散

不是所有提取错误都一样。格式错误(数据存在,格式不对)1-2 次重试就能以 94% 的成功率修复。缺失数据错误(源文档里根本没有这个信息)3 次重试后 96% 仍然失败——而那 4% “修复”的案例大概率是幻觉。

不分类地对待所有错误,既浪费算力又编造数据。

错误分类学

错误类型可重试?解决率示例
格式1-2 次重试 94%“March 15” 而非 ISO 8601
结构1-2 次重试 87%源文档中存在但缺失的必填字段
数据缺失4%(大概率幻觉)一般咨询单上的 warranty_expiry
模糊一次带消歧信息重试一次,然后带限定语接受不明确的日期引用

诊断信号:发散的输出

如果对同一个字段的多次重试每次产出不同的值(先是 MIT,然后 Apache-2.0,再然后 BSD-3-Clause,都是 license 字段),那数据就不存在。模型每次都在发明一个新的合理答案,因为没有真实值可以收敛。

格式错误会收敛——每次重试离正确格式更近。缺失数据会发散——每次重试编造一个不同的值。

生产数据

在一个日处理 10,000 工单的系统中:

  • 格式错误:占重试的 42%,94% 解决
  • 结构错误:占重试的 18%,87% 解决
  • 缺失数据错误:占重试的 40%,6% “解决”(大概率幻觉)

缺失数据的重试消耗了 40% 的重试算力预算,真实价值接近零。预分类可以消除这种浪费。

缺失数据的正确处理

不要重试。把字段从 required 改为 nullable(参见 K4.3.3)。接受 null 并附上 "not_found_in_source" 状态。升级紧迫度(“PO 号必须存在”)只会驱动模型在每次重试时编造。

两级策略

  1. 分类 — 错误是可重试的(格式/结构)还是不可重试的(数据缺失)?
  2. 路由 — 可重试 → 带具体错误反馈的重试循环。不可重试 → 接受 null 并附带结构化上下文。

错误分类是必不可少的第一步。没有它,系统要么在缺失数据上浪费重试(导致幻觉),要么跳过可修复的格式错误的重试(丢失数据)。

这些修不了缺失数据

升级模型(Haiku → Sonnet)混淆了能力和数据可用性。更强的模型也提取不了不存在的信息。

基于失败率的自适应重试次数适得其反。失败率超过 50% 的字段主要是源文档中不存在的(80% 的情况)。更多重试 = 更多幻觉。


一句话总结: 重试前先分类错误——格式错误在反馈下收敛到正确值,但缺失数据错误会发散为编造,对它们重试浪费了 40% 的算力同时产出幻觉输出。