大模型:智能体的大脑

读完能说清 token、上下文窗口、下一个 token 预测是怎么回事,并解释大模型为什么会幻觉、记不住、动不了手——这正是后面要给它补的三块短板。

为什么只记结论不足以掌握大模型:智能体的大脑

学习“大模型:智能体的大脑”时,第一步不是记住结论,而是冻结输入、上下文、版本和成功标准。只有这些条件明确,大模型:智能体的大脑的含义才不会随着样例变化。正文已有的概念说明要与结构图、运行轨迹和失败样本互相印证,不能只凭最终输出看似正确就宣布完成。

结构分析从拆开那位失忆天才的脑袋开始:列出参与者、职责、连接方向、生命周期和所有权,再沿正常路径追踪数据或控制流。每一条边都要说明为什么存在、谁创建、谁消费、谁负责清理;如果边界被跨越,必须能在证据中找到第一处异常。

机制验证要把第一件事:模型不按字读,按 token 读写成可以执行的条件。正常样本证明主路径,恰好边界样本验证等号和空值,单故障样本只破坏一个假设。三类样本使用同一份观察指标,避免因为测试口径变化而把偶然结果误认成规律。

成本分析同时记录时间、空间、延迟、耦合、可维护性和不可逆操作。第二件事:他一次只读得进这么长不是一句“可能失败”,而是可复现输入、预期停点、实际轨迹、错误分类与清理步骤。任何自动重试都要有次数、预算和幂等边界。

方案比较不能只列优点。需要给出直接实现、当前方案和至少一个替代方案,逐项比较复杂度、扩展点、故障隔离和团队认知成本。当问题规模很小或变化轴稳定时,更简单的实现往往更好;模式与框架必须由真实变化压力证明。

实现阶段把大结论拆成可检查的中间产物:配置快照、结构清单、状态转移、输入输出样本、日志摘要和测试结果。每个产物带来源与生成命令,下一阶段只消费已通过门禁的版本,避免旧缓存或隐式默认值污染结论。

解释结果时必须区分相关性与因果性、接口承诺与实现细节、设计意图与运行事实。对“第三件事:他写回复,是一个个 token 接出来的”的判断要由独立证据支持,并明确适用范围;一旦输入分布、版本、硬件或组织边界改变,就重新运行最小实验。

复盘从首个分叉开始,而不是从最后一个报错倒推。先比较冻结输入,再比较第一份结构化中间产物,随后检查状态、约束和副作用。这样可以把复杂系统的排错范围收缩到一个阶段,避免在多个层次同时修改造成新的不确定性。

迁移到真实项目时,先选择一个最小但有代表性的切片,保存改造前基线,再逐步引入“大模型:智能体的大脑”中的机制。每一步只改变一个变量并保留回滚点;性能、正确性、安全性和可理解性至少各有一项可量化指标。

最终验收要求读者能脱离页面重新画出结构、口述关键链路、实现最小版本、构造一个反例并解释失败位置。若只能复述名词而不能预测中间状态,说明知识仍停留在识记层,需要回到图示和实验重新验证。

本页用、

、、、建立统一坐标。先预测这些概念在结构图和运行轨迹中的位置,再操作实验控件;如果结果与预测不一致,停止在首个分叉,不要用后续补丁掩盖早期错误。

权威目录与核心概念逐项对照

  • 大模型:智能体的大脑
  • 拆开那位失忆天才的脑袋
  • 第一件事:模型不按字读,按 token 读
  • 第二件事:他一次只读得进这么长
  • 第三件事:他写回复,是一个个 token 接出来的
  • 把三件事连起来:他天生的三块短板
  • 把三件事玩一遍
  • 承上启下:从「看清他」到「驾驭他」

可复现的最小实现

先把决策记录写成机器可读结构:

{
  "unit": "大模型:智能体的大脑",
  "inputFrozen": true,
  "scenario": "normal | boundary | single-fault",
  "firstDivergence": null,
  "cleanupRequired": true
}

再用同一条执行链处理三类样本:

type Evidence = { stage: string; expected: string; actual: string };
 
function verify(sample: unknown, expected: readonly Evidence[]) {
  const trace = runFromCleanState(sample);
  return expected.find((item, index) => trace[index]?.actual !== item.expected);
}

最后保存回归门禁,禁止失败样本静默通过:

normal      -> complete, invariant preserved
boundary    -> complete or explicit rejection
singleFault -> stop at first divergence, no stale output

用统一评分解释实验结果:

Q=Ccorrect+Ctrace+CrecoverRresidualQ = C_{correct} + C_{trace} + C_{recover} - R_{residual} Ccoverage=NverifiedNofficialC_{coverage} = \frac{N_{verified}}{N_{official}} Rresidual=P(failure)×I(impact)R_{residual} = P(failure) \times I(impact) Accept=(Ccoverage0.90)(RresidualRbudget)Accept = (C_{coverage} \ge 0.90) \land (R_{residual} \le R_{budget})

本章回顾

  • 大模型:智能体的大脑必须绑定冻结输入和明确成功标准。
  • 拆开那位失忆天才的脑袋必须能画成结构并沿边追踪责任。
  • 第一件事:模型不按字读,按 token 读要由正常、边界和单故障样本共同验证。
  • 第二件事:他一次只读得进这么长必须保存第一处偏离和清理重建步骤。
  • 第三件事:他写回复,是一个个 token 接出来的决定方案是否可以进入下一阶段。

术语表

拆开那位失忆天才的脑袋

上一章我们认识了那位「关在没窗小屋里、绝顶聪明却严重失忆」的天才顾问。这一章,我们把他的脑袋拆开看看:他到底是怎么读你塞进去的纸条、怎么写回复的?只有看清他天生会什么、不会什么,才知道后面该给他补哪些东西。

你会发现三件有点反直觉的事:他不是一个字一个字读纸条的,他一次能读进的纸条长度是有上限的,而且他写回复不是「想好整句再下笔」,而是一个词一个词地往后接、接到觉得该停为止。

弄懂这三件事,本章的目的就达到了:你会明白他为什么有时一本正经地胡说、为什么转头就忘、为什么干不了实事——而这正好对应后面几篇要给他添的东西。不弄懂,你就会对着这些「毛病」干着急,却不知道病根在哪、该补哪一块。

第一件事:模型不按字读,按 token 读

我们直觉以为模型像人一样一个字一个字读,其实不是。它先把你的文字切成一个个小块,再以这些小块为单位处理——这些小块就叫。把整段文字切成 token 的这个过程,叫。

为什么要切?因为模型内部只认这些「块」的编号,不认原始文字。关键的反直觉点在这:一个 token 不一定等于一个字。中文常常一个字就是一个 token;英文则常按单词、甚至单词的一段来切——一个长单词 unbelievable 可能被切成 unbelievable 三个 token。所以「token 数」和你眼睛数的「字数」往往对不上,而且中英文还对不上得不一样。

这件事为什么要紧?因为后面所有「能记多长」「调一次模型多少钱」「会不会超长」的账,算的都是 token 数,不是字数。下面这个小工具让你亲手感受一下——打一句话进去,看它被切成几个 token:

猜一猜:同样是「五个符号」,纯中文的「今天天气真」和一个英文长词,哪个切出来的 token 更多?

可交互动手:在框里打字,实时看它被切成多少个 token
字符数:7token 数:7
中文字英文词子词(长词拆块)数字段标点 / 空白

猜一猜:同样一句话,纯英文长词和纯中文,哪个 token 数更接近字符数?为什么 token 数往往不等于你数的字数?

或一键填入示例:

多打几句你会摸到规律:中文大致「一字一 token」,而英文一个长词常被拆成好几块——token 是模型的「字」,但它和我们说的字不是一回事

第二件事:他一次只读得进这么长

失忆天才的门缝只有那么宽,你一次能塞进去的纸条长度是有上限的。这个上限就是:模型一次能读进去的 token 总数是固定的。

注意,你塞进去的可不只是「当前这句问题」。系统给它的设定(系统提示)、之前来回的对话历史、再加上你这次的问题,全都要一起塞进同一张「纸条」,一起占用这个窗口。纸条越塞越长,一旦超过窗口容量,最前面的内容就被挤出窗口、模型读不到了——表现出来,就像它把前面说过的话「忘了」。这正是上一章说的「失忆」在机制上的来由:不是它不想记,是门缝就这么宽,塞不下的就掉出去了。

下面这张解剖图把「纸条—窗口—被挤掉」画清楚,顺带也把上一节的 token 化中英对照摆在一起看:

上下文窗口 = 门缝能塞进的纸条长度塞进去的纸条 = 系统提示 + 历史对话 + 当前问题,被切成一个个 token系统提示历史对话当前问题▢ 窗口容量:一次只读得进这么长t1t2t3t4t5t6t7t8t9t10t11⟸ 超出窗口的部分被挤掉 = 模型「忘了」这些 tokentoken 化:token ≠ 字数,中英粒度不同中文(5 字 ≈ 5 token)英文(按词 / 子词切)Theweatherisunbelievable「unbelievable」一个词被切成 3 个 token:un · believ · able
模型一次只读得进固定长度的「纸条」(上下文窗口);超出的部分被挤掉,就是它「忘了」的来由。 而切纸条用的单位是 token——中文常一字一 token,英文常一词切成好几个,所以 token 数 ≠ 字数。

记住这张图的画面:上下文窗口 = 门缝能塞进的纸条长度。它有限,超了就「忘」。这也解释了为什么聊天聊久了模型会前言不搭后语——前面的对话被挤出窗口了。怎么在有限窗口里塞下更多有用信息、让它「记得住」,正是后面「记忆与知识」那一篇要解决的事。

第三件事:他写回复,是一个个 token 接出来的

最反直觉的来了。我们以为模型「想好一整句」再写出来,其实不是。它干的是一件小到不可思议的事,叫。

它的完整动作是这样的:看着已经有的全部文字 → 对「下一个 token 该是什么」算出一个概率分布(每个候选 token 配一个概率)→ 从中挑一个(通常挑概率最高的)→ 接到已有文字后面 → 然后把刚接上的也算进「已有文字」,再预测下一个。所谓「生成一段话」,就是把这个小动作反复做很多很多次,一个 token 接一个 token,直到挑中一个表示「结束」的 token 才停笔。

这件事是整个大模型的核心,也是后面很多现象的根。下面这张可控动画,把这个「预测—挑选—接上—再来」的循环一步步演给你看:

猜一猜:模型写「今天天气真」之后那个字,是「想好后面要写什么」才下笔,还是先给好几个候选字算概率、再挑一个?

可交互
已生成序列:一个个 token 接上去前 5 格是给定的开头,后面是模型逐步预测着接上的下一个 token 的概率分布:挑最高的那个接上0.62不错0.180.080.050.410.300.160.09(结束)0.550.220.140.09

第 1 / 3 步 · 第①步:看着「今天天气真」,模型给下一个 token 算一组概率——「好」最高(0.62),于是挑它接上

模型每一步只预测「下一个 token」:给候选算概率、挑最高的接到序列后面,再预测下一个——所谓「生成」就是反复做这件事。可暂停、单步、拖进度。

「生成」不是一口气写完整句话,而是反复做一件小事:看着已有文字,给下一个 token 算一个概率分布,挑概率最高的那个接上去,再来一轮——直到挑中「结束」。

播完你会明白:模型并不「知道」自己整句要说什么,它只是每一步都在赌「下一个 token 最可能是谁」。这件事顺手就解释了它的一个著名毛病——既然它只管「接一个最顺的 token」,而不管「这内容是不是真的」,那当它没有可靠依据时,照样能一脸认真地接出一串通顺却不实的内容。这种「没依据也敢编、还编得很像真的」的现象,就叫。

把三件事连起来:他天生的三块短板

把上面三件事连起来,那位失忆天才天生的三块短板就一目了然了,而这三块恰好就是本书后面几篇要逐一给他补的:

  • 会幻觉——没可靠依据也敢一脸认真地编。因为他只管接「最顺的下一个 token」,不管内容真假。补法:后面「记忆与知识」篇给他一座可检索的资料库(RAG),让他答之前先去查、有依据再说。
  • 记不住——关了就忘、聊久了也忘。因为上下文窗口有限,超出的被挤掉。补法:同样在「记忆与知识」篇给他笔记本(短期记忆)和长期记忆,把该记的存下来、要用时再取回塞进窗口。
  • 动不了手——出不了屋,不能上网、算账、查实时数据。因为他天生只会「读 token、写 token」。补法:「让智能体行动」篇给屋子装一部「电话」(工具调用),让他能在回复里写「请帮我做 X」,由外面替他做完、把结果塞回窗口。

看清这三块短板的病根,你就拿到了整本书的地图:所谓「从零构建一个智能体」,本质就是围着这位失忆天才,一块块补上他天生缺的能力。

把三件事玩一遍

本章的三件套已经在上面随讲随玩过了,这里把它们串成一条线收个尾——你可以回到上面任意一个再拨几下:

  • token 化交互件 打几句中英混合的话,盯着 token 计数:体会「token ≠ 字数」;
  • 上下文窗口解剖图:体会纸条太长,最前面的就被挤出窗口 =「忘了」;
  • 单步播 下一个 token 预测动画:体会「生成」=「反复挑下一个 token 接上去」,以及幻觉为什么会从这里冒出来。

三件玩明白,你就摸清了这位天才的「读—记—写」全套机制,也就知道了他缺哪三块。

承上启下:从「看清他」到「驾驭他」

到这里,我们已经把这位失忆天才彻底看清了:他按 token 读、窗口有限、靠一个个预测下一个 token 来写字,因而天生会幻觉、记不住、动不了手。本章是纯认知铺垫,还不动手写代码;从下一篇「驾驭大模型」的第一章起,我们才正式动手——先学怎么把塞给他的「纸条」写好(提示工程),并一砖一瓦搭起贯穿全书的 tinyagent

容易踩的坑

小结

  • 模型不按字、按 token 处理文字;token ≠ 字数,中文常一字一 token、英文常一词切成多个子词
  • 上下文窗口是模型一次能读进的 token 上限(= 门缝能塞进的纸条长度);系统提示 + 历史 + 当前问题共用它,超出的被挤掉 =「忘」
  • 「生成」的本质是 下一个 token 预测:看着已有文字给下一个 token 算概率、挑一个接上、再来——反复做这件事,直到挑中「结束」
  • 大模型天生三块短板——会幻觉(接最顺的 token、不核对事实)、记不住(窗口有限)、动不了手(只会读写 token)
  • 这三块短板正是后面篇章要补的:记忆 / RAG 治「幻觉 + 记不住」,工具调用治「动不了手」

讨论

评论区加载中…