该提示模式要求模型先生成决定最终结论的子问题,分别回答后再综合输出。它适合处理技术选型、数据库优化等开放问题,让遗漏项和推理依据更容易检查。
向语言模型提出一个宽泛、开放式的问题——“这个创业想法可行吗?”“是什么导致恐龙灭绝的?”“我应该为这一列创建索引吗?”——单次作答往往只会抓住最显眼的结论。模型会根据最先检索到的信息给出答案,却悄无声息地跳过那些真正决定答案的子问题:谁愿意付费、具体机制是什么、这一列的选择性有多高。回复读起来似乎很完整,因为语言流畅,但它的质量受限于只对问题进行了一轮处理,而这个问题实际上需要经过多轮分析——并且你无法看出它遗漏了什么。
Cognitive Verifier(出自 White 等人的《A Prompt Pattern Catalog》)通过在回答之前插入一个停顿步骤,解决了这个问题。
不要直接回答问题。首先生成一组高质量答案所依赖的子问题,分别独立回答每个子问题,然后将这些答案整合成最终回复。一个困难的问题由此变成多个简单的问题,推理过程也会清晰地呈现出来,方便检查,而不是隐藏在一段看似自信的文字里。
该目录将每种 Pattern 描述为一组基础上下文陈述,并用(P)表示。Cognitive Verifier 只需要其中两条:
(P1)生成:“当有人向你提出问题时,生成若干有助于更准确回答该问题的附加问题。”
(P2)整合:“将各个问题的答案整合起来,生成对总体问题的最终答案。”
第一条陈述负责搭建脚手架;第二条则将脚手架重新收拢为一个答案。还可以加入可选的第三条陈述,将子问题的数量限制在 3~5 个,并要求分别独立回答每个问题,避免某个不可靠的答案影响其他答案。
将以下内容直接放入 system 字段,再添加你的问题即可。两条(P)陈述都标注了标签,因此可以清楚地看到整个骨架。
When I ask you a question, do not answer it directly. Instead:
(P1 · generate) First generate 3-5 additional sub-questions whose
answers would help you answer my question more accurately and
completely. Answer each sub-question independently and concisely —
do not let one answer contaminate another.
(P2 · combine) Then combine those answers into a single, well-reasoned
final answer to my original question. Note any caveats or
disagreements the sub-answers surfaced; do not paper over them.
Format:
Sub-questions & answers:
1. [sub-question] — [answer]
2. ...
Final answer: [combined answer to the original question]
My question: [YOUR QUESTION]
使用单个 prompt,只需一次成本较低的调用,并且可以在输出中看到脚手架。当你需要并行处理和可检查的中间结果时,可以将其拆分为三个明确的阶段——返回这些中间结果,正是让推理过程可审计的关键。
async function cognitiveVerifier(question) {
const subQuestions = await decompose(question); // (P1) generate
const answered = await answerEach(subQuestions); // answer each (parallel)
const finalAnswer = await combine(question, answered);// (P2) combine
return { question, answered, finalAnswer }; // + scaffolding
}
分别回答每个子问题,正是准确性提升的来源:与原始问题相比,每个子问题规模更小、范围更明确,因此模型出错的概率远低于同时处理整个问题。由于这些子问题的答案彼此独立,相关调用还可以并行执行。
这种 Pattern 适用于宽泛、信息不充分,并且单次作答容易覆盖不全的问题:可行性分析与决策、研究与解释类问题、工程权衡、诊断,以及任何“分析一下这个”的任务。判断标准是:真正困难的部分不是计算出答案,而是弄清楚答案依赖于哪些问题。对于范围狭窄、一步即可回答的事实性问题,例如“法国的首都是哪里?”,则不必使用它——分解问题只会徒增 token 消耗。
它与 least-to-most(按顺序解决相互依赖的子问题)和 self-ask(针对多跳信息检索提出后续问题)是近亲;Cognitive Verifier 的子问题则是彼此独立的覆盖性检查,最后再将结果整合起来。
你可以逐步体验实时的“分解 → 回答 → 整合”演示,并将其与浅层的单次作答结果并排比较。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。