跳到主要内容

第 2 课 · 它凭什么听得懂人话

读这一课前你需要会什么:读过第 1 课。 你需要知道那三件事:它一圈一圈地写、它脑子里什么都不存、它自己不会重复这个动作。 出现的每一个新词都会当场用大白话讲清。讲不清楚的地方就是我的问题,请直接标出来。

这一课结束时你会

  1. 说得出「它听得懂人话」这件事是从哪儿来的——不是天生的,是训出来的;
  2. 说得出为什么我们能靠「往它眼前那段文字里塞东西」改变它的行为,而不用碰模型;
  3. 说得出这整个课题为什么可能成立——以及它建立在哪一条能力上,那条能力靠不靠得住。

1. 先看第 1 课留下的那个洞

第 1 课说:它只会照着前面接着往下写

那就有个问题。 你打进去的是:

北京今天天气怎么样?

照「接着往下写」这个规矩,它完全可以接一句:

北京今天天气怎么样?上海呢?深圳呢?

这才是「接着往下写」啊。 在它读过的海量文字里,一个问句后面跟着另一个问句, 是再常见不过的写法。

可它没有。它回答了你。

这一课就讲这一件事:它凭什么把那句话当成「要我答」,而不是「接着往下编」。


2. 先还第 1 课欠的一笔:「大」到底多大

第 1 课说,「大模型」里的「大」指的是它内部可调的数特别多,还说第 2 课再讲。先还这笔账。

一个参照:

数量级
人脑1000 亿个神经元、约 100 万亿条连接
一个早期的大模型1750 亿个可调的数

这个对照就是那本书觉得值得惊讶的地方:一个可调的数的个数和人脑神经元数量相当的程序, 就能出色地生成人类语言(依据:本库摘录 · what-is-chatgpt-doing)。

那个 1750 亿是当时那一代的数,今天早就不是了。 引用这类数字时要连年份一起记, 有量感的是那个对照关系,不是具体数值。

多大算「大」,并没有硬门槛。 一份资料给的口径是:狭义指数百亿以上, 广义从十几亿到几千亿都算;而它给的真正判据是「只要展现出涌现能力就算」 (依据:本库摘录 · happy-llm)——涌现是什么、以及它为什么要打问号,§5.4 讲。

那些数是干嘛的? 一句话:它们决定了第 1 课那张「下一个该写什么」的清单怎么算出来。 调这些数的过程叫训练,而训练分三段——这就是下一节。


3. 顶层全景:它是分三段训出来的

一句话:今天你用的那个 AI,是同一个模型被分三段调教出来的,三段各管一件事。

① 预训练 海量文字上做接龙:给前面,猜后面
│ → 拿到的是知识和语感。这一段结束时,它只会接话。

② 微调 喂成对的「这样问 → 该这样答」
│ → 这一段结束时,它开始照办。

③ 让人打分再调 人给它的回答排好坏,拿这些排序去调它
→ 这一段结束时,它答得让人舒服。

图说:三段各管一件事——① 懂多少,② 听不听得懂指令,③ 答得合不合人意。
缺哪一段就缺哪一样,顺序不能换。

有一份资料给了个特别好记的说法(依据:本库摘录 · happy-llm):

第一段 = 把所有基础知识教给这个学生; 第二段 = 教他怎么读题、怎么解题; 第三段 = 让他真的做练习,老师批改,反思错的、强化对的。

我们这个课题,吃的全是第二段的饭。 下面拆开讲。


4. 主走查:同一句话,在三段前后各是什么下场

盯住第 1 课那句话,看它在三段训练的不同阶段会得到什么。

北京今天天气怎么样?

只做完第 ① 段的时候

第 ① 段的练习题就是接龙:给它一段文字的前半截,让它猜后半截,猜错了就调一调。 做几万亿次。(依据:本库摘录 · happy-llm)

做完这一段,它满肚子知识,但没人教过它「被问了要答」这条规矩。

它会接着往下写。写出什么取决于它读过的文字里这句话后面常跟着什么—— 可能是另一个问句,可能是一段天气预报的模板,可能是一篇游记的开头。

下面这几种续写是我编的演示,不是某次真实运行的记录。 拿来说明「只会接话」是什么意思:

北京今天天气怎么样?上海呢?广州呢?
北京今天天气怎么样?——多云转晴,最高气温 28℃。以上信息来自……
北京今天天气怎么样?我站在什刹海边上,想起十年前的那个秋天。

三种都是合格的「接着往下写」。它没有理由偏爱第二种。

做完第 ② 段之后

第 ② 段喂给它的是成对的东西:一句人写的要求,配一句该有的回答。喂很多对、很多种类。

做完这一段,同样这句话进去,它开始答了。

关键在这一段的效果不止于「教过的那些」。 这一点下面第 5.2 节细讲, 现在只记住一句:教过它几十种任务之后,它对第几百种任务也能上手。

做完第 ③ 段之后

第 ③ 段调的不是「答不答」,是「答得好不好」——是不是啰嗦、有没有摆架子、会不会答一半。

这一段对我们这个课题影响最小。 它决定的是语气和分寸,不决定它会不会照办。

停一下:我们要造的东西站在哪一段上

给了我们什么我们的课题用不用得上
① 预训练它知道天气是什么、北京在哪背景,用不着我们管
微调它会照着你的要求办事全部指望在这一段
③ 让人打分它答得像个人影响体验,不影响机制

5. 拆开看:第 ② 段到底给了什么

这一节讲四条能力。 它们是同一段训练的产物,但对我们这个课题的用处很不一样。

5.1 指令遵循:这一条是整个课题的地基

先给这个词:

指令遵循 = 你用大白话写一句要求,它就照办;而且这句要求可以是它训练时没见过的。

「没见过的」这三个字是关键。 不是「你教它写周报它就会写周报」, 而是教过它几十种任务之后,它对第几百种任务也能上手(依据:本库摘录 · happy-llm)。

为什么这一条是地基? 那份资料把话说死了:

今天的智能体,乃至未来可能出现的全能助理,本质上依赖的都是指令遵循能力。 (依据:本库摘录 · happy-llm)

把这句话摊开是这样的:

  1. 我们要造的东西,靠的是在那段文字里写规矩——「你可以用这几个工具」「要用就按这个格式写」;
  2. 它照不照这些规矩,全看它的指令遵循能力强不强;
  3. 这条能力不是模型天生的,是第 ② 段训出来的;
  4. 所以它有强弱之分。

第 4 条有一个很实的后果:同一套代码换个模型,可能就跑不动了。

这不是猜的。有的实现专门为此写了两条路: 原生的那条路在运行时报「不支持」,就当场切回一条纯文字的备用协议,不让整次执行失败 (依据:本库摘录 · crewai)。 还有的实现走得更远——按模型不同,把整个请求塑形成它最熟悉的那副样子, 理由是那些便宜模型分别是在各自厂商的工具格式上调优过的, 直接塞进另一家的格式会水土不服(依据:本库摘录 · open-interpreter)。

5.2 上下文学习:我们凭什么能靠「写字」改变它

先给这个词:

上下文学习 = 你在给它的那段文字里塞几个例子或一句说明,它就照着做, 而模型本身一个数都没改。

这件事在几年前是不成立的。 对照着看最清楚(依据:本库摘录 · happy-llm):

老办法上下文学习
做一个新任务要什么标注一千到几万条数据,再训一次写一段话
要多少算力就算五亿参数的小模型,训一次也要 10GB 以上显存
模型参数被改动一个不改

这一条是我们整个课题在技术上成立的原因。

台阶一级一级走:

  1. 我们没有能力去改模型——那要海量数据和一屋子显卡;
  2. 但我们能改每次送进去的那段文字;
  3. 上下文学习意味着:改那段文字,就能改它的行为;
  4. 于是「告诉它有哪些工具可用」这件事,写进那段文字里就行了;
  5. 这就是后面四课全部工作的着力点。

顺带把一个你到处会看到的词定死:

prompt = 你交给模型的那一整段输入文字。 包括你的问题、你给的例子、你提的要求,全都算在里面。 (依据:本库摘录 · happy-llm)

这个词中文有时候译成「提示」,但业界口语和文档里写 prompt 的更多,后面全文用 prompt

「怎么调整这段文字把它的能力激发出来」这件事有个名字,叫提示工程。 第 6 课整整一课都在讲这个——因为同一句话摆在这段文字的开头还是结尾,效果差得很远。

5.3 思维链:为什么后面的循环里会有「想」这一步

先看问题。 有一份资料说得很直白: 如果一个模型连「鸡兔同笼」都算不出来,你很难认为它是智能的(依据:本库摘录 · happy-llm)。

它算不出来的原因不是笨,是它一步就要给出答案。 回想第 1 课:它一次只写一个 token,而多步计算需要中间过程

做法很朴素:让它把中间步骤写出来。

直接问: 小明有 5 个苹果,给了小红 2 个,又买了 3 个,现在有几个?
→ 它直接蹦一个数,经常错

让它写过程:5 个 → 给出 2 个,还剩 3 个 → 又买 3 个,一共 6 个 → 答案是 6
→ 每一步都是「一眼能看出」的,答对的比例明显上升

图说:同一道题,把「一步算完」换成「很多步各走一小步」。
中间步骤写在输出里,等于给了它一张草稿纸。

这个做法叫思维链。

思维链 = 让它把推理的中间步骤也写出来,而不是直接给答案。

为什么现在就要认识它: 第 4 课那个循环里,它每一轮开口先说的那段话就是这张草稿纸。 那段话不是废话,第 4 课 §4.6 会指给你看它具体是哪一行。

有一条要留心:草稿纸是要占地方的。 它写的每一个字都算钱、都占位置。 所以有的实现专门把「想」的内容做成给人看得见、但不发回给模型 (依据:本库摘录 · goose)——这就是在管这张草稿纸的成本。

还有一句该照实写: 这条能力是怎么来的,那份资料自己也不确定—— 它给了一个明确标注为推测的说法:据推测,可能是通过对代码的训练获得的 (依据:本库摘录 · happy-llm)。

5.4 涌现:一个你到处会看到、但要打问号的词

先给这个词,再说它的问题。

涌现 = 同样的架构、同样的练法,某些能力在小模型身上看不到, 模型变大之后突然就有了。

打的比方是水加热到 100 度突然变成气体——量变引起质变。

这个词很流行,而且它撑着整个行业的信心: 只要「继续放大还会冒出新能力」成立, 那条通往「什么都会」的路就走得通(依据:本库摘录 · happy-llm)。

但它有正式的反对意见,而且理由很好懂:

一道多步计算题,只有全对才给分。

它从「错三步」进步到「错一步」 → 得分还是 0
它再进步到「一步不错」 → 得分突然从 0 跳到 1

图说:能力是平滑上升的,分数是跳的。
那个「突然」可能是打分尺子造成的,不是模型真的突变了。

一份资料把这个反驳完整记了下来:2022 年有论文正式提出涌现,2023 年有另一篇直接反驳, 说那种突变可能只是评测指标造成的错觉(依据:本库摘录 · happy-llm)。

务实的读法:

说法怎么对待
规模变大,能力变强可以采信
存在无法预测的能力跃迁要打问号
所以继续放大就一定能通向全能 AI不能拿涌现来论证这个

6. 各家的分歧:「agent 到底是什么」有四五种说法

这一节把不同资料对同一件事的说法摆在一起。 它们不矛盾,但侧重点不同, 而且合起来正好凑出我们这个课题要造的东西。

五种定义,一张表

出处它的说法
(依据:本库摘录 · shen-ru-li-jie-ai-agent)agent = 大模型 + 上下文 + 工具;对应三个问题:它看到什么、它能做什么、怎么验证它做得对不对
(依据:本库摘录 · hands-on-large-language-models)用语言模型来决定采取哪些行动、以什么顺序执行的系统;比普通用法多两样东西:工具、以及一种决定「用哪个、什么顺序」的办法
(依据:本库摘录 · learning-langchain)「行动」这个词拆开有三层:要能决定、要有不止一个可选项、要拿得到外部信息
(依据:本库摘录 · ai-agent-kai-fa-shi-zhan)一个能调用工具并循环运行以实现目标的大模型;结构只有四块:目标、模型、工具、外部环境的反馈
(依据:本库摘录 · building-applications-with-ai-agents)单 agent 的价值就在于省掉了协调、通信、同步这三样复杂度

第三行那句「要有不止一个可选项」值得单独看:没有选项的决定不算决定。

这对我们有一个直接的推论:最小可用的工具数是二,不是一。 只给它一个工具,它其实没在做决定,只是在决定「调不调」。

一条历史:那个「想 → 做 → 看结果」的循环是怎么来的

这个三步循环不是谁拍脑袋定的,它是补两个洞补出来的(依据:本库摘录 · langgraph-blueprint):

早先的路线缺什么
只让它想(推理)容易编——想得头头是道,事实全错
只让它做(行动)缺上下文和规划——不知道为什么做这一步

在两者之间接一条反馈回路,就是那个三步循环。

这解释了第 1 课那个「汇率是它自己编的」的例子为什么会发生: 那条链上「想」的部分没有被任何工具兜住,于是它编了一个。

一条对我们最有用的分档

有一份资料按「谁在做决定」把人和 AI 的关系分成四档(依据:本库摘录 · ai-agents-in-action):

谁在决定
直接对话全是人
它替你改写请求它只做翻译
它准备好了,但要你点头决定权还在你
它自己定计划、自己做决定权交出去了

这不是四种技术,是同一套东西的四个刹车位置。

我们的原型先做第三档。 第三档和第四档的循环结构一模一样,只多一个暂停点—— 而那个暂停点让你能看清它每一步在干什么。


7. 动手:两个观察,验第 5.1 和第 5.2 节

这一课还是不写代码。 拿你在用的 AI 对话软件就能验。

#做什么你应该看到什么它验证的是
1开一个新对话,先写一句规矩:「从现在开始,你每句回答都要以『报告:』两个字开头。」然后随便问三个不相干的问题三次回答都以「报告:」开头§5.1 指令遵循——它照办的是一条你临时编的、训练时不可能见过的规矩
2再开一个新对话,不写任何规矩,直接给它三个例子:「开心→1」「难过→0」「兴奋→1」,然后写「平静→」它接一个数,而不是接一段解释§5.2 上下文学习——你没训练它,只是塞了三个例子

第 2 条是重点。 你什么都没教它,只是在那段文字里摆了三对东西, 它就推出了你要的规则。 这就是我们后面所有工作的着力点。

如果第 1 条你试出来它没照办(比如答了两句就忘了), 那正好验证了 §5.1 最后那句:这条能力有强弱之分。 换个模型再试一次。


8. 可带走的

  1. 它听得懂人话不是天生的,是三段训练里第 ② 段训出来的。 ① 预训练只教它接话,② 微调才教它照办,③ 打分那段教它答得舒服。
  2. 那条能力叫指令遵循,关键在「训练时没见过的要求它也能照办」。 今天所有 AI 助手、所有 agent,吃的都是这一条的饭。
  3. 指令遵循有强弱之分。 同一套代码换个模型可能就跑不动——这是真实产品要写两条路的原因。
  4. 我们能靠「改那段文字」改变它的行为,而不用碰模型——这叫上下文学习。 这是这整个课题在技术上成立的原因。
  5. prompt = 你交给它的那一整段输入文字,问题、例子、要求全算在里面。
  6. 思维链 = 让它把中间步骤写出来。 后面循环里那个「先想一想」就是它,不是装饰。 但草稿纸占地方,要花钱。
  7. 「涌现」这个词要打问号。 「变大能力变强」可以信,「存在无法预测的跃迁」有正式反对意见。
  8. agent 的定义各家说法不同,但都绕不开两样:工具,以及一个决定「用哪个」的办法。
  9. 最小可用的工具数是二——只有一个工具时,它没有在做决定。
  10. 先做「要你点头」那一档。 结构和全自动一模一样,只多一个暂停点,而那个暂停点让你看得见。

9. 下一课,以及我需要你的反馈

第 3 课开始动真格。 前两课讲的都是「它是什么」,第 3 课讲一轮到底怎么跑完:

你问它「北京今天天气怎么样?」,它写出一句「我想用查天气这个工具,参数是北京」—— 这句话到底长什么样?我的代码凭什么认出这是一次调用请求,而不是普通回答? 查到的结果又该以什么形状放回去?

那一课会出现第一段真正的代码。


读完请标出三种地方:

标什么我会怎么改
哪一段读不下去那一段拆成更小的台阶重写
哪个词没解释清楚换一种解释法,或者干脆不用那个词
哪里嫌啰嗦删掉