从LLM到Agent、Agent的6大核心。这些基础知识你还记得吗

从LLM到Agent,带你聊聊二者区别,以及一个agent需要具备的核心能力

作为一个初学者,我时常分不清大模型 (LLM) 与agent的边界在哪。

LLM 似乎就是个增强版的搜索引擎,agent 就是个大号的 LLM,能帮我操作电脑。事实是怎样呢?

我看了一下 《Transformers快速入门》,试着做出结论。

LLM 的 token、BPE、注意力机制、kv缓存

token: 现在官方的中文名是词元。token就是AI处理文字时使用的基本计量单位,一个英文单词一般能被模型分词器 Tokenizer 拆分为2-3个token,一个中文字一般就对应一个token左右。

Tokenizer: 分词器,负责将文本转换为token的组件

(文本 -> Tokenizer -> Token -> Token ID)

BPE (byte pair encoding): 分词器采用的一种分词算法

不同的模型用的分词器不同。

注意力机制 QKV : 生成token的时候,模型会拿着当前token的 Q (query),去和前面所有token的 K (key)做匹配(做点积、归一化、softmax等,详情可参见上文的参考书),计算所有 K的权重,然后对所有的V (value值)做加权求和。K与V是模型根据Token的表示计算出来的向量

KV缓存 : 在注意力机制中,已经计算过的K、V向量会被缓存起来,在计算下一个tokne时可以重复利用

LLM VS Agent

LLM : 一问一答,问答型 Agent: 一问,agent干活,一答

从LLM到Agent,总共经过了三种形态

Chatbot

可以理解为,ai作为一本百科全书,只不过知识不必你自己去读,而是一问一答的问答形式。

Copilot

可以理解为,ai作为人工作的协作者,在人工作时,ai弹出建议,人选择是否接受。例如vscode的github copilot插件,trae的cue功能。

Agent

ai自主完成任务,人作为决策者而非执行者。人的一句话,ai自己跑循环。每一轮循环都是想一步、做一步、看一步

css 复制代码
人发布任务 -> 
{
  agent循环体:
  think ➡ Act ➡ Observe ⬇
   ⬆       ⬅       ⬅
}

agent VS 工作流

工作流 : 人为定好的一套流程,ai按照流程 function calling、等等操作

agent: ai自主完成任务,自主决定每一步的操作。

agent VS harness

harness不是模型,而是一层包裹LLM的确定性程序。模型负责想下一步做什么,harness负责执行决策,跑循环、调工具、压缩上下文、管理状态、管理生命周期。

agent可以视为在harness基础上衍生出来的产物。agent是 LLM + 决策策略,是决定下一步做什么。

LLM就像大脑,harness就是其躯体、骨架,agent则是合体后的整体,可以自主判断,自主执行任务。

ReAct 模式

reasoning + action + obervation

阅读claudecode源码中的心跳机制,数千行代码。但最核心的摘出来,可以理解为一个 while 循环。

agent的循环说难也难,要考虑周全是很复杂的。但是咱们简化抽象一下,可以理解为这样

lua 复制代码
while(true){
  1. 准备上下文 -- 检查上下文爆没爆,如果要爆了就要采取压缩上下文(claude的五层压缩)的手段
  2. 调用LLM的API -- LLM 流式返回。在返回途中会给定需要调用的tool,则agent将识别到的tool call调用掉,而不是等返回完才执行。也就是说要边说边执行
  3. 决定是否继续loop -- 这里的判定较为复杂,claudecode设计了10种终止手段,下面咱们会粗浅介绍一二
  4. 执行工具 -- 如果工具执行出错,错误信息就要写的足够优雅,便于排除。且不会仅因为工具出错就停止循环,所以还要有重试机制等等
  5. 构建下一轮状态 -- 开始下一轮之前,处理一些杂活。例如检查skill、记录已消费的命令
}

五层压缩手段

其中,咱们先了解五层压缩手段:

  1. Tool-result budget - 按体积裁剪,超大的工具调用结果卸载到本地磁盘,替换为一段提示文字
  2. Snip - 不做任何自动判断,执行用户手动下达的 /force-snip 删除指令,将当时全部历史消息的uuid记成 snip_boundary标记,之后每轮把标记的uuid从发给模型的视图中过滤掉。这样只影响模型视角,UI里还能看到完整历史,不生产摘要
  3. Microcompact - 只针对几类固定工具(read_file、shell、grep、glob、web)的结果,按照时间触发,整体清空替换为占位符 [Old tool result content cleared],按照数量阈值也会触发,通过API的 cache-editing能力直接清除更早的工具结果
  4. Context-collapse - 将旧消息折叠成摘要,读取时投影。就是不改动真实的历史,只是在这次给LLM的prompt中,投影出一份精简视图发给模型。
  5. Auto-compact - 全局摘要,当前面几层手段都不够,则额外调用一次模型,将整段历史总结为摘要,整体替换为 messagesForQuery。

还有413应急触发的 reactive compact,以及预测性的autocompact(预估本轮输出会撑破窗口就提前压缩)。

claude的10种终止路径

# reason 含义
1 completed 正常完成,通过Stophook+token budget两道复核后,则停止循环
2 max_turns 超过最大轮数,强行停止
3 blocking_limit token烧穿,消耗量达到了硬上限,任何压缩都兜底不了了,停止循环
4 prompt_too_long 如名所说,提示词太长了,命中413,collapse drain->reactive compact 两级恢复都失败
5 image_error 媒体/图片过大,或者格式错误
6 model_error API错误,限流、认证失败等等
7 stop_hook_prevented Stop hook强行停止
8 hook_stopped 工具执行后,hook要求停止
9 aborted_streaming 流式阶段用户打断,claude里按esc可以强行打断当前输出。实质上只是流式输出结果不给你看了,以及生成的token已经烧掉了
10 aborted_tools 工具执行阶段用户打断

Agent的6大核心

给定例子,一次agent的调用具体发生了什么?

给定一个例子,带你了解一下agent的一次任务干了些什么,可能会遇到什么问题。从而让你知道,一个agent必备的一些功能。

当我在终端中对我的 claude 说: 帮我把 src/tuils.ts 中的 formatDate 函数重构一下,将momentjs库替换为dayjs库。

claude闻言,气息不再掩饰,展现出它具有的这些强大的能力:

  1. 能决定要做什么,整出一个 todolist 来。例如: 读文件路径是否正确,是否要拼接为绝对路径。分析文件内容、查看package.json中有无 dayjs 库,如果没有,则安装、改代码、测试等等。

想一步、做一步、看一步的循环

  1. 能读文件、跑命令。claude是有优先加载的内置工具。例如使用node中的fs(file system)模块,调用 Read 工具读文件、Bash脚本跑命令、Edit工具修改文件等等

工具的定义、调度、并发控制(读操作并行、写操作串行),读写锁、权限管理 共同组成了 Tool System

  1. 要有短期记忆能力,agent要记住之前做了什么,不要重复做。至少在当前对话中需要记得做过的事情。

  2. 还要能有跨会话的长期记忆能力。能记住你的喜好、你说过的重要信息。

例如第一次重构,我对agent说用pnpm安装依赖,而不是npm,它就需要记住这个信息。下次打开agent,让它安装依赖,它就明白一定使用pnpm/这就是Memory System

  1. 能解决分派多个agent,多agent协作解决复杂任务的能力。有些复杂任务一个agent独木难支。例如你让claude去阅读上万页的论文,claudecode要是自己干,光看都能给自己看力竭了。

例如主agent做开发,需要读取某个领域的文献。也许就会fork出一个子agent,来负责分段、分页读取,压缩文献内容,再交给主agent处理

  1. 有容错安全的能力。例如权限、Hook、重试机制、退出...

例如agent面对高危的指令,rn -rf全删。这种危险指令想都别想,不许干,应当拦截下来。例如给梁圣充的token还没烧完,但是高峰期可能出现API挂了的情况,需要重试,指数退避+随机抖动安排起来。退出机制,例如claude可以 ctrl+c 、ctrl+d 两次离开程序,但是会保持状态。可以用/resume复原对话

6大核心

以上的例子,就是agent的核心的6大基本能力。可以简单归纳为:

Agent Loop - 想一步、做一步、看一步的循环。这就是agent的心跳

Tool System - 读文件、跑命令、调api,LLM的function calling,以及管理外部的MCP工具等等的能力,这就是agent的手脚

context-engineering - 管理有限的上下文窗口,也是你的agent能运作起来的最关键的能力。试想一下,如果你的上下文不做优化,不压缩不管理,用户的token如流水般被消耗殆尽,几亿token都不够一个任务造的...这就是agent的大脑供氧

Memory System - 跨会话的长期记忆,你的agent能记住你的偏好、你的需求,哪怕分别数日,再次打开agent,一切如故,它还是懂你的口味...这就是agent的记忆力

Multi-Agent - 多agent协作,拆分任务、独立上下文。当然,多一个子agent意味着多一份开销,但是面对大型任务,还是很有必要的。这就是agent的团队协作

Harness Engineering - 权限、生命周期、Hook、重试、退出。这同样是agent不可或缺的能力。这就是agent的骨架

总结

回到开头的问题,LLM与agent的边界到底在哪?

LLM 是大脑,强大。问题在于,LLM只会"想",单纯的问答与LLM的能力强大格格不入,因此agent出现了,给强大的大脑配好一副躯体。

AgentLoop是心跳,每次循环都是一次泵动,想一步、做一步、看一步。ToolSystem是手脚,让想法落地为文件、代码、命令。ContextEngineering是供氧,窗口有限,但能让大脑持续运转。

大脑聪明,身体力行,合二为一,加上各种边界、设计,就是一个逻辑自洽的agent了。

相关推荐
甜辣uu1 小时前
智能体Agent性能优化从原理到实战
人工智能·性能优化·大模型·llm·agent·rag·智能体
一 铭1 小时前
软件诞生于 Commit 之间:聊聊 Zed 的 DeltaDB
人工智能·ai·agent
FungLeo3 小时前
成为全栈·Node 后端篇·注册登录全流程实现
node.js·登录流程·成为全栈·注册流程
XLYcmy3 小时前
Self-Adapting Language Models论文分享
自然语言处理·llm·微调·sft·论文笔记·强化学习·自进化
云烟成雨TD4 小时前
LlamaIndex 系列【21】语义检索(Semantic Search)
ai·agent·rag·llamaindex
云烟成雨TD5 小时前
LlamaIndex 系列【20】关键词检索(Keyword Search):BM 25 算法
ai·agent·rag·llamaindex
AI大模型-小华6 小时前
Codex CLI第一次怎么用?从安装到读取本地项目完整教程
git·node.js·ai编程·开发工具·代码分析·codex·codex cli
桃西西呀6 小时前
用 AI 写得更快,上线却容易炸?拆解 AI 编码生产力悖论的 5 个机制,附 9 个坑的自检清单
人工智能·llm·ai编程
fangpin6 小时前
LLM 2: Transformer 原理与实现
llm