有一种解释大模型的方式很有意思。
它把语言模型想象成一片高低起伏的地形:概率高的 token 在谷底,概率低的 token 在山坡上;每生成一个 token,就像有一颗小球顺着地势滚下去。前面的 token 还会在地面留下痕迹,影响下一颗小球的路线。
这个比喻出自《AI 时代的思维框架》,确实很抓人。原作者也提前说明了,这是一套从工程经验里长出来的个人框架,不打算冒充严格的学术理论。
不过,如果真想用它理解大模型,最好再换一幅图。
我更愿意把大模型想成一座大得离谱的城市。
模型是城市本身,提示词是导航目的地,上下文是已经走过的路,而每一个 token,都是司机在下一个路口做出的一次选择。
这位司机有几个特点。
他见过的路很多,反应极快,几乎每个路口都知道“大家通常往哪边走”。但他没有一张提前规划好的完整路线,也不会在出发前把整篇答案写完。他只是开到一个路口,看一眼眼前的路牌和之前走过的路,然后决定下一步往哪儿拐。
大语言模型的生成,大致就是这么回事。
它并不是先想好答案,再一个字一个字打印出来
假设你问模型:
为什么长期熬夜会影响注意力?
它不会先在内部写好一篇完整文章,然后从头开始誊写。
它真正做的是:
已经看到这个问题了,接下来最可能出现什么?
于是它先生成“长期”,接着又问:
现在前面已经有“长期”了,下一个词最可能是什么?
也许是“熬夜”,也许是“睡眠不足”,也许是“会”。
如此一步一步,直到整段回答结束。
用公式写,就是:
这里不需要被公式吓到。它只是在说:
一整篇回答的概率,等于沿途每一步选择概率的乘积。
所以,大模型更像是边走边选路,而不是先看见终点,再照着路线行驶。
这也解释了一个经常让人困惑的现象:模型开头看起来很聪明,写着写着却跑偏了。
因为它每一次选择都只是在回答“眼前往哪边走比较自然”,而不是保证“这样走最终一定能到正确目的地”。
最顺的路,不一定是对的路
想象你开车去一个陌生地方。
眼前有两条路:
一条是六车道大路,看起来非常顺;另一条是窄一些的小路,入口还不太显眼。
如果只看眼前,你大概率会选大路。但大路可能通往另一个城区,真正通向目的地的反而是那条不起眼的小路。
模型也会遇到同样的问题。
它在当前时刻选择概率最高的 token,并不意味着这条路线最后会得到最好的答案。
比如一道数学题,模型可能很快认出它“长得像”某类经典题,于是顺手套上一个熟悉结论。这个开头在语言上十分自然,甚至显得很专业。
可惜题目里可能藏着一个小条件,使得熟悉套路根本不适用。
模型一旦在第一个路口走错,后面就会以错误方向为起点继续开。它会补公式、补解释、补例子,甚至替错误结论找出一整套听起来像那么回事的理由。
于是你会看到一种很典型的回答:
每一句都挺顺,连起来却是错的。
问题不一定出在模型“不懂某个知识点”,而可能只是它太早拐进了错误街区。
上文不会把地面压出沟,它只是把车开到了另一个地方
“小球压出沟壑”的说法很形象,但容易让人误会,好像每生成一个 token,模型内部的参数就被永久改变了一点。
普通推理并不是这样。
模型说完一句话以后,模型本身没有被重新训练,权重也没有发生变化。真正变化的是:它现在有了一段新的上文。
例如,模型开头写:
这个设计总体是可行的。
接下来,“可行”就成了后续内容的一部分。模型更容易继续谈:
- 为什么可行;
- 怎样落地;
- 有哪些优势;
- 应该注意什么细节。
如果它开头写的是:
这个设计存在一个根本矛盾。
后面的路线就完全不同了。模型会开始寻找:
- 矛盾在哪里;
- 哪个前提不成立;
- 为什么无法落地;
- 应该如何替换。
同一个模型,同一个问题,只因为前面选了不同的几个词,后面就像进入了两片不同城区。
所以更准确的说法是:
前面的 token 没有改造城市,它只是把模型带到了城市里的另一个位置。
到了那里以后,能看见的路、最顺手的转弯、附近常见的表达,都会随之改变。
所谓“语义惯性”,其实就是开进一个街区后不容易掉头
模型写了一段论文腔以后,往往会继续写论文腔。
它一旦开始用“由此可见”“进一步而言”“在这一框架下”之类的表达,后面很容易出现更多术语、更长句子、更严肃的语气。
这不是因为它产生了什么神秘的“语义动量”。
原因更朴素:前面的学术表达,本身就是后面继续学术表达的强烈信号。
就像你已经开进了大学城,周围全是实验楼、图书馆和学生公寓。下一个路口再看到咖啡馆和打印店,并不奇怪。
角色扮演也是一样。
模型一旦连续几轮都在扮演侦探、律师、医生或者中世纪骑士,已有上下文会不断提醒它:“我们现在还在这个故事里。”
轮数越多,角色越稳;设定越具体,越容易“入戏”。
问题在于,错误假设也会产生同样的惯性。
假设模型一开始误解了用户的需求。只要它继续沿着这个误解写下去,后面的每一段都会让这个方向显得更加完整、更加合理,也更加难以修正。
这就是为什么长任务里,开头的任务理解比结尾的措辞重要得多。
结尾一个词用错,改起来很容易。
开头方向错了,后面几十段都可能要推倒重来。
语义漂移,不是突然失控,而是连续几次小偏航
很多长对话并不是在某一刻突然坏掉的。
更常见的情况是,每一轮只偏一点点。
用户原本说的是“尽量降低延迟”,模型在转述时写成“追求极致低延迟”;下一轮又把它理解成“延迟优先于成本”;再下一轮,整个架构开始围绕昂贵的实时方案展开。
每一步单独看,都不像严重错误。
但走了十个路口之后,模型已经到了完全不同的城区。
可以把从当前位置最终成功的概率记成:
这里的
如果一个关键澄清能把成功概率从百分之一提高到百分之五十,那么它做的事情并不是“给模型增加思考能量”,而是直接把车从一片岔路密布的区域带到了更接近目的地的主路上。
这类澄清通常不是华丽的提示词,而是很普通的几句话:
这里的“实时”是指两秒内返回,不是毫秒级。
数据规模是每天十万条,不是每秒十万条。
目标是验证可行性,不是立刻设计生产级系统。
一条准确的约束,往往比一整段“请深度思考、进行第一性原理分析”更有用。
思维链的价值,是帮模型设置几个中途站
复杂问题最难的地方,通常不是终点完全不可见,而是起点到终点之间跨度太大。
你直接问:
证明
是无理数。
模型需要从一句题目跳到完整证明。
如果把路线拆开:
- 假设
; - 令
互质; - 推出
是偶数; - 再推出
也是偶数; - 与互质条件矛盾;
整个任务就变成了几个相对容易的小路段。
思维链的作用,像是在导航中加入途经点。
模型不需要一口气跨过整座城市,只需要先开到第一个站,再从第一个站开到第二个站。
而且,中间结果会直接写进上下文。模型下一步可以重新读到它,不必把所有变量都憋在某个不可见的内部状态里。
不过,思维链也不是万能的。
如果第一个中途站就选错了,后面仍然可能一路错到底。区别只是:这次错误路线写得更详细了。
所以,比“让模型多想一会儿”更重要的是:
让它在关键路口停下来检查。
比如:
- 这个假设是题目给出的,还是我自己补的?
- 这个接口真的是同步的吗?
- 这个数据口径有没有混淆?
- 这个结论有没有反例?
- 代码是否实际通过测试?
思维链负责把路摊开,验证负责确认路没有走错。
两者缺一不可。
温度不是创造力旋钮,更像司机的冒险程度
大模型里的温度经常被解释成创造力。
低温更保守,高温更有创意。
这个说法只有一半对。
温度升高以后,模型确实更愿意尝试那些原本概率较低的词。就像司机不再死守导航推荐路线,开始愿意拐进一些小巷。
这会带来更多变化,也可能找到一些不寻常的表达。
但小巷里既可能藏着风景,也可能是死胡同。
所以高温增加的首先是“不确定性”,不是“质量”。
低温的模型像一个特别听导航的话的司机:
- 稳;
- 可预测;
- 常走熟路;
- 有时过于模板化。
高温的模型像一个喜欢临时改道的司机:
- 容易发现新路线;
- 也更容易迷路;
- 偶尔有惊喜;
- 偶尔不知道开到哪去了。
真正可靠的创造过程,不是把温度拉高,然后让模型一路自由发挥。
更好的办法是:让几辆车分别探索不同路线,再把路线拿回来比较。
也就是先生成多个真正不同的方案,然后检查:
- 哪个满足约束;
- 哪个可以实际执行;
- 哪个成本最低;
- 哪个经得住反例;
- 哪个只是说得好听。
这时,多样性才有机会变成创造力。
否则,多样性只是更多种不同的错误。
长上下文的问题,更像路牌太多,而不是地图装不下
很多人觉得,模型一旦支持几十万 token,上下文问题就解决了。
事情没这么简单。
一条指令放在十行文字里,模型很容易找到。
同一条指令埋在十万字材料里,周围还有几十条相似要求、旧版本说明、例外情况和历史讨论,它就未必还能稳定抓住。
这不一定是“模型忘了”。
更像是一个路口立着几百块牌子:
- 正式规则;
- 旧规则;
- 举例;
- 反例;
- 临时说明;
- 用户随口提过的偏好;
- 已经失效的中间决定。
真正重要的那块牌子还在那里,只是不再醒目。
这也是为什么长对话中,模型有时会慢慢偏离最初要求。不是所有无关 token 都平均分走了注意力,而是相关信息需要和大量相似信号竞争。
解决办法也不是每隔两轮重复一句“请记住”。
重复太多,新的强调本身也会变成噪声。
更有效的方式,是在长任务中维护一份短而稳定的“任务卡”:
目标:做什么。 硬约束:哪些不能违反。 已确认事实:哪些可以直接使用。 未决问题:哪些仍要验证。 验收标准:什么算完成。
人类做复杂项目时也会这样。
会议可以开很久,讨论可以很散,但真正执行时,最好有一张清晰的任务单,而不是让每个人重新翻完整聊天记录。
好的示例,常常比长篇说明更懂得带路
假设你想让模型写一条 Linux 命令。
你可以解释半天:
请使用 Unix 风格的命令行工具,通过管道把一个命令的输出交给另一个命令,并筛选满足条件的行……
也可以直接给它一句:
ls -al | grep ".log"后者的信息密度高得多。
模型一眼就能判断:
- 这是 Shell;
- 是 Linux 或类 Unix 环境;
- 使用管道;
- 输出要简洁;
- 目标是命令,不是教程;
- 可能使用
grep进行过滤。
一个例子同时交代了任务、格式、风格和工具生态。
这也是某些特殊标记很有用的原因。
看到:
INT. OFFICE — NIGHT模型很容易进入剧本写作模式。
看到:
∀x, P(x) \Rightarrow Q(x)它更容易采用形式化论证。
这些标记未必是什么“高纯度语义材料”,更像是模型很熟悉的行业黑话或场景暗号。
就像你走进一家餐馆,看见桌上放着筷子、茶壶和圆桌菜单,不需要有人再写三百字说明,你大概已经知道这里是什么场景。
工具的意义,是让司机下车看一眼
只靠语言生成,模型始终是在根据经验猜路。
它可能很有把握,但有把握不等于真的看过。
搜索、运行代码、查询数据库、调用编译器,这些操作的意义,是让模型暂时停止脑补,去外面确认一下。
程序返回什么,不需要靠文风判断。
接口是否存在,可以查文档。
SQL 是否正确,可以执行。
数学等式是否成立,可以计算。
某条新闻是否真实,可以找来源。
在导航的比喻里,工具像是:
- 看实时地图;
- 问路;
- 观察路牌;
- 下车确认门牌号;
- 试着把车开过去。
单元测试尤其像路障。
一条错误路线,不管写得多漂亮,只要测试过不了,就不能继续伪装成正确答案。
这也是强模型系统和单纯聊天模型的重要区别。
前者不会只问:“这条路线听起来合理吗?”
它还会问:“车真的开到了吗?”
物理比喻可以留着,但别让它接管事实
Softmax 和玻尔兹曼分布的公式确实很像。
把 logit 取负,可以写成类似能量的形式:
所以,用“能量低的状态概率更高”来帮助理解 Softmax,没有问题。
问题出在下一步。
一个概率分布能写成玻尔兹曼形式,并不说明模型内部真的有一颗粒子在滚动,也不说明它经历了热平衡、摩擦、惯性和朗之万动力学。
很多概率分布都能人为定义一套“能量”。
这是一种数学改写,不是物理现场录像。
局部地使用物理语言,可以帮助我们建立直觉;一旦开始用它解释所有内部机制,就容易把比喻当成事实。
最稳妥的做法是:
- 用城市和导航解释生成;
- 用检索器解释注意力;
- 用调音台解释风格和特征纠缠;
- 用物理自由能解释概率聚合;
- 用搜索和控制解释复杂推理。
一张图不必承担所有工作。
真正好用的提示,不是在路边堆更多牌子
不少人写提示词时,喜欢把所有要求一次性塞进去:
严谨、深入、简洁、全面、创新、通俗、专业、不要遗漏、不要废话、不要犯错……
看起来要求很多,实际可能互相打架。
“全面”和“简洁”有冲突。
“通俗”和“术语精确”需要平衡。
“大胆创新”和“严格保守”不是一个方向。
模型面对这种提示,像司机看到一排同时指向不同方向的路牌。它最后只能猜哪个更重要。
更好的做法,是先确定真正的验收标准。
比如写技术方案,可以明确成:
先判断方案能否落地。 只保留三个关键约束。 每个结论必须给出依据。 最后输出推荐架构和主要失败点。
这类提示不华丽,但它告诉模型:
- 终点在哪里;
- 哪几条路不能走;
- 到达后要交付什么。
提示词的价值,不在于听起来多高级,而在于减少错误分支。
最后回到那个最简单的问题:模型究竟在做什么
它并不是一个坐在桌前、先想清楚再开口的人。
它更像一个见过无数路线的司机。
每到一个路口,它都能迅速判断:
- 大多数人会往哪走;
- 哪条路符合当前场景;
- 哪种转弯最自然;
- 前面走过的路线暗示了什么。
它的强大来自见过的路线多、识别模式快、能在很大的城市里连续行驶。
它的局限也来自这里。
它可能把“常见路线”当成“正确路线”,把“语言顺畅”当成“已经到达”,把“前面说过的话”当成“已经确认的事实”。
因此,和大模型合作的关键,并不是让它说得更坚定。
而是替它做好几件事:
在出发前讲清目的地;在关键路口检查方向;遇到复杂路线时设置中途站;需要事实时下车确认;发现偏航时及时掉头;最后不要只看它讲得像不像,而要看它究竟有没有到。
说到底,大模型最值得记住的规律只有一句:
它很会接着走,但不天然知道自己是不是走对了。