《Agent原理,架构与实践》

第1讲:大模型的三个核心工作机制

准备起一个新的系列《Agent原理与实践》,讲讲agent的原理,架构与实践。目标不贪心:

1. 希望每篇文章有1-2个点能让大家有收获;

2. 希望不被骂;

本期第一讲,咱们开始。


【0】

大家有没有发现,跟AI聊得越久,它越像"记得"你说过的话:上午聊的方案,下午问一句"我刚才说的那个方案呢?",它接得天衣无缝。


所以很多人理所当然地认为:大模型是有记忆的。可其实呢?


大模型内部有三个工作机制,它们不复杂,但很多人对它们的理解是错的。对大模型的错误理解,是很多人做Agent架构设计翻车的根源:

1. 为什么skill要写成文件?

2. 为什么问一个“你好”要花那么多token?

3. 为什么上下文要精打细算?

答案,都在这三个机制里。


【1】

第一个机制:模型是没有记忆的。


大模型的每次调用,都是独立的请求响应,上一次聊了什么,它一点也不记得。架构上管这叫"无状态"(stateless)。

画外音:站点层,服务层都应该设计成无状态,才方便水平扩展。


那为什么我们觉得Agent能接上话,好像有记忆似的?

那是因为Agent每次调用大模型时,都把之前的聊天记录,重新打包发给了它。大模型是看着完整记录,现场"重放"出连贯感的。


第1轮:发送[消息1] → 模型回复; 

第2轮:发送[消息1,回复1,消息2] → 模型回复;

第3轮:发送[消息1,回复1,消息2,回复2,消息3] → 模型回复。


每一轮都是全新计算,历史聊天记录是每次都重新塞进去的。


所以,"它记得我"只是个错觉,是Agent在替它记。模型自己,其实什么都不知道。


记忆不是模型自带的,而是Agent架构设计出来的。想让Agent记住什么,就得由我们把信息保存下来、在合适的时机塞回上下文。

画外音:想做自己的Agent,这一点尤为重要。


【2】

第二个机制:token就是钱。


模型看的不是字,也不是词,而是token,它是模型眼里的最小单位,理解、生成、计费,全都按它算。

画外音:官方是叫词元。


这里有两个有意思的知识点,大伙可以自测一下。


其一:表达同样的意思,一般来说,中文耗费存储多,还是英文耗费存储多?

3

2

1

...

公布答案:通常来说,中文消耗存储更少。


举个例子:

"上下文窗口就是天花板。",中文按照GBK编码,差不多20多个字节。

而

"The context window is the ceiling.",差不多30多个字节。


其二:相同的情况,中文耗费token多,还是英文耗费token多呢?

3

2

1

...

公布答案:通常来说,中文消耗token更多。


还是上面的例子:

"上下文窗口就是天花板。",中文差不多10多个token。

而

"The context window is the ceiling.",则是7个token左右。

画外音:具体多少token,和tokenizer切分有关。


一般来说,表达同一个意思,中文通常比英文费token。也就是说,同样的信息,中文往往更"贵"。


钱又是怎么计算的?

一次调用的成本 = 输入token数 × 输入单价 + 输出token数 × 输出单价


你不要以为,这一点差异而已,中文英文也没差多少。但回到第一个机制:每一轮对话都要把累积的历史重新发一遍。普通聊天,里这个放大效应还不明显,可Agent是循环工作的,跑十轮,每一轮的输入都在膨胀。


有生产数据估算:Agent类交互的token消耗,大约是普通聊天的4倍;多Agent系统,可能达到15倍。

画外音:不要无脑鼓吹多Agent多好多好,光从token费用这一点上来说,我个人持保留意见。


【3】

第三个机制:上下文窗口就是天花板。


上下文窗口(context window),就是模型一顿饭的饭量,一次调用能吃进去的token总量,碗就这么大。输入加输出,都得装进这个碗。


窗口满了会怎样?

报错吗?硬限制确实存在,超出窗口直接报错或截断。但更值得警惕的是软退化:在远没撞线的时候,模型的表现就已经开始下滑了。


Anthropic官方把这种现象称为上下文腐烂(context rot),原话是:

As the number of tokens in the context window increases, the model's ability to accurately recall information from that context decreases.

画外音:上下文里的token越多,模型从里面准确捞出信息的能力越差。


明明没有到窗口上限,为什么模型表现就开始下降呢?

注意力机制。


Transformer有个规矩:每个token都得关联计算其他所有token。n个token,就要处理n²组关系。上下文越长,每段关系分到的注意力就越薄。


所以装满窗口不是一个开关,而是渐变:还能用,但越来越糊涂——回忆精度和长程推理,都在慢慢下降。


别被"百万token窗口"骗了,窗口越大,塞得越多,想捞的信息越难被准确捞回来。


【4】

三个机制合起来,就是Agent架构设计需要重点考虑的:

1. 模型没有记忆:我们要自己设计记忆,塞进上下文;

2. token就是钱:塞进上下文的每个token都有成本;

3. 上下文窗口是天花板:上下文能装的内容有限,塞多了还会退化。


这三条,就是Agent设计的基石。后面十一讲,本质上都在回答同一个问题:在这三个约束之下,怎么把Agent设计好。让我们一起,一步一步,实现自己业务专属的mini-agent。


补充阅读:《Agents设计之高效上下文工程》

https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents


下一讲,我们聊聊:大模型有幻觉,Agent架构设计,如何尽量减少幻觉的出现。


知其然,知其所以然。

思路比结论更重要。


===全文完==


这个话题,是否值得聊一聊?期待你的反馈。


PS:公众号只能贴静态图文,无法用js实时互动,在线版设计了课后习题与实操演练,欢迎阅读原文体验。



文章原文