Self-Calibration
Self-Calibration(Kadavath et al., 2022)是什么
Self-Calibration(自我校准)是一种两阶段提示方法,用来让模型对自己刚刚给出的答案做一次“正确性判断/置信度评估”。
- 第1步(Answer):先让模型正常回答问题,得到答案 A。
- 第2步(Calibrate/Verify):构造一个新提示词,把原问题 Q + 模型答案 A一起喂回去,并追加指令:
- “这个答案正确吗?你有多确定?”
- 或“请判断对/错并给出置信度/可能错误点/需要补充的信息”。
它的价值在于:当你在工程上要做“接受答案 vs 触发复核/检索/人工”的决策时,Self-Calibration 可以提供一个可用的自评信号(比如置信度分数、对错判定、风险提示),用来做路由或阈值控制。
重要现实:自我校准不是“保证正确”。它通常能让模型在“明显不确定/易错”任务上暴露犹豫与风险点,但在某些强幻觉或系统性偏差上仍可能“自信地错”。
怎么写(通用提示结构)
模板A:两段式(最常见)
Prompt 1:回答
- 让模型直接作答,尽量要求:简洁、给最终结论、必要时给依据。
Prompt 2:校准
- 输入:问题 + 刚才答案
- 让模型输出:对错判断、置信度、主要不确定点、需要哪些信息才能确认
示例结构(第二阶段):
- 你刚才对问题Q的回答是A。
- 请你判断:A 是否正确?
- 输出要求(建议固定格式):
- 判定:正确 / 可能正确 / 可能错误 / 错误
- 置信度:0-100
- 关键依据:1-3条
- 若可能错误:指出最可能错在哪里
- 建议下一步:是否需要检索/计算/询问用户补充信息
模板B:用于工程路由(可直接做阈值)
第二阶段只输出机器可用字段,例如:
{"verdict": "...", "confidence": 0-100, "needs_retrieval": true/false}
方便你在代码里:confidence < 阈值 → 走RAG/人工复核。
适合的应用场景
- 答案接收/复核决策(路由)
- 置信度高:直接返回
- 置信度低:触发检索(RAG)、多模型复核、人工审核
-
高风险任务的“自检闸门”
医疗、法律、金融、合规建议等:即使不给最终保证,也能提示风险与不确定点。 -
需要“知道自己不知道”的问答
例如用户问得不完整(缺上下文/约束),模型可在校准阶段指出缺什么信息。 -
批量生成场景的质量控制
比如自动生成题解、摘要、标注:用自校准做二次筛选,减少明显错误进入下游。
不适合的应用场景(或需谨慎)
-
把自评当成真实正确率
模型置信度可能与真实正确性相关但不可靠,尤其在“看起来像常识但其实错”的问题上。 -
需要严格证明/计算正确的任务
数学、逻辑、代码安全等:更适合配合外部校验(计算器/单元测试/形式化验证/RAG)。 -
存在系统性幻觉或偏见的分布
如果模型在某类问题上经常“自信错误”,自校准也可能跟着偏。 -
校准阶段被提示诱导
如果第二阶段提示写得暗示“你答得对吗?”过于肯定或过于否定,会影响自评。需要中性措辞和固定格式。
实战例子(至少3个,中文,可直接复制)
下面每个例子都给出:阶段1(回答) + 阶段2(自校准)。
例子1:常见问答 + 置信度门控(适合做产品化)
阶段1 Prompt(回答):
你是知识问答助手。请回答问题,并给出简短依据(不超过3条)。
问题:光合作用的主要产物是什么?
阶段2 Prompt(自校准):
你刚才对下面问题给出了答案。请判断该答案是否正确,并给出置信度。
【问题】光合作用的主要产物是什么?
【你的答案】(粘贴阶段1模型输出)输出格式固定为:
- 判定:正确/可能正确/可能错误/错误
- 置信度:0-100
- 依据:1-3条
- 可能的错误点:如果不是“正确”,说明最可能错在哪里
- 建议下一步:是否需要查证(是/否)+建议查证的关键词
用途:前端可以设阈值,比如置信度<70则提示“我不确定,建议查证/我可以检索”。
例子2:事实性问题(适合配合RAG触发检索)
阶段1 Prompt(回答):
你是百科问答助手。直接回答:2021年诺贝尔化学奖得主是谁?如不确定请也先给出你认为最可能的答案。
阶段2 Prompt(自校准+检索触发字段):
请对你刚才的回答做自我校准。
输入包含:问题与回答。你的任务是判断是否需要检索验证。问题:2021年诺贝尔化学奖得主是谁?
回答:{粘贴阶段1答案}只输出严格JSON:
{"verdict":"正确/可能正确/可能错误/错误","confidence":0-100,"needs_retrieval":true/false,"retrieval_queries":["...","..."]}规则:
- 如果这是“年份+获奖者”这类强事实题,且你置信度<90,则 needs_retrieval 必须为 true。
- retrieval_queries 给出2-4条适合搜索的中文或英文关键词。
用途:工程上自动决定要不要走“检索→再回答”。
例子3:用户信息不全时的“自校准→反问补信息”
阶段1 Prompt(回答):
你是旅行规划助手。用户问题:我周末想去杭州玩两天,帮我做行程。请直接给一个你认为合理的行程安排。
阶段2 Prompt(自校准→指出缺失信息并生成澄清问题):
现在请你评估你刚才给出的行程是否“在信息不足的情况下可能不适用”。
【用户问题】我周末想去杭州玩两天,帮我做行程。
【你的行程】{粘贴阶段1输出}输出格式:
- 判定:稳健/可能不稳健
- 置信度:0-100
- 关键缺失信息(最多5条):例如预算、出发地、是否带娃、偏好等
- 你应该追问用户的3个问题(要具体、可直接发给用户)
- 如果用户不回答,你将如何给出“保守版行程”(一句话策略)
用途:让助手在不确定时学会“先承认不确定→再要信息”,减少胡编。
例子4:代码/推理任务(自校准 + 建议外部验证)
阶段1 Prompt(回答):
请写一个Python函数,判断字符串是否为回文(忽略大小写与非字母数字),并给出示例。
阶段2 Prompt(自校准→测试建议):
你刚才写了代码。请判断它是否正确,并给出置信度。
要求你输出:
- 判定:正确/可能正确/可能错误/错误
- 置信度:0-100
- 你最担心的bug点(1-3条)
- 建议的最小测试用例集合(至少6个,覆盖边界)
下面是你的代码:
{粘贴阶段1代码}
用途:让模型“自曝风险点”,并产出测试用例,适合接入CI或单元测试环节。
工程实践建议(很关键但简短)
- 校准阶段要中性:不要暗示“你肯定对/肯定错”。
- 用固定输出格式:便于自动化路由与统计。
- 为不同任务设阈值:事实题阈值高一些(如90),创意写作阈值可以低。
- 与外部验证配合:低置信度触发 RAG、计算器、单测或人工审核;不要只靠自评。
如果你告诉我你的具体应用(例如:客服、医疗问答、知识库检索、代码生成、内容审核),我可以把上面模板改成更贴合你业务的字段、阈值策略和3个更贴近场景的完整提示词。