本文整理自 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 提示就像换了一个人。