一、张口就算,可十题错六题

金陵府学下设有一间演算堂,专给各县选拔上来的算学神童开小灶。每年两百多个神童里,能进演算堂的不超过十五个。

掌教姓秦,人称秦推之。他在演算堂教了二十年,教出来两个状元,六个会元。全江南的府学都知道——"算学出金陵,金陵出秦门。"

但最近三年,秦推之觉得不对劲。

新一届十五个学童,天赋是一个比一个吓人。心算两位数乘法——一息出答案。心算三位数乘三位数——一顿饭的工夫。上一届最厉害的也不过如此。可等秦推之把题从"单纯算数"换成"应用题"之后——这帮神童塌了一大半。

比如这道:

张家有田四十二亩,李家有田三十六亩。张家的亩产比李家高两斗。两家一年共收粮四千一百二十八斗。问张家亩产多少斗?

按说这帮心算天才,拿下这题最多一盏茶的工夫。结果交上来的十四份卷子——只对了三份。

不是他们不会算两位数的乘除。是题里的数字多了、关系绕了、得"先求什么、再求什么、最后套什么"——这帮神童的大脑到第二步就懵了。

秦推之把错卷摆开看了一遍。十一个错的人,错得五花八门:有的一步没推对就开始心算,算到后面全盘乱掉;有的挑了个中间数字就开始胡乱换算,根本不知道自己在求什么;最离谱的一个——直接把四十二和三十六加起来除以二,得了个三十九斗交了上去。

"这帮孩子,"秦推之对助教老郑说,"心算快得像鬼,推演乱得像麻。一步跳不明白,后面全飞。"

老郑放下茶碗:"那你打算怎么办?让他们心算慢一点?"

"不是慢的问题。是他们从来没想过——'中间推的过程,写出来'。"

二、把每一步念出声来

秦推之做了一件让所有神童都觉得丢脸的事。

他规定——从今往后,演算堂所有的题,不许心算。不许直接写答案。必须把中间每一步写出来。

"每一步,"秦推之敲着学堂里的石板,"一加一等于二——这一步,你脑子里怎么走到这一步的,全给我写下来。"

神童们炸了。

"秦师父,我一个两位数乘四位数,一息就能出来——你让我把中间过程写下来,我写出来反而比心算慢两倍!"

"我知道。"秦推之面不改色,"我就是让你慢下来。你心算快,但你的快是蒙的快——你在脑子里蹦了五步,只有三步是对的,剩下两步不在你的路线上。不写出来,你永远不知道自己哪一步开始错的。"

"来——你当你自己在给自己讲题。每一步,念出声来,写在纸上。"

他把石板上那道张家李家的应用题重新出了。这次不要求答案。要求推演过程。

半数神童交了白卷——不是不会算,是不知道中间"过程"长什么样。

秦推之一点都不意外。他从怀里掏出一张家传的算学手稿——传到他这儿已经是第十七代——上面用工笔小楷示范了一道题的三十七步推演。从读题→设未知数→列方程→消元→代入→验证,每一步下面都有注:"此步何意?——求的是张李两家的总亩数"、"此步何意?——把已知条件转化成方程"、"此步何意?——验证结果是否合理"。

"看到没有?三十七步。每一步写一句,每一句解释自己在这一步干了什么。"

"从今天起——每做一题,都按这个规矩来。"

三、推得越碎,越不容易出错

头一个月是地狱。神童们叫苦连天——一道以前半盏茶工夫的题,现在光写过程就得写一刻钟。而且一开始写出来的过程,错得比心算还多。

"你这一步——四十二乘以亩产——应该等于什么?你上一行写的是'张家总产',这一行你怎么就跳到减去三十六了?从张家总产到减去三十六中间,你该写的句子呢?"

秦推之在第一个神童交上来的推演稿里用红笔圈出了十一处"跳步"。

"跳步就是盲猜。你以为你知道了,其实你在跳过去的那一步里漏了一个条件。"

但到了第三个月,奇异的事情发生了。

神童们推演写得越来越长——一道题写一两百字是正常量。但错得越来越少。以前十题错六题的那批人,现在十题最多错一两题。而且不但答案对——连他们自己也说不清为什么,做着做着就觉得"这道题的思路很清楚"。

那个最先炸锅说"写出来比心算慢两倍"的小神童,三个月后在推演稿的末尾写了一句话:"我以前在脑子里只走了五步,现在发现这道题应该有十七步。多出来的那十二步,我以前全跳了——它们就是那六道错题。"

郑助教在窗边看着这帮孩子埋头写推演,转头跟秦推之说:"这招真灵。但我怎么觉得——让他们写过程这件事,本质上不是在教他们'算',是在教他们'想'?"

"对。推演不是写的给别人看的——是写的给自己看的。你把你脑子里的每一步逼出来、落在纸上——你才发现,原来你以为'一步到位'的东西,其实是五步。这五步里至少有两步经不起推敲。推演稿是一面镜子——把你脑子里的混沌照清楚了。"

秦推之顿了顿,补了句:"而且慢就是快。多花一刻钟写推演——省下的是返工六道错题的时间。"

四、最难的题——推不出来也得推

那年夏天,演算堂来了一个意外来客。户部的一位郎中,带着一个攒了三年解不开的漕运配粮难题。

江南漕运到京师的粮食,每年有上万条船、二十八个中转仓。各府的粮价不同、运距不同、损耗不同。要把总额分成各府各仓的配额,让总运输成本最低——这题在户部算了三年,换了五拨人,没有一个版本让人完全满意。

郎中把资料撂在桌上:"秦教习,这是真活,不是考题。答案是什么——我也不知道。"

秦推之把题递给班上年纪最小的那个神童——就是三个月前十题错六题的那位。

"你来。按规矩推。"

小神童不敢接。"秦师父,户部算了三年的题,我怎么可能会——"

"我没让你会。我让你推。会与不会,跟推不推是两回事。会的题你推得出来——那是推演帮你理清思路。不会的题你也推——那是推演帮你发现你到底卡在哪一步。"

小神童硬着头皮开始写。他先把所有已知条件一条条列出来——二十八个仓的名字、各府粮价、运距、损耗率、总运量。然后在纸上写下第一句话:

"第一步——这道题求的到底是什么?求的是二十八个仓各自该配多少粮。"

他往后一句一句推。推到第七步,他发现一个矛盾——两个条件互相冲突。他在推演稿里直接写出来了:"此步遇阻。漕运总运量今年涨了一成——但运河上游两座粮仓的库容没涨。是把多余的匀给下游,还是多加一道中转?"

他把矛盾推到面上。往下他又推了将近二十步,分两条路走——一条匀下游,一条加中转。两条路的利弊,他逐条写在纸上。推到最后写了一句:"若取匀下游——则运输成本总体最低,但下游三仓需增库容。若取加中转——则成本略增一成,但可以不改库容。两途皆可行,候部议。"

那篇推演稿,整整二十七页。

郎中捧着那二十七页纸,在演算堂的长凳上坐了整整一个时辰——一页一页看完。他不是在查答案——他自己都不知道答案。他是在看——"这个孩子是怎么把我三年解不开的问题拆成二十七页小问题的"。

秦推之站在旁边不说话。郎中看完了,最后说了句:"推演稿本身,就是答案。"

小神童是推出来了什么新算法吗?没有。他只不过把一道"不可解的问题"变成了"二十七个可解的小问题"。二十七个可解了——剩下的就看部议。

那天放课后,郑助教问秦推之。

"所以推演这件事,到底给这孩子带来了什么?他也没真的'解'出来。"

"他学会了最重要的东西——不会的题,不是放弃。是把它拆开。你不会解'漕运总成本最小化'——但你每一步都知道自己在这一步里要做什么:读条件、列关系、找冲突、分路径。每一步都是你自己能走稳的一步。走到走不动的地方,你停下来,写下——'这一步,我还没想通'。"

秦推之把笔放回砚台上。

"推演把一件你本来做不到的事——拆成了你不会做的一步。你永远能找到那一步在哪里。找到它,就是你对这个问题最精确的理解。"

技术解读

思维链提示(Chain-of-Thought Prompting, CoT)是大语言模型推理能力的一次质变。2022 年,Wei 等人在 Google Research 发表《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》,发现只需在少样本示例中展示中间推理步骤,大模型就能自然地完成多步推理——准确率在数学文字题(GSM8K)、常识推理(StrategyQA)等基准上获得大幅跃升。

CoT 的核心理念只有一句话:让模型把思维过程写到纸上,而不是直接跳到答案。 传统的提示是"Q → A"。CoT 的提示是"Q → 步骤1 → 步骤2 → ... → A"。这看似微小的格式变化,在复杂推理任务上效果惊人——因为大模型生成每个 token 时都依赖上文,中间推理步骤为最终答案提供了丰富的"思考锚点"。

核心概念回顾

概念 通俗解释
思维链(Chain-of-Thought) 在 prompt 示例中展示完整的中间推理步骤,引导模型一步步思考而非直接猜答案
标准提示(Standard Prompting) 传统方式——给问题直接要求答案,没有中间推理步骤。复杂推理准确率低
少样本 CoT 在 few-shot 示例中加入推理步骤——"Q→步骤1→…→A",模型会模仿这种逐步推理格式
零样本 CoT 不需要示例——在 prompt 末尾加一句"Let's think step by step"(让我们一步步思考),模型就会自己开始写推理
自一致性(Self-Consistency) 采样多条 CoT 推理路径,取多数投票的结果——比单条推理稳定得多
思维树(Tree-of-Thoughts) CoT 的扩展:不沿一条线推到底,而是分支探索多条推理路径、回溯剪枝——如 BFS/DFS
中间推理状态 生成的中间步骤文本——既是给最终答案提供上下文锚点,也是模型"外化"其内部计算过程的载体
分步验证 CoT 的自我检查机制——"让我们一步步验证",模型逐句检查自己的推理
符号/数学推理 vs 自然语言推理 CoT 用的是自然语言描述推理过程,而非形式化的符号逻辑推导——这使得它更灵活但可验证性较差
推理深度 问题需要的逻辑步骤数。CoT 让模型能处理远超单步推理之外的深层推理链——步骤数越多,CoT 相比直接回答的优势越明显

故事中的隐喻对照

故事元素 映射的技术概念 解释
演算堂的神童(心算快但错得多) 标准提示下的 LLM 直接给问题要求答案——模型试图"一步到位",缺乏中间推理步骤作为支撑
"不许心算——把每一步写出来" CoT 的核心理念 强制模型输出推理过程,而非直接跳到答案——中间步骤为最终推理提供了上下文和逻辑约束
"每一步念出声、写在纸上" 自回归生成中每次只生成一个 token 每一步推演都是对前一步的承接——正如模型每次只输出一个 token,每个新 token 都依赖于之前所有 token
三十七步示范稿 少样本 CoT 示例 Few-shot 示例中展示了完整的推理步骤——模型通过模仿这些示例的格式,学会分解复杂问题
"推演稿是一面镜子" 中间推理状态的外化 推理过程被"写到纸面上"成为上下文的一部分——为后续 token 提供可依赖的逻辑锚点
"你以为一步到位的东西,其实是五步" 推理深度与步骤分解 CoT 暴露了"直觉答案"背后隐藏的多个逻辑步骤——每一步都需要显式生成
三个月前错六题 → 现在最多错一题 CoT 带来的准确率跃升 GSM8K 等基准上,CoT 相比标准提示提升可达 20-40 个百分点
"不看答案管不管用——看推演在哪一步卡住了" 推理过程的透明性与可诊断性 CoT 让模型的推理可追溯——不像黑箱直接输出答案,可以定位出错的具体步骤
漕运难题:拆成二十七个可解步骤 思维树(Tree-of-Thoughts)/ 问题分解 多分支推理——并行探索多条路径,各自推演,最后比较优劣
两条路都写出来——最后由部议决断 自一致性(Self-Consistency) 多条推理路径取共识——决策交给更综合的比较而非单条推理的武断
"推演稿本身,就是答案" 推理即回答 在某些开放问题上,推理过程比最终结论更有价值——因为结论往往是简化的,过程才是完整的

为什么这个故事对应思维链(CoT)?

  1. "把每一步写出来"是 CoT 唯一的操作要求。 Wei 等人发现,在 prompt 中加一句话——在回答问题前先"把思考过程写出来"——就能大幅提升推理准确率。这不是教了模型什么新知识,而是改变了它利用已有知识的方式。推演堂的神童们没有学新的算法——他们只是把脑子里的过程显式化了。

  2. 中间步骤是最关键的"锚"。 大模型的每个 token 都依赖上文——生成最终答案时,上文包含了所有中间推理步骤。这些步骤像路标一样,每一步都限制了下一步的可能方向,使模型不容易"跳"到错的终点。秦推之说"跳步就是盲猜"——CoT 的内在机制正是用中间 token 锚定推理方向。

  3. "不会的题你也推——它帮你发现到底卡在哪一步"揭示了一个深层洞察。 CoT 不只是提高准确率的工具——它把"不可解的问题"变成了"可诊断的问题"。当模型写出了推理过程,你可以看到它在哪一步出错了、哪一步的逻辑有问题——而不是面对一个错误答案无从下手。

  4. 零样本 CoT 的惊人简洁——"我们一步步推"。 Kojima 等人发现,只需在 prompt 末尾加上"Let's think step by step",无需任何示例,模型的推理能力就显著提升。因为"逐步思考"这个词本身就启动了一个更谨慎、更结构化的生成模式。

  5. 复杂推理任务的"步骤长度"与 CoT 优势正相关。 对于需要 3 步以上逻辑推导的问题,CoT 的优势随步骤数增加而扩大——就像故事中神童们发现"十七步的题在心算里只走五步"。步骤越多,跳步的累积误差越大,CoT 的收益越明显。

  6. "推演把做不到的事拆成找不到的一步" ——这在技术上对应"树搜索"类方法。ToT 等拓展方法在 CoT 基础上引入分支搜索——当一条推理路径受阻时,回溯探索其他分支。就像小神童把漕运题分成两条路各自推演,最后让决策者比较。

后记:神童们被教了很多年"你需要聪明才能算得快",秦推之教了他们一套反直觉的东西——"你需要把每一步写出来,才能算得对"。这不仅是演算堂的道理,也是 LLM 在推理任务上最重要的教训:答案永远没有过程重要。因为答案是猜测——过程才是理解。那个在石板上写下三十七步推演的孩子,和 GPT 学着在回答前先写推理的模型,在做着同一件事——一步一步推,推到你确信为止。世界上的难题多半不是被"解"开的,是被一步一步推到再也推不动时才发现——前面已经全是路了。