速成课 · No. 33

普通模型一遍就把答案脱口而出。但对于难题,先让它一步步推演——作答前先推理——能极大改善结果。reasoning model 和 test-time compute 讲的就是在作答的那一刻多花些力气,以换取更好的答案。它对难题威力巨大,对简单题却是浪费——所以真正的本领,是知道什么时候把思考的旋钮拧大。

只讲精髓 · 每个想法一个画面 · 思考有代价

§ 01

整个思路源于一个简单的观察:一个把问题一步步推演下来的模型,比一个直接蹦出答案的模型表现更好——就像人一样。

脱口而出 vs 一步步算出来

一个学生把脑子里冒出来的第一个数字喊出来,另一个学生先在草稿纸上把题算一遍——第二个对得多得多。

默认情况下,模型一遍就给出答案,直接生成回应——基本上就是脱口而出。对简单问题这没问题。但对任何需要几步逻辑的问题,直接跳到答案恰恰是它栽跟头的地方,就像人匆忙做难题时会犯粗心的错。解决办法和老师们要求的一样:别光给答案,把步骤推演出来——能做到这一点的模型,在难题上明显更准。

chain-of-thought:把推理一步步说出来

做数学题时把过程写出来——按顺序写下每一步——这样推理一目了然,中途出的差错能被抓住,而不是被掩埋。

chain-of-thought 是这样一种技巧:让模型在给出最终答案之前一步步生成它的推理,而不是只产出答案本身。当被要求「想清楚再说」时,模型会把中间步骤一一写出来——把这些步骤明明白白地推理一遍,得出正确结论的概率,要比一步跳到答案高得多。这些步骤不只是做做样子:正是生成它们,才让模型一步步搭建出正确答案,而不是猜一个出来。把思考落在纸面上,思考本身就变好了。

步骤才是真正做功的地方

一长串计算在脑子里做容易出错;同样的计算落在纸上,一行一行来,就可靠了——纸承载了大脑会丢掉的东西。

为什么写出步骤有用?因为每一个生成出来的步骤,都成了模型可以在下一步上继续搭建的上下文——它实际上是在拿自己的输出当工作记忆,把一次艰难的跳跃拆成一连串小而可控的动作。一个大到无法一步解决的问题,作为一个序列就变得可解了。这是本课一切内容背后的核心洞见:给模型留出推理的空间,而不是逼它即刻作答,正是攻克难题的关键。

一个一步步推演的模型,胜过一个脱口而出的模型。chain-of-thought——把推理一步步说出来——把一次艰难的跳跃变成一连串可控的动作,准确度随之而来。

§ 02

原本只是一个提示词技巧,后来变成了一类模型。reasoning model 经过训练,会在作答前先思考,把这套一步步的过程默认内建进去。

被训练成先思考再作答的模型

一个张口就答的人,和一个被训练成先停下来推理的人之间的区别——思考的习惯被内建进了他们的做事方式里,而不是你得开口去要的东西。

reasoning model 是一种被专门训练成在给出最终答案之前先生成一段内部 chain-of-thought 的模型——默认就先「思考」,而不是只在被提示时才这么做。标准模型脱口而出,chain-of-thought 提示词哄着它去推理,而 reasoning model 已经把这套一步步的过程内建进了它的运作方式。它先产出一段内部推理,再给出答案,在真正需要推演的问题上明显更强。

它们用速度换深度

一个作答前花一分钟仔细想的谨慎专家,给出的答案比一个张口就回的快手更好——但你得等。

reasoning model 每个答案要花更多力气和时间,在作答前把所有这些内部步骤都生成出来。这让它比标准模型更慢、更贵,换来的是在难题上更出色。这是一笔实打实的交易,而不是免费的升级:你是在为思考的深度付费——付的是延迟和 token。所以 reasoning model 并不单纯就是「更好」;它是一件不同的工具,适用于额外思考对得起其代价的问题,而在不需要时则是杀鸡用牛刀。

它们是对付难题的工具,不是默认选项

你请深度思考的专家来处理真正棘手的情况,而不是来回答前台的日常咨询——派错活儿,就糟蹋了他们的天赋。

当任务确实需要细致、多步的思考时,reasoning model 才是对的工具——而对于简单、快速的活儿,它的字斟句酌纯属浪费。用 reasoning model 去给一条消息分类、或重新排版一段文字,就像雇个哲学家来接电话:更慢更贵,却毫无好处,因为这任务压根不需要那番思考。reasoning model 是攻克难活儿的强力工具,而不是用来在其他一切事情上替代快速的普通模型。

reasoning model 被训练成在作答前一步步思考——在难题上更强,代价是更慢更贵。它是对付难题的工具,不是凡事的默认选项。

§ 03

reasoning model 之下,藏着一个正在重塑 AI 进步方式的更深的想法:让模型变好,不只能靠多训练,还能靠让它在作答的那一刻更卖力。

在作答时多花力气

考试时多给你些时间,你会检查答案、换个思路、抓出错误——同一个人,只因被允许花更久,分数就更高。

test-time compute 指的是在作答的那一刻——在 inference,即模型运行的时候——多花算力,以换取更好的结果。模型不是匆匆来一遍,而是想得更久、生成更多推理,也许尝试多种思路再挑最好的一个。reasoning model 背后那个引人注目的发现是:让模型在作答时多做些功,能提升质量,很像给人在难题上多些时间。你可以用更多思考、而不只是更多训练,来换取更好的答案。

一个调节思考深浅的旋钮

一个调节用力程度的恒温器:难题就拧大,简单题就拧小,思考花得正好配得上任务的分量。

test-time compute 是一个旋钮,而不是一个开关:你可以花一点点思考,也可以花很多,而更多思考在难题上通常带来更好的结果——直到收益递减的那个临界点。这一点很有威力,因为它让你能按难度来调配力气:真正的难题就把思考拧大,日常的活儿就保持低档。每次请求都能拿更多算力去换更高准确度,这是一根灵活的杠杆——而知道它的存在,会改变你应对难题的方式。

training-time vs test-time

一个学生考前更用功地复习,与同一个学生考试中被多给些时间之间的区别——这是拿到更好结果的两条不同路子。

历史上,模型变好主要靠更卖力地 training——更多数据、更大模型,一次性在前期做完。test-time compute 是另一条轴:靠在 inference 时更卖力来改善答案,每次模型运行时都如此。它之所以重要,是因为这是获得更多能力的第二条路——不只是更聪明的模型,而是同一个模型想得更久。明白质量既可来自 training-time 的功夫、可来自 test-time 的功夫,能帮你想清楚一个模型的表现——以及它的成本——究竟从何而来。

test-time compute 指的是在模型作答时、而不只在 training 中多花力气——而更多思考能在难题上换来更好的答案。它是一个旋钮,难就拧大,日常就拧小。

§ 04

恰恰是在问题难的地方,推理才有威力;恰恰是在问题简单的地方,推理才毫无意义。分清哪个是哪个,就是用好它的大半。

又难又多步的问题受益最大

一条拐弯众多的复杂路线,值得仔细规划;一条直通隔壁那家的笔直道路,则不必——路越难走,思考越划算。

推理在那些真正需要好几步逻辑才能做对的问题上最有用:数学和计算、多步规划、复杂代码、逻辑谜题、一步走错就毁掉答案的细致分析。这些恰恰是脱口而出会失败、而一步步推演会成功的任务。问题越难、步骤越多,额外的思考就越能改善结果——这也是为什么 reasoning model 在满是真正难题的基准测试上大放异彩。

简单任务一无所获

对着「午饭吃什么」反复斟酌,可你本来两个选项都乐意——所有这番思考产出的还是同一个答案,只是更慢了。

对于简单、直接的任务——给这个分类、把那个抽取出来、重排这段文字、回答一个基本的事实问题——推理除了拖慢和增加成本,什么也没添。这里没有多步逻辑可推演,所以思考是多余的动作;答案一遍就明摆着了。更糟的是,逼一个模型去「思考」一个琐碎任务,偶尔反而会让它更差,把一件本不需要斟酌的事搞复杂了。让思考配上问题:简单任务要的是快答,不是深思熟虑的答。

让思考的深度配上难度

一个好手在难抉择上花很久,对简单问题则即刻作答——按每件事实际需要的来校准力气。

主导原则是:让模型思考的深浅,随问题的难易而伸缩。真正困难、利害重大、多步的活儿,配得上一个 reasoning model 或更多 test-time compute;简单、日常、范围清楚的活儿,用一个快速标准模型就好。这呼应了模型经济学里的路由思路:大多数请求很简单、要的是速度,少数难、要的是思考。把什么都丢给 reasoning model,就和把什么都丢给前沿模型一样浪费——要校准,别一上来就默认。

推理在又难又多步的问题上最有用,在简单题上则毫无用处。让思考的深度随难度伸缩——难的那一小块用 reasoning model,简单的大多数用快速模型。

§ 05

思考不是免费的。更多推理意味着更多时间和更多 token,无视这份代价,团队最后就会花一大笔钱去慢吞吞地回答简单问题。

更多思考意味着更多 token 和金钱

一个在有人斟酌时一直转的计价表——想得越久,账单越大,无论那番额外的思考是否必要。

所有这些推理步骤都是生成出来的 token,而你要为它们付费。一个 reasoning model 或一个高 test-time-compute 的设置,会在答案之前产出大量内部思考,而其中每一个 token 都要花钱——所以推理每个答案的成本,比单次直接来一遍要明显更高。让它在难题上更出色的那份深度,恰恰也是让它更贵的原因。这正是为什么「凡事都用 reasoning model」会毁掉一份 AI 预算:你为每一次请求的思考付费,包括那些压根不需要思考的请求。

它更慢,而这对用户很要紧

那位花一分钟才作答的谨慎专家,对一个难题来说值得等,但如果你只是问了下时间,就让人抓狂。

生成所有这些推理步骤要花时间,所以 reasoning model 和重度的 test-time compute 产出一个答案要更慢——有时慢得多。对一个后台任务来说这没问题;但对一个在屏幕前等待的用户来说,长时间的延迟是对体验实实在在的代价。所以思考的延迟也是这笔交易的一部分:对一个用户本就预期要花点时间的难题来说,多出的那几秒是值得的;而对一个本该感觉即时的交互来说,它格格不入。速度是一种功能,当你把思考拧大时,就是在花掉它。

别为任务不需要的思考买单

雇那个又慢又贵的深度思考者,整天回答简单问题——你付着高价,等着更久,换来的答案一个手脚麻利的文员瞬间就能给。

要避免的浪费,是把推理的成本和延迟花在不会从中受益的任务上。把每一次请求——不分难易——都经由一个 reasoning model,就意味着对整条数据流都交思考税,而其中只有一小块需要它。这里适用和模型经济学一样的纪律:默认走更便宜、更快、不推理的那条路,只对真正难、对得起其代价的情况才升级到推理。在思考能回报你的地方付费,多一个 token 都不付。

思考耗 token、耗时间——推理每个答案更贵也更慢。只在难题对得起它的地方付费;把一切都经由 reasoning model,是为只有一小块需要的好处,对整条数据流交税。

§ 06

一长串看起来缜密的推理链,很容易让人信以为真。但更多步骤并不保证答案正确——一个 reasoning model 可以自信满满、洋洋洒洒地错下去。

一条长链照样能抵达错误答案

一段详尽、自信的论证,却建立在一个站不住脚的前提上——每一步都顺理成章,结论照样是错的。光鲜不等于证明。

推理提升的是难题上得出正确答案的概率;它并不保证正确。一个模型可以产出一长串流畅、貌似合理的 chain-of-thought,却导向错误的结论——链条早处的一个错误被自信地一路带到底,或者推理听起来严谨、实则不然。看得见的步骤让答案感觉更可信,而这恰恰是陷阱:更多推理看起来更权威,却未必更正确。

推理未必是真正的原因

一个凭直觉拿主意、事后再编出一套听着合乎逻辑的理由的人——那套解释听着像真的,却并不是他实际得出结论的过程。

还有一个更隐蔽的陷阱:模型展示出来的 chain-of-thought,未必就是产生其答案的真实过程。它可以生成一段看起来通向结论的推理,而真正的依据其实另有其物——这是一套听着合理的事后开脱,而非忠实的交代。所以你不能把展示出来的推理完全当作答案为何如此的解释来信。它是一个有用的信号、一个提升准确度的助力,而不是一扇保证窥见模型真实逻辑的窗口。

去核验答案,别轻信思考过程

你核对一个复杂计算,靠的是独立确认结果,而不是欣赏过程写得多么工整——答案对不对,才是关键。

实用的结论是:评判一个 reasoning model 的输出,要看答案是否正确、是否对照现实核验过,而不是看推理显得多有气势。别处那些纪律依然全部适用——用真实事实给它扎根、对照来源核对、跑 evals、在利害重大的判断上留一个人。推理让难题的答案更可能正确;它并不让这些答案在未经核验时就可放心相信。一条自信的 chain-of-thought,在你核验它落到哪儿之前,依然只是一个自信的猜测。

更多推理提升的是概率,不是保证——一条长链照样能抵达错误答案,而展示出来的步骤未必是真正的原因。去核验答案;别轻信思考过程。

§ 07

推理是一种威力强大、代价分明的能力,所以用好它,靠的是这套如今已熟悉的纪律:把思考花在能回报的地方,并核验它产出的东西。

只在难的那部分把思考拧大

你对那一个棘手的步骤全神贯注,其余则一带而过——把力气聚焦在难处真正所在的地方,而不是平均地铺开。

统一的做法,是在你的系统里让思考随难度匹配:对真正困难、多步、利害重大的任务,动用 reasoning model 或更多 test-time compute,对简单的大多数则用快速标准模型。你甚至可以把它们混搭——快速模型处理日常路径,把难的子问题交给 reasoning model。只在问题难的地方花斟酌、且仅在那里花,能让你拿到准确度的提升,却不必对一切都交思考税。

推理提高准确度;它并不替代核验

一个谨慎的专家更可能正确,但你对利害重大的决定仍会去确认——他们的谨慎改善了概率,并未免去核对的必要。

最后这条纪律,把本课与其余各课系到了一起:推理在难题上改善质量,但它依然是一个会自信出错的、不完美的模型,所以其他一切仍然要紧。给它扎根、核验答案、跑 evals、在事关重大的判断上留人。推理是获得更好输出的又一条路——与好的上下文、检索、对的模型并肩——而不是一个免去你在它周围工程化可靠性的神奇升级。更好的思考是一味更强的食材,不是一道做好的菜。

动用推理之前
  • 问题是不是真的难——多步逻辑、数学、规划——难到要靠思考才理得顺? - 还是它很简单——简单到推理只会徒增拖延和成本、毫无收益? - 在这里,成本和延迟值不值得,还是你在用思考给简单任务加税? - 你在做路由吗——难的那一小块用推理,简单的大多数用快速模型? - 你在核验答案吗,而不是轻信一条看起来周密的 chain-of-thought? - 那些惯常的纪律是否依然适用——扎根、evals、在利害重大的判断上留一个人?
你如今掌握的词
  • chain-of-thought——让模型在最终答案之前一步步推理。 - reasoning model——一个默认就先思考的模型,在难题上更强。 - test-time compute / inference——在模型作答时多花力气,以换取更好的结果。 - 思考的旋钮——调节模型斟酌的多少,从一点点到很多。 - training-time vs test-time——靠多训练来改善,对比靠在作答时更卖力。 - 思考的代价——更多推理意味着更多 token、金钱和延迟。 - 推理不等于真相——一条长链照样可能自信地错;去核验答案。
你用好推理的迹象
  • 只对真正难的问题把思考拧大,而非默认就拧。 - 你对简单的大多数用快速模型,把推理留给难的那一小块。 - 你把推理的成本和延迟算进去,而不是对每一次请求加税。 - 你核验答案,而不是轻信推理显得多么周密。 - 你依然施行扎根、evals 和人工把关——推理是锦上添花,并不替代它们。

推理让模型在作答前先思考,以时间和 token 为代价,提高难题上的准确度。只在难度对得起它的地方把思考拧大,并核验答案——再好的思考,在核验之前,依然是一个会出错的猜测。

速成课结束 · 7 章 · 思考有代价

接下来是练习:拿一个你的模型一遍就答错的真正难题,让它去推理——提示它一步步思考,或用一个 reasoning model——看着准确度提升。然后在一个简单任务上试同样的做法,留意那番思考除了拖延一无所买。最后,找一个推理看起来滴水不漏、答案却是错的例子,去体会为什么你核验的是结论,而不是推理链。当你让思考的深度配上问题的难度时,这套纪律就豁然贯通了。但有一个想法要置于其余之上:让模型在作答前先思考,会让它更擅长难题,却在简单题上白费力气——所以在它能回报的地方把思考拧大,在它不能回报的地方拧小,并且永远去核对它落到了哪儿。