导学阶段-LLM 为什么具备智能
本文整理自 CNB 上的开源课程 《Vibe Agent:从零搭建 Coding Agent》。课程讲义、示例代码与练习仓库均在 CNB 上公开,文中示例出自该仓库对应章节。
初学 Agent 的人往往跳过一个问题:模型内部到底在做什么。跳过它也能拼出一个能跑的循环,但许多设计决策会失去依据。为什么要压低温度、为什么上下文一长回答就变差、为什么必须外挂工具,答案都落在这一层。
一次只做一件事
给定一段文本,模型输出的是下一个 token 的概率分布,再从分布里采样一个。
以”今天天气真”为例,候选词与概率大致如下:
| 候选 | 概率 |
|---|---|
| 好 | 35% |
| 热 | 22% |
| 冷 | 15% |
| 不错 | 8% |
| 糟糕 | 5% |
采样出”好”之后,把”今天天气真好”作为新输入,重新计算分布,再采样一次。生成一段话的过程,就是把这个动作重复若干遍。所谓”回答”,在这个机制里和”续写”没有区别。
这一点有个不太直观的推论:模型没有”查阅”这个动作。它不检索数据库,也不校验事实,只是让训练阶段形成的概率分布给出最可能的续写。所以它能写出语法完美、事实错误的句子,这种错误源自机制本身。
温度控制的是采样方式
从分布里取一个 token,有多种取法。temperature 就是控制取法的参数,取值区间为 0 到 2。
温度越低,分布被压得越尖,高概率的候选几乎必选;温度越高,分布越平坦,低概率的候选也有机会胜出。
| 温度 | 行为 | 典型用途 |
|---|---|---|
| 0 | 恒取概率最高者 | 代码生成、事实问答 |
| 0.3 至 0.7 | 大概率选高分候选,偶尔偏离 | 日常对话、写作 |
| 1.0 以上 | 均匀采样,输出发散 | 头脑风暴 |
温度不改变模型的知识储备,只改变从分布里取样的策略。这解释了两个常见现象:同一问题问两次得到不同答案,是因为温度大于 0 时存在随机采样;温度为 0 时输出稳定,是因为每次都取同一个最大值。
在 Agent 里,这条性质直接对应工程选择。凡是需要模型做判断、发指令、选工具的调用,温度通常压到 0,因为此时要的是可复现,不是文采。
智能从哪里来
一条 next-token prediction 的规则,撑不起问答、写代码、做推理这些能力。能力来自三层。
第一层是架构。当前主流模型都建立在 Transformer 之上,核心是注意力机制:预测下一个 token 时,模型能够回看前文所有 token,并决定重点关注哪些位置。预测”他把钥匙放在了___”时,权重会落在”钥匙”和”放”上,而不是句首的”他”。架构的另一个价值是训练时可以并行处理整段文本中各个位置,这让用成规模的算力训练成为可能。
第二层是预训练。把语料中的一段话遮住后续内容,让模型预测被遮住的词;答错了就调整参数,让正确词的权重升高、错误词的权重降低。这个过程在万亿量级的 token 上重复,模型逐渐习得语法规律、世界知识和代码模式。此时它仍然只是台接龙机器,输入一个问题,它可能接着编出更多问题。
第三层是对齐。监督微调用”人类提问、优质回答”的示范数据继续训练,让模型学会对话格式;基于人类反馈的强化学习则让人对多个回答排序打分,模型学习哪种回答更受欢迎。前者教它怎么开口,后者教它说什么更合适。
预训练读遍所有书,SFT 跟着师傅学怎么答,RLHF 根据反馈调整分寸。三步之后,才是日常使用的那个模型。
规模够大,能力会自己长出来
一个反直觉的事实是,小模型完全做不到的事,大模型突然就能做了。
| 参数规模 | 典型表现 |
|---|---|
| 几百万 | 能生成语法基本正确的句子 |
| 几亿 | 能写短文,但事实错误频繁 |
| 几十亿 | 能解简单数学题、写出可运行的代码片段 |
| 几千亿 | 能完成复杂推理、长文写作与多轮对话 |
这种量变引发质变的现象被称为涌现。它的成因还没有公认解释,也有研究认为其中一部分来自评测指标的跳变而非能力的突变。工程上不必纠结机制,只需记住一个经验式:预测下一个 token 的能力,加上海量数据与足够规模,会换来超出预期的通用性。
一个类比的边界
课程里用小孩学说话来类比:没人教过语法,听多了自然会组合出新句子。这个类比很有效,但它的边界同样重要。小孩没出过家门,不知道外面正在发生什么;模型没见过训练截止之后的世界,也不知道公司内部的文档。
“模型胡说八道”的问题,绝大多数都能归到这一层:训练时没见过,或者见过但记错了。指望通过更好的提示词根治,是把概率模型当成了数据库。
对搭建 Agent 的三点含义
第一,模型是无状态的。它不记得上一轮说过什么,所谓”记忆”是程序把历史消息重新传了一遍。后面讲上下文管理,讲的就是这份历史怎么组织。
第二,输出是概率性的。同样的输入可能得到不同结果,所以 Agent 的循环必须有刹车:最大轮次、异常兜底、重复调用检测。
第三,知识有边界。实时信息、私有数据、训练截止之后的事件、以及需要真正执行才能得到的答案,这四类内容不可能从参数里涌现出来。这正是工具存在的理由。
下一节讨论怎么和这个预测器对话:system、user、assistant 三种角色各自承担什么,以及为什么同一模型换一段 system 提示就像换了一个人。


