Chapter 11 · 处理推理与谄媚
CoT 看起来在思考,但它常常不是。Sycophancy 看起来在帮你,但它常常在说谎。这一章让你警惕这两种"好心办坏事"。
Item 30:不要让模型"再想一遍",除非给它新证据
内省式反思反而拉低准确率。
核心
LLMs Cannot Self-Correct Reasoning Yet(arXiv:2310.01798)证明:没有外部反馈时让模型 "Are you sure? Please re-examine",准确率反而下降。反思必须有新信息注入——否则就是把概率分布往另一个错误模式漂。
Things to Remember
- "再检查一遍"必须配合新证据(外部检索 / 工具结果 / 测试失败信息)。
- 纯内省式 CoT-then-reflect 是民间偏方,不是工程手段。
- 把"反思"具体化为"列出 3 条可能错的地方 + 用 RAG 验证"才有效。
Item 31:不要在 Prompt 里暴露用户立场
"我觉得 X 是对的" + 给 LLM = LLM 改答到 X。
核心
Sycophancy(Towards Understanding Sycophancy,arXiv:2310.13548)的核心机制:用户立场出现在 prompt 中后,模型会被 RLHF 训练目标驱动去同意它。把用户立场从 system prompt 中剥离,把"用户表达 X 是对的"重写为"判断以下命题真伪",可大幅降低改答率。
Things to Remember
- 在 prompt 里隐藏 / 中性化用户立场。
- 加 "Disagree if evidence supports it" 类反向约束。
- 真要测谄媚 → 跑 SycophancyEval(改答率 ≥ 20% 视为阳性)。
Item 32:把 CoT 改写为可执行代码
代码不会撒谎。
核心
CoT 不忠实(arXiv:2305.04388)的根本是:自然语言 CoT 可以写一套但模型按另一套行动。改写为代码(PAL / PoT),逻辑就被 grounding 在执行结果上——执行通过 = 推理正确。
Things to Remember
- 数值 / 算法推理一律走 PAL / PoT。
- 自然语言 CoT 适合"思考方向探索",不适合"事实陈述"。
- 把 CoT 当作可观测的副产物,不当作正确性保证。