K4.4.1 Task 4.4

盲目重试:3 次修了 12%。带错误反馈:1 次修了 87%。

当提取结果未通过验证时,原封不动地重发同一个 prompt 会得到同样的结果。模型做的是一个有意的提取选择,不是随机失误。没有针对性的错误信息,它会再做一次同样的选择。

三要素重试 Prompt

有效的重试需要三个输入:

  1. 原始文档 — 源数据
  2. 失败的提取结果 — 产出了什么
  3. 具体的验证错误 — 哪里需要修

示例:“行项目合计 $450 但 total 字段写的是 $500。差了 $50。源文档第 4 行有一笔 $50 运费未被提取。“

反馈的具体程度决定成功率

在 150 次提取失败上测试了三个级别:

反馈级别纠正率
”提取失败,请重试”11%
“customer_name 字段为空”54%
“customer_name 为空,但文档第 1 行写着 ‘Bill To: John Smith‘“87%

每一层具体性——错误信号、字段识别、源数据位置——都有实质贡献。最具体的反馈比通用重试消息多解决 8 倍的失败。

盲目重试(同样的 prompt,无反馈)3 次后纠正 12%。带具体错误反馈的一次重试纠正 73%。两次带反馈的重试:89%。

一次重试包含所有错误

当多个验证错误同时出现时,在一个重试 prompt 中包含全部错误。Claude 能一次性处理多个问题。逐个错误依次重试浪费 API 调用,而且修旧错时可能引入新错。

先建验证层

第一步不是重试循环,是能识别具体错误并把它们格式化为反馈的验证层。不知道哪里出了问题,任何重试 prompt 都提供不了针对性信息。

这些方法不行

调高 temperature 增加的是随机性,不是准确性。格式和值的错误需要的是定向纠正,不是变异。

“再试一次,仔细点” 不可操作。模型已经尽力了——它需要知道的是具体哪里错了。

不带反馈的重试 得到相同结果,因为模型没有新信息来改变行为。


一句话总结: 每次重试都要包含原始文档、失败的输出和带精确值的具体验证错误——这能纠正 87% 的失败,而通用的”请重试”只有 11%。