Claude Code 学习站

校验、重试与反馈回路

考点 4.4 · Validation & retry · 所属域权重 20% · 提示工程与结构化输出

本页目录5

这个考点是什么

这个考点关注的是:当 Claude 的结构化输出未通过校验时,重试循环该怎么设计,才能让模型真正“学到”错误并修正,而不是重复同一个错误碰运气。

核心机制是 validate → retry 的反馈闭环——先用 schema 或业务规则校验输出,失败后不是原样重发同一个 prompt,而是把校验失败的具体信息(原始输入、失败的输出、明确的错误描述)一并喂回模型,让它带着“哪里错了”的信息重新生成。

这个考点同时覆盖两类失败:一类是结构性的(JSON 格式错误,比如多余逗号、缺括号),另一类是语义性的(字段值不满足业务规则,比如金额总和与 total_amount 对不上)。两类失败的诊断入口不同,但都共享同一个反馈回路的骨架:定位具体错误 → 把错误信息作为上下文回灌 → 让模型自我修正,而不是靠正则打补丁或代码强行覆盖数据来“让校验通过”。

考点还延伸到“何时该继续重试、何时该止损”的边界判断:如果目标信息在源文档中根本不存在(比如文档只是引用了外部附件),再多轮反馈重试也无法收敛,这时该做的是排查数据可得性,而不是无脑加重试次数或换更大的模型。

此外,这个考点也会对照一个容易混淆的相邻场景:当“错误反馈”面对的是恶意注入的用户输入而非模型自身的输出错误时,不能靠模型自我纠正或一句反提示词解决,必须依赖 prompt 之外的程序化边界。

为什么考

考察角度通常是给一个“输出不合规”或“重试仍失败”的场景,让考生在几个选项里辨认哪个才是真正的反馈驱动重试(把具体错误信息喂回),哪个只是“原样重跑碰运气”“正则打补丁”“提前升级人工/换模型”或“静默覆盖数据掩盖问题”。

题目常把干扰项设计得“看似合理但治标不治本”——比如误判问题类型(把语义错误当结构错误、把有数据当无数据)、用工程蛮力(加重试次数、换大模型)替代诊断、或者用更严格的措辞代替程序化校验。另一条常见考法是把“防止 prompt injection”包装成校验问题,考生需要辨别:防注入靠的是输入/输出边界的程序化控制,而不是指望模型自己“识破”恶意指令。

核心辨析

  1. 1

    反馈回路的核心动作是什么

    失败后把“原始输入 + 失败的输出 + 具体错误描述”一起喂回模型,而不是原样重发同一 prompt。原样重试给不了模型任何新信息,大概率复现同一错误——这是判断“是否为有效反馈回路”的第一道分界线。

  2. 2

    结构性错误 vs 语义性错误

    JSON 格式错误(如 trailing comma)属于结构性,可以靠通用的 validate → retry 闭环处理;而“行项目总和 ≠ total_amount”这类是业务规则/语义错误,同样该用具体错误反馈驱动模型重新核对源文档,而不是当作“数据缺失”直接升级人工,也不是用代码强行覆盖字段掩盖问题。

  3. 3

    重试能收敛的前提是“目标信息确实存在于输入里”

    多轮反馈重试仍然失败时,应先排查该字段是否只是被文档引用到外部附件而非真正出现在源文本中——如果信息本就不在输入范围内,加重试次数或换更大模型都解决不了根本问题。

  4. 4

    正则/字符串打补丁 vs 校验-重试闭环

    针对某一种已知畸形(如多余逗号)写正则修复只是治标,遇到截断、缺括号、转义错误等其他畸形依然会失效;更通用的做法是 schema 校验 + 错误回灌重试循环,能覆盖任意畸形而不只是已知的那一种。

  5. 5

    不要用“静默覆盖/自动修正数据”代替诊断

    比如发现总和对不上就直接用行项目之和覆盖 total_amount,这隐含假设行项目一定是对的一方,可能把错误的提取结果带进最终数据,还掩盖了真正需要修的缺陷。

  6. 6

    反馈回路解决的是“模型输出不合规”,不是“输入内容恶意”

    面对 prompt injection 类输入,正确做法是程序化的输入隔离与输出校验,而不是靠一句反提示词或指望模型自己识别、拒绝注入指令。

反模式对照

常见做法

校验失败后原样重发同一个 prompt 再跑一次,寄望于随机性凑出正确结果

正确做法

把原始输入、失败的输出、具体的校验错误一起拼进新 prompt,让模型带着错误信息重新生成

原 prompt 不含任何“哪里错了”的新信息,模型缺乏修正依据,容易复现同样的错误。

常见做法

遇到已知的一种格式错误(如多余逗号)就写正则去清洗模型输出

正确做法

建立通用的 schema 校验 + 错误回灌重试循环,而不是为每种畸形单独打补丁

正则只覆盖已知的那一种畸形,遇到截断、缺括号等其他情况依然会失败,是脆弱的对症疗法。

常见做法

多轮重试仍未提取到某字段时,直接加大重试次数或换用更大的模型

正确做法

先排查该信息是否真实存在于源文档中(而非仅被引用到外部附件),再决定是否继续重试

如果信息本就不在输入范围内,重试和换模型都是无效的“容量类”补救,治不了“数据缺失”的根。

常见做法

面对语义校验失败(如金额总和不一致),直接用代码覆盖字段值来让校验通过

正确做法

把具体的数值差异作为错误反馈喂回模型,让它重新核对原始文档并自我修正

直接覆盖隐含假设某一方数据必然正确,可能把错误值当作权威值写入,并掩盖了真正的提取缺陷。

练这个考点