演算堂的推演生
一、张口就算,可十题错六题
金陵府学下设有一间演算堂,专给各县选拔上来的算学神童开小灶。每年两百多个神童里,能进演算堂的不超过十五个。
掌教姓秦,人称秦推之。他在演算堂教了二十年,教出来两个状元,六个会元。全江南的府学都知道——"算学出金陵,金陵出秦门。"
但最近三年,秦推之觉得不对劲。
新一届十五个学童,天赋是一个比一个吓人。心算两位数乘法——一息出答案。心算三位数乘三位数——一顿饭的工夫。上一届最厉害的也不过如此。可等秦推之把题从"单纯算数"换成"应用题"之后——这帮神童塌了一大半。
比如这道:
张家有田四十二亩,李家有田三十六亩。张家的亩产比李家高两斗。两家一年共收粮四千一百二十八斗。问张家亩产多少斗?
按说这帮心算天才,拿下这题最多一盏茶的工夫。结果交上来的十四份卷子——只对了三份。
不是他们不会算两位数的乘除。是题里的数字多了、关系绕了、得"先求什么、再求什么、最后套什么"——这帮神童的大脑到第二步就懵了。
秦推之把错卷摆开看了一遍。十一个错的人,错得五花八门:有的一步没推对就开始心算,算到后面全盘乱掉;有的挑了个中间数字就开始胡乱换算,根本不知道自己在求什么;最离谱的一个——直接把四十二和三十六加起来除以二,得了个三十九斗交了上去。
"这帮孩子,"秦推之对助教老郑说,"心算快得像鬼,推演乱得像麻。一步跳不明白,后面全飞。"
老郑放下茶碗:"那你打算怎么办?让他们心算慢一点?"
"不是慢的问题。是他们从来没想过——'中间推的过程,写出来'。"
二、把每一步念出声来
秦推之做了一件让所有神童都觉得丢脸的事。
他规定——从今往后,演算堂所有的题,不许心算。不许直接写答案。必须把中间每一步写出来。
"每一步,"秦推之敲着学堂里的石板,"一加一等于二——这一步,你脑子里怎么走到这一步的,全给我写下来。"
神童们炸了。
"秦师父,我一个两位数乘四位数,一息就能出来——你让我把中间过程写下来,我写出来反而比心算慢两倍!"
"我知道。"秦推之面不改色,"我就是让你慢下来。你心算快,但你的快是蒙的快——你在脑子里蹦了五步,只有三步是对的,剩下两步不在你的路线上。不写出来,你永远不知道自己哪一步开始错的。"
"来——你当你自己在给自己讲题。每一步,念出声来,写在纸上。"
他把石板上那道张家李家的应用题重新出了。这次不要求答案。要求推演过程。
半数神童交了白卷——不是不会算,是不知道中间"过程"长什么样。
秦推之一点都不意外。他从怀里掏出一张家传的算学手稿——传到他这儿已经是第十七代——上面用工笔小楷示范了一道题的三十七步推演。从读题→设未知数→列方程→消元→代入→验证,每一步下面都有注:"此步何意?——求的是张李两家的总亩数"、"此步何意?——把已知条件转化成方程"、"此步何意?——验证结果是否合理"。
"看到没有?三十七步。每一步写一句,每一句解释自己在这一步干了什么。"
"从今天起——每做一题,都按这个规矩来。"
三、推得越碎,越不容易出错
头一个月是地狱。神童们叫苦连天——一道以前半盏茶工夫的题,现在光写过程就得写一刻钟。而且一开始写出来的过程,错得比心算还多。
"你这一步——四十二乘以亩产——应该等于什么?你上一行写的是'张家总产',这一行你怎么就跳到减去三十六了?从张家总产到减去三十六中间,你该写的句子呢?"
秦推之在第一个神童交上来的推演稿里用红笔圈出了十一处"跳步"。
"跳步就是盲猜。你以为你知道了,其实你在跳过去的那一步里漏了一个条件。"
但到了第三个月,奇异的事情发生了。
神童们推演写得越来越长——一道题写一两百字是正常量。但错得越来越少。以前十题错六题的那批人,现在十题最多错一两题。而且不但答案对——连他们自己也说不清为什么,做着做着就觉得"这道题的思路很清楚"。
那个最先炸锅说"写出来比心算慢两倍"的小神童,三个月后在推演稿的末尾写了一句话:"我以前在脑子里只走了五步,现在发现这道题应该有十七步。多出来的那十二步,我以前全跳了——它们就是那六道错题。"
郑助教在窗边看着这帮孩子埋头写推演,转头跟秦推之说:"这招真灵。但我怎么觉得——让他们写过程这件事,本质上不是在教他们'算',是在教他们'想'?"
"对。推演不是写的给别人看的——是写的给自己看的。你把你脑子里的每一步逼出来、落在纸上——你才发现,原来你以为'一步到位'的东西,其实是五步。这五步里至少有两步经不起推敲。推演稿是一面镜子——把你脑子里的混沌照清楚了。"
秦推之顿了顿,补了句:"而且慢就是快。多花一刻钟写推演——省下的是返工六道错题的时间。"
四、最难的题——推不出来也得推
那年夏天,演算堂来了一个意外来客。户部的一位郎中,带着一个攒了三年解不开的漕运配粮难题。
江南漕运到京师的粮食,每年有上万条船、二十八个中转仓。各府的粮价不同、运距不同、损耗不同。要把总额分成各府各仓的配额,让总运输成本最低——这题在户部算了三年,换了五拨人,没有一个版本让人完全满意。
郎中把资料撂在桌上:"秦教习,这是真活,不是考题。答案是什么——我也不知道。"
秦推之把题递给班上年纪最小的那个神童——就是三个月前十题错六题的那位。
"你来。按规矩推。"
小神童不敢接。"秦师父,户部算了三年的题,我怎么可能会——"
"我没让你会。我让你推。会与不会,跟推不推是两回事。会的题你推得出来——那是推演帮你理清思路。不会的题你也推——那是推演帮你发现你到底卡在哪一步。"
小神童硬着头皮开始写。他先把所有已知条件一条条列出来——二十八个仓的名字、各府粮价、运距、损耗率、总运量。然后在纸上写下第一句话:
"第一步——这道题求的到底是什么?求的是二十八个仓各自该配多少粮。"
他往后一句一句推。推到第七步,他发现一个矛盾——两个条件互相冲突。他在推演稿里直接写出来了:"此步遇阻。漕运总运量今年涨了一成——但运河上游两座粮仓的库容没涨。是把多余的匀给下游,还是多加一道中转?"
他把矛盾推到面上。往下他又推了将近二十步,分两条路走——一条匀下游,一条加中转。两条路的利弊,他逐条写在纸上。推到最后写了一句:"若取匀下游——则运输成本总体最低,但下游三仓需增库容。若取加中转——则成本略增一成,但可以不改库容。两途皆可行,候部议。"
那篇推演稿,整整二十七页。
郎中捧着那二十七页纸,在演算堂的长凳上坐了整整一个时辰——一页一页看完。他不是在查答案——他自己都不知道答案。他是在看——"这个孩子是怎么把我三年解不开的问题拆成二十七页小问题的"。
秦推之站在旁边不说话。郎中看完了,最后说了句:"推演稿本身,就是答案。"
小神童是推出来了什么新算法吗?没有。他只不过把一道"不可解的问题"变成了"二十七个可解的小问题"。二十七个可解了——剩下的就看部议。
那天放课后,郑助教问秦推之。
"所以推演这件事,到底给这孩子带来了什么?他也没真的'解'出来。"
"他学会了最重要的东西——不会的题,不是放弃。是把它拆开。你不会解'漕运总成本最小化'——但你每一步都知道自己在这一步里要做什么:读条件、列关系、找冲突、分路径。每一步都是你自己能走稳的一步。走到走不动的地方,你停下来,写下——'这一步,我还没想通'。"
秦推之把笔放回砚台上。
"推演把一件你本来做不到的事——拆成了你不会做的一步。你永远能找到那一步在哪里。找到它,就是你对这个问题最精确的理解。"
技术解读
思维链提示(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)?
"把每一步写出来"是 CoT 唯一的操作要求。 Wei 等人发现,在 prompt 中加一句话——在回答问题前先"把思考过程写出来"——就能大幅提升推理准确率。这不是教了模型什么新知识,而是改变了它利用已有知识的方式。推演堂的神童们没有学新的算法——他们只是把脑子里的过程显式化了。
中间步骤是最关键的"锚"。 大模型的每个 token 都依赖上文——生成最终答案时,上文包含了所有中间推理步骤。这些步骤像路标一样,每一步都限制了下一步的可能方向,使模型不容易"跳"到错的终点。秦推之说"跳步就是盲猜"——CoT 的内在机制正是用中间 token 锚定推理方向。
"不会的题你也推——它帮你发现到底卡在哪一步"揭示了一个深层洞察。 CoT 不只是提高准确率的工具——它把"不可解的问题"变成了"可诊断的问题"。当模型写出了推理过程,你可以看到它在哪一步出错了、哪一步的逻辑有问题——而不是面对一个错误答案无从下手。
零样本 CoT 的惊人简洁——"我们一步步推"。 Kojima 等人发现,只需在 prompt 末尾加上"Let's think step by step",无需任何示例,模型的推理能力就显著提升。因为"逐步思考"这个词本身就启动了一个更谨慎、更结构化的生成模式。
复杂推理任务的"步骤长度"与 CoT 优势正相关。 对于需要 3 步以上逻辑推导的问题,CoT 的优势随步骤数增加而扩大——就像故事中神童们发现"十七步的题在心算里只走五步"。步骤越多,跳步的累积误差越大,CoT 的收益越明显。
"推演把做不到的事拆成找不到的一步" ——这在技术上对应"树搜索"类方法。ToT 等拓展方法在 CoT 基础上引入分支搜索——当一条推理路径受阻时,回溯探索其他分支。就像小神童把漕运题分成两条路各自推演,最后让决策者比较。
后记:神童们被教了很多年"你需要聪明才能算得快",秦推之教了他们一套反直觉的东西——"你需要把每一步写出来,才能算得对"。这不仅是演算堂的道理,也是 LLM 在推理任务上最重要的教训:答案永远没有过程重要。因为答案是猜测——过程才是理解。那个在石板上写下三十七步推演的孩子,和 GPT 学着在回答前先写推理的模型,在做着同一件事——一步一步推,推到你确信为止。世界上的难题多半不是被"解"开的,是被一步一步推到再也推不动时才发现——前面已经全是路了。

