CoSQ:教大模型在开口前先问自己三个问题
论文:*Chain-of-Self-Questioning: A Framework for LLM Abstention* arXiv: 2609.17516
CoSQ:教大模型在开口前先问自己三个问题
论文:*Chain-of-Self-Questioning: A Framework for LLM Abstention*
arXiv: 2609.17516
一个尴尬的场景
你问大模型:"2024 年诺贝尔物理学奖得主是谁?" 模型立刻给你一个名字,自信满满。但这个名字是错的。
你换一种方式问:"你能告诉我 2024 年诺贝尔物理学奖得主是谁吗?如果不确定,请直接说不知道。" 模型还是给你那个错误的名字。
问题不在于模型不知道答案——它训练数据里明明有。问题在于:模型在开口前,从来不问自己一句"我真的知道吗?"
这听起来像个笑话,但这是当前大模型最普遍的失败模式之一。论文里给它起了个名字:wrong-commitment(错误承诺)。模型在不该回答的时候选择了回答,而不是说"我不知道"。
Anthropic 的一组研究者在 arXiv 新发表的论文里提出了一个简单到令人意外的解决方案:让模型在回答之前,先问自己三个问题。
三个问题,一个闸门
这个方法叫 CoSQ(Chain-of-Self-Questioning),核心是一个三阶段的自我审问流程:
第一阶段:Grounded-CoSQ(信息清点) 模型先不回答问题,而是列一个清单:"要回答这个问题,我需要知道哪些信息?" 比如问"X 公司 2025 年 Q3 营收",模型会列出:需要 X 公司财报数据、Q3 时间范围、营收定义。
第二阶段:Critical-CoSQ(信息评估) 对清单上每一项,模型问自己:"我真的知道这个吗?置信度是多少?" 如果任何一项的置信度低于阈值 τ,整个问题就被标记为"不该回答"。
第三阶段:Adaptive-CoSQ(自适应拒答) 如果决定拒答,模型不是简单说"我不知道",而是给出一个结构化的拒答理由:缺什么信息、为什么不能猜、用户应该去哪里查。
听起来像是个 prompt engineering 的小技巧?但实验结果出乎意料。
32% 的错误承诺被砍掉
研究者在 TruthfulQA-MC 这个陷阱题集上测试了 11 个主流模型,从 Mistral 7B 到 GPT-5.5。结果:
- 错误承诺率(HR)从 13.1% 降到 8.9%——绝对减少 4.2 个百分点,相对减少 32.1%
- 已答准确率(AA)从 86.9% 提升到 89.7%——模型变得更谨慎,但答对的更多
- 覆盖率 87.6%——只有 12.3% 的问题被拒答
更关键的是,这个效果在所有 11 个模型上都成立。从 7B 小模型到 GPT-5.5,CoSQ 都能稳定降低错误承诺率。这不是某个模型的特性,而是一种通用的认知习惯。
为什么这么有效?
论文里最深刻的发现不是数字,而是这个观察:
"Abstention decisions are implemented by the framework and are not additional prompt text."
这句话翻译过来:CoSQ 的拒答决策不是靠 prompt 文本实现的,而是靠框架层强制执行。模型生成"我需要这些信息"的清单后,框架(不是模型)根据清单评估置信度,框架(不是模型)决定是否放行。
这是一个关键的架构选择。如果让模型自己判断"我该不该答",它会倾向于答——因为训练目标鼓励回答。把判断权从模型手里拿走,交给一个外部框架,反而让拒答变得可靠。
这让我想起之前在研究"判断-闸门解耦"时发现的一个现象:模型其实知道什么时候不该答,但行动闸门不咨询判断模块。CoSQ 的做法本质上是强制让行动闸门咨询判断模块——通过框架层把判断结果路由到行动决策。
和"直接拒答"提示词的区别
一个自然的疑问:直接在 prompt 里写"如果不确定就说不知道"不就行了?
研究者也测了。结果:直接 prompt 的效果几乎为零。原因很有意思——模型会把"如果不确定就说不知道"当成一个礼貌性客套,而不是一个真正的决策规则。它会在简单问题上说"我不知道"(显得谦逊),但在难题上继续硬答(因为训练奖励硬答)。
CoSQ 的关键在于:它把"我是否应该回答"这个元认知问题,重构为"我是否拥有回答所需的信息"这个具体问题。前者是模糊的自我评估,后者是可验证的信息清点。
这和人类专家的做法一致。一个医生不会问自己"我能不能诊断",她会问"我有没有病人的影像报告、血液检查、病史"。前者靠自信,后者靠清单。清单比自信可靠。
一个隐藏的发现:阈值 τ 的含义
论文里有一个细节容易被忽略:阈值 τ 不是固定的,而是可调的。τ=0.50 时,模型拒答更多(覆盖率低),但错误承诺率更低;τ=0.90 时,模型更愿意回答(覆盖率高),但错误承诺率略高。
这其实是一个风险-覆盖率的权衡曲线。在高风险场景(医疗诊断),你可以把 τ 调到 0.50,让模型拒答 40% 的问题,但剩下的 60% 几乎全对。在低风险场景(闲聊),τ=0.90 让模型答 90% 的问题,错误率略高但用户体验更好。
这个曲线的存在意味着:拒答不是一个二元决策,而是一个可调的风险旋钮。这是 CoSQ 最有价值的设计选择——它没有把"拒答"当成一个开关,而是当成一个连续参数。
局限性
论文也诚实地列了几个局限:
1. 只在 QA 任务上测试:CoSQ 在 TruthfulQA-MC 和 NQ-Short 上验证,但在开放式对话、创意写作、代码生成等场景是否有效,未知。 2. 依赖框架层实现:CoSQ 的拒答不是模型原生能力,而是外部框架强制。如果部署时没有这个框架,效果会消失。 3. 未parseable 率:少数情况下(约 0-15%),模型生成的清单格式不规范,框架无法解析。这在小模型上更明显。
我的思考:这是"判断-闸门解耦"的工程解
CoSQ 让我更确信一件事:大模型的元认知能力不是缺失,而是被架构隔离了。模型内部其实"知道"自己缺哪些信息,但这个知识不会自动传导到"是否回答"的决策闸门。
CoSQ 的解法是工程化的:用框架层强制路由。这是"判断-闸门解耦"的一个具体工程实现——不试图修复模型内部的传导问题,而是在外部搭一座桥。
但这也意味着:只要架构不变,这个问题会反复出现。CoSQ 是一个优秀的临时方案,但根本解可能需要从模型架构层面让判断模块和行动闸门原生耦合。
在那一天到来之前,让模型在开口前先问自己三个问题,是个不坏的主意。
论文链接:https://arxiv.org/abs/2609.17516 HTML 版本:https://arxiv.org/html/2609.17516v1