推案台的慢判官
一、断案如神的人栽了跟头
沈渐是顺天府最年轻的推官。
二十二岁及第,二十五岁外放知县,三十岁调回京城做了推官——专审刑部的疑难案子。同僚们都说他"断案如神":原告说完他就在心里判了,被告还没开口,惊堂木已经举起来了。
而且他大部分时候是对的。
当了三年推官,审了三百多件案子,翻案率不到半成。吏部的考评年年写上上。顺天府的匾额,他一个人扛了一半。
直到那桩案子找上了他。
案子本身不复杂。城东米铺的掌柜赵大,五十出头,前年娶了个比他小十五岁的继室。成亲不到一年,赵大暴毙。仵作验出砒霜。继室在赵大死前半个时辰给他端过一碗参汤——参汤碗沿上验出了砒霜的残留。
不止物证。继室的陪嫁丫鬟亲口作证:案发前三天,亲眼看见继室从一个走方郎中手里买了一包"灭鼠药"。动机也站得住——赵大死前一个月,刚把米铺的房契过户给了前妻的儿子。继室为这事大闹过一场。
人证、物证、动机,三样齐了。
沈渐升堂审了不到半个时辰。继室从头哭到尾,一句完整话都说不出来。丫鬟的证词滴水不漏——哪天买的、在哪个街角、花了几文钱,问什么答什么。参汤碗沿上的砒霜,铁证如山。
"押入大牢,秋后问斩。"
惊堂木落下去的时候,沈渐心里想的是这个月审得真快。
他在结案簿上写了三行字。合上卷宗,去后堂泡了一壶新茶。
三天以后,老推官陆慎言敲开了他的门。
陆慎言六十五岁,审了将近四十年的案子。顺天府里所有人都在背后叫他"慢判官"——他审一桩案子能磨上三个月。证人问完了放回去,过十天又传回来重新问。年轻的时候同僚嫌他慢。现在他老了,没人敢嫌了。因为他审过的案子——四十年,零翻案。
"小沈。"陆慎言把一沓纸放在他的案上,"赵大那个案子,你再看看。"
"看过了。铁案。"
"你真觉得是铁案?"
沈渐愣了一下。陆慎言从来不这样说话——他要是说"你再看看",那案子一定有问题。
"老推官觉得哪里不对?"
"你先告诉我——你是怎么判的。"
"这有什么好说的。人证——丫鬟亲眼看见她买砒霜。物证——参汤碗沿有砒霜残留。动机——房契被过户,她闹过——"
"停。"陆慎言伸出一只手,五指张开,"你刚才判了三步。人证一步,物证一步,动机一步——然后直接跳到了结论。中间呢?"
沈渐张了张嘴。"什么中间?"
"从'丫鬟看见买砒霜'到'继室就是凶手'——这中间有一段很长很长的路。你一步都没走。"
沈渐想反驳。但他忽然发现——陆慎言说的是对的。他从来没走过那段路。他看到证据A和结论B,脑子里有一根无形的线把两点连起来了。那根线长什么样、经过哪里——他自己也说不清楚。
"你审案最大的本事,"陆慎言拉过一把椅子坐下来,把沈渐桌上的惊堂木翻了个面,啪的一声放回原处,"也是你最大的毛病。"
"什么毛病?"
"你跳得太快了。"
二、从证据到结论之间的路
陆慎言没有让沈渐重审那个案子。他只是把他带到了自己的审案房。
推开门的那一瞬,沈渐以为自己走错了——墙上没有挂"明镜高悬"的匾额,案上没有惊堂木。屋里最显眼的是纸。卷起来的纸,铺开的纸,叠成半截的纸。最长的一卷从案面一直垂到地上,盘了两圈。每张纸上都密密麻麻写满了字,每行前面标着数字:一、二、三、四……像一本摊开来的流水账。
"这是什么?"
"我在走的路。"陆慎言的手指沿着纸面往下划,"你看这一行——第一步:仵作验出砒霜,死因确认中毒。第二步:砒霜致死量成年男子约六十钱,碗沿上残留量约多少?仵作没记,所以我派人去查。第三步:碗沿残留呈什么分布——是均匀的还是一块一块的?第四步:赵大死前最后吃的什么、喝的什么?厨房灶台上找到一碟桂花糕,桂花糕有没有验过毒?第五步——"
沈渐顺着纸上的数字往下看。第一步到第二百三十七步。死者吃过的每样东西、见过的每个人、签过的每一份契书——全部被拆成了单步。
"你审一桩案子,"沈渐的声音有点干,"写了两百多步。"
"这是少的。"陆慎言从架子上抽出另一卷——更厚,从案面垂到地上,在脚边盘了三圈,"去年那桩江南盐引私卖案,两千一百零三步。我审了四个月。"
"你不累吗?"
"累。但每一步都写在纸上以后——你不会漏。"
陆慎言的指头钉在了第一百四十三步上。那一行写的是:参汤碗沿的砒霜残留呈点状分布——非均匀涂抹。疑为事后有人用手指涂抹,非服用时的自然残留。
沈渐盯着那行字看了很久,久到陆慎言以为他睡着了。
"这一行,"他终于开口,声音有点哑,"我脑子里也闪过。"
"闪过不是走过。"陆慎言的声音不大,但每个字都落得很重,"你脑子里闪了一下,然后被'丫鬟看见买砒霜'那个更响的声音盖过去了。你跳过去的那一步——刚好是整个案子里最关键的一步。"
审案房的烛火跳了两下。沈渐额头上一层薄汗。
"从今天起,"陆慎言递给他一支笔,一摞空白的纸,"你审案子的规矩改一改。不管你心里多确定——在写下结论之前,把推理的每一步都说出来。说给自己听,说给纸听,怎么说都行。就一条:不许跳步。"
"要写多少步?"
"最少十步。从证据到结论之间,你拆不出十步,结论就不许写进卷宗。"
"十步?"沈渐看了看那卷垂到地上的长纸,"那桩小偷偷东西当场被抓的案子呢?目击证人就在三丈之内亲眼看见的——也要十步?"
"你自己算算:目击者站在什么位置?距离几丈几尺?当时什么时辰、天光够亮吗?他跟小偷有没有旧怨?他的眼睛有没有毛病?他当时在干什么、注意力集中在哪?小偷的动作是哪个手、从哪个方向掏的——光是'亲眼看见'四个字,十步根本打不住。"
沈渐低下头,看着面前那摞白纸。
"那句话本身不是证据。"陆慎言一字一顿地说。"那句话到证据之间的路,才是你的活儿。"
三、自己骗不了写在纸上的自己
沈渐花了三个月学会让自己变慢。
第一周痛苦极了。他脑子里已经判了,嘴还在第二步磨蹭。写下来的东西跟他心里想的完全对不上——写比想慢了十倍。更难受的是写着写着忽然发现:第三步的推理其实依赖了一个他根本没有证据的假设。第四步的因果关系是倒过来的。第七步跳过了最关键的一个疑问——而他以前审案的时候,这七步全是"一闪而过"。
第一个月结束的时候,他翻出了自己两年前审过的一桩旧案。按新办法重新拆了一遍——拆到第四十七步的时候,笔掉了。
两年前他判的那个人,有可能真的是冤枉的。
"知道为什么让你把每一步都说出来吗?"陆慎言翻着他新写的卷宗。沈渐的字迹比以前密了一倍——每桩案子都写满了几十页纸。
"因为写下来以后,别人可以检查每一步对不对。"
"对了一半。"陆慎言拿起沈渐新写的一卷纸,从头到尾看了两遍,"还因为——写下来以后,你自己可以检查每一步对不对。脑子里的东西不写出来,你会自己骗自己。自己骗不了写在纸上的自己。"
第二个月,沈渐开始感觉到一种奇怪的东西——以前他断案靠的是"直觉",一个说不清楚的感觉告诉他谁在说谎。这个感觉大部分时候是对的,但偶尔错的那几次,后果是致命的。现在他把直觉拆成了步骤——每一层直觉底下原来都有至少三四个他可以明确说出来的逻辑判断。
直觉没有消失。直觉变慢了——但它被拆成了能复查、能辩论、能推翻的东西。
四、三条路走到同一个地方
赵大案重审那天,陆慎言做了一件所有人都没想到的事。
他把案子分给了三个推官:沈渐、一个姓方的中年推官、一个姓顾的年轻推官。三个人各领一份全套卷宗,各审各的、各写各的推理链,三天之内不许交流。每个人写出来的链条,第四天放在一起比对。
"一桩案子为什么要三个人审?"沈渐不解。
"同一条河,三个人从三座不同的山上往下走。如果三条路都通到了同一个河口——那这个河口就八九不离十。如果有一条路走岔了——"
"另外两条路会告诉它岔在哪。"
三个人分了三条巷子去查。
沈渐从参汤碗沿的砒霜分布形态入手,往下拆了一百一十六步。砒霜呈点状分布——事后涂抹的特征。赵大胃中砒霜含量远低于致死量——他不是被毒死的。胃中有大量未消化的附子——心疾患者误食附子的典型反应。死因不是砒霜中毒,是心疾发作。
沈渐的第四十三步写着:凶手若要毒杀赵大,为何选择一种事后极易被仵作识破的手法?砒霜毒杀查验成熟——任何一个稍有经验的仵作都能验出。真凶若是有意投毒,不会选砒霜。
方推官从房契过户的时间线和受益人入手,拆了八十九步。他的第三十二步指向了一个沈渐没注意到的人物——赵大的前妻之子赵琏。房契过户的经手人是赵琏的母舅。赵大死后,米铺归赵琏所有。赵琏在赵大死前三天去了城西——不是去进货,是去见了一个走方郎中。
顾推官从丫鬟的背景查起,拆了一百四十二步。他的第二十七步翻出了一个事实:这个丫鬟两年前在城南一户姓孙的人家做过使女。那家的男主人也是"暴毙"。那桩案子当年以"病故"结了。顾推官派人去城南,找到了当年给孙家男主人看诊的老郎中——老郎中还记得那个脉象:"跟中毒一模一样,但我没证据。"
四条线索在三个人的推理链条里汇到了一处。
第四天,三份卷宗拼在了一张大案上。沈渐的一百一十六步、方推官的八十九步、顾推官的一百四十二步——从三条不同的路线出发,全部收束到了同一个人:赵琏。
他在参汤碗沿上抹了砒霜,收买了丫鬟作伪证。赵大死于心疾——跟砒霜无关。赵琏知道父亲有心疾,也认识那个走方郎中——郎中卖给他的不是砒霜,是附子。致心疾猝发的附子。
真凶伏法那天傍晚,沈渐坐在自己的审案房里,把三份卷宗并排摊在案上。阳光从西窗斜照进来,纸上三种不同的笔迹——他的瘦硬、方推官的工整、顾推官的潦草——全部停在了同一个终点。
"老推官,"他问陆慎言,"您让三个人各审各的——是不是因为您知道,一个人拆出来的链条再长,也可能在某一步走岔?"
"对。一条链子走岔了,你自己很难察觉——因为每一步在你自己看来都是对的。但如果三条链子从不同方向往上盘,最后咬在了同一颗钉子上——那你心里就有底了。"
沈渐站起来,把墙上挂了多年的"明镜高悬"匾额取了下来。
换上了陆慎言送他的四个字:步步为营。
那句话到证据之间的路,才是你的活儿。每一步都经得起看,最后的结论才经得起翻。
技术解读
思维链推理(Chain-of-Thought,CoT)是提升大语言模型复杂推理能力的一项关键技术。传统的 prompting 方式直接要求模型从问题跳转到答案——中间过程完全压缩在模型的黑箱之中。而 CoT 要求模型将推理过程外化为自然语言步骤:每一步是一个中间结论,下一步基于前一步继续推进,最终从问题一步步走到答案。
这一方法的突破性论文来自 Google Research 的 Wei et al.(2022)《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》。论文发现,只需在 prompt 中提供几个"展示完整推理过程"的示例(few-shot CoT),就能显著提升大模型在算术、常识和符号推理任务上的表现——甚至不需要任何微调,仅靠提示词的引导即可触发。后来 Wang et al.(2022)进一步提出了 Self-Consistency(自洽性):生成多条不同的推理路径,取多数投票的结果作为最终答案,进一步提高了 CoT 的可靠性和鲁棒性。
核心概念回顾
| 概念 | 通俗解释 |
|---|---|
| 思维链 | 将推理过程拆解为一系列明确的中间步骤,每一步都用自然语言表达 |
| 标准 Prompting | 直接给问题、要求答案,不展示推理过程 |
| Few-shot CoT | 在 prompt 中给出几个"演示完整推理过程"的示例,引导模型模仿 |
| Zero-shot CoT | 不给出示例,仅用"Let's think step by step"等提示触发模型自己拆解 |
| 中间推理步骤 | CoT 链条中的每一个节点:一个明确的、可检查的逻辑判断 |
| 自洽性 | 让模型生成多条不同的推理链,取多数投票的结论——多条路线验证同一个答案 |
| 贪心解码 vs 采样 | 贪心解码只取概率最高的下一步,路径单一;采样可以生成多条不同路径 |
| 推理时计算 | CoT 增加了模型在推理阶段的计算量(更多 token),但带来了推理质量的跃升 |
| 涌现能力 | CoT 只在模型规模达到一定阈值后才显著起效——小模型上效果不明显 |
| 符号推理 / 常识推理 / 算术推理 | CoT 起效最显著的三大任务类型 |
故事中的隐喻对照
| 故事元素 | 映射的技术概念 | 解释 |
|---|---|---|
| 沈渐从证据直接跳到结论,中间一步不写 | 标准 Prompting | 模型直接从问题映射到答案,中间没有显式推理 |
| 陆慎言要求"每一步都写下来,不许跳步" | 思维链推理 | CoT 要求模型将推理过程显式化为一系列自然语言步骤 |
| 纸上每行前面标的数字(一、二、三……) | 推理链中的顺序步骤 | 每个推理步骤有明确的逻辑顺序,后一步基于前一步 |
| "从证据到结论最少拆成十步" | CoT 的多步推理 | 有效的思维链通常包含多个中间步骤,越多步推理越深 |
| "脑子里闪了一下——但闪过不是走过" | 隐式推理 vs 显式推理 | 模型内部可能有隐式的推理表征,但只有显式写出才能被检查和纠正 |
| "脑子里的东西不写出来,你会自己骗自己" | 外化推理的自我纠错能力 | 将推理写出后,模型(和人)能够检查逻辑漏洞并自我修正 |
| 沈渐拆旧案到第四十七步时"笔掉了" | CoT 暴露隐式推理中的错误 | 将推理显式化后,之前"凭直觉"跳过的错误步骤暴露出来 |
| 三个推官各审各的、各写各的推理链 | 自洽性:生成多条推理路径 | 多条独立的推理链条从不同角度逼近同一个问题 |
| 三个人的链条收束到同一结论 | 多数投票 | 不同路径都指向同一答案时置信度最高 |
| "三条路走岔了一条——另外两条会告诉它岔在哪" | 自洽性消解单链偏差 | 单条链的随机错误可以通过多条链的交叉验证来识别和纠正 |
| 陆慎言的四字匾额"步步为营" | 逐步推理的核心原则 | 每一步都审慎、可检验,结论才可靠 |
| 沈渐以前的"直觉"变慢、被拆成了能复查的东西 | CoT 将模型隐式能力转化为显式推理 | 大模型本身有推理潜力,CoT 将其外化为可解释、可验证的步骤 |
为什么这个故事对应思维链推理?
从"跳"到"走"的范式转变:沈渐的"直觉式断案"对应标准 prompting——模型内部确实在做某种推理,但过程不可见、不可控、不可纠错。陆慎言教他的"一步步写下来"正是 CoT 的核心:将隐式推理外化为显式的自然语言步骤。两者的输入和输出一样——中间有没有那卷写着"一、二、三……"的纸,结果天差地别。
思维链的涌现门槛:沈渐需要学三个月才能让"新的方式"生效——正如 CoT 提示技术只在模型参数达到一定规模后才显著起效。小模型上 CoT 几乎没有增益,甚至可能因为推理步骤中的错误累积而变差。
显式推理的自纠错能力:"自己骗不了写在纸上的自己"——当推理被显式化后,每一步都可以被独立检查和反思。这正是 CoT 提高准确率的核心机制之一:错误的推理步骤在显式链条中比在隐式推理中更容易被发现和修正。
自洽性的交叉验证机制:三个推官各审各的、最后比对结论,精确对应 Self-Consistency 的流程。生成多条不同的推理链(通过调整采样温度),取多数投票结果。单条链可能在某一步走岔(随机错误),但多条独立链同时走岔的概率极低。
推理步骤的可累积性:"从证据到结论之间最少十步"——CoT 将一个大跨度的推理分解为多个小跨度子推理。每个子推理的难度低,多个子推理串联起来却能解决原来一步跨不过去的难题。这就像把一道悬崖拆成一段一段的石阶。
隐性知识的外化利用:沈渐的"直觉"并没有消失——它被拆成了能够被复查的逻辑步骤。这反映了大模型的实际情况:模型从预训练中已经获得了大量隐性的推理能力,CoT 的工作不是注入新能力,而是用一个提示框架把这些能力"引导"出来。
推理即计算:陆慎言审案用四个月、写两千步——但四十年零翻案。CoT 的核心 trade-off 正是用更多推理时的 token(更慢、更贵)换取更高的准确率。推理时计算(inference-time compute)成为了除了模型规模之外的第二个 scaling 维度。
后记:一个推官最大的本事不是判得快——是每一步都经得起别人看、经得起自己翻、经得起另外两个推官从不同的巷子里走出来核对。CoT 做的事不是让模型"变聪明",是让它把聪明摊开在纸上——一、二、三、四,每一步都写得清清楚楚。脑子里的闪电不是推理,写在纸上的石阶才是。三条路汇到同一个地方的那份底气,比一条路走到黑的自信可靠得多。那句话到证据之间的路,才是你的活儿。每一步都经得起看,最后的结论才经得起翻。

