智能体框架的基本思想
一句话版:智能体 = 会思考的大脑(大模型)+ 会动手的身体(工具和环境)。智能体框架就是给"大脑"配"身体"的那套脚手架——它负责把工具、权限、记忆、多智能体协作这些杂活全部管起来,让开发者只操心"让智能体想清楚该干什么"。
1. 智能体是怎么工作的?
所有智能体(不管多复杂)都跑在一个简单的循环里:
感知(看到什么)→ 思考(决定做什么)→ 行动(动手做)→ 观察结果 → 再思考 → …
举个例子,一个"订机票助手":
- 感知:收到指令"帮我订下周三去上海的机票"
- 思考:需要查航班、比价格、订票
- 行动:调用查航班工具、调用订票工具
- 观察:看到"出票成功,¥880"
- 再思考:要不要告诉用户其他更便宜的选择?
这个循环本身很简单——难的是让"行动"这一步真正发生,而且安全、可控。
循环本身很简单——难的是让「行动」安全、可控地发生
2. 大模型只是"大脑",它需要"身体"
大模型(LLM)本身只会做一件事:根据输入的文字,生成输出的文字。
它不会真的:
- ❌ 发 HTTP 请求
- ❌ 读写你的文件
- ❌ 操作数据库
- ❌ 记住上次对话以外的事情
要让大模型"动起来",必须给它接上工具。这个"接工具"的过程,就是智能体框架的核心工作。
类比:乐高
大模型是一堆最厉害的乐高零件(能理解、能推理)。 智能体框架是一套说明书 + 收纳盒:说明书告诉零件怎么拼(工作流),收纳盒负责分类和保管(工具管理、权限、记忆)。 没有说明书和收纳盒,零件再厉害,也只是散落一地的积木。
3. 框架到底管哪些事?
一个完整的智能体框架,通常要解决下面这些问题:
| 问题 | 框架的回答 | 生活类比 |
|---|---|---|
| 工具怎么给? | 工具注册表 + 自动调用(Tool Calling) | 告诉大厨"哪层抽屉放着什么刀" |
| 能碰什么? | 权限与沙箱 | 限制大厨"只能碰自己工位的食材" |
| 记不记得住? | 会话状态、长期记忆 | 前几桌客人说过什么,别忘 |
| 一个人忙得过来吗? | 子智能体、多智能体编排 | 大厨把切菜分给帮厨 |
| 怎么连接外部世界? | API、MCP 等集成协议 | 给厨房接上外卖平台的订单系统 |
框架 = 给「大脑」配「身体」的脚手架,五大职责各司其职
逐个展开讲:
3.1 工具怎么给(Tool Calling)
框架把每个工具描述成一份"说明书"给大模型看:
{
"name": "get_weather",
"description": "查询某个城市的天气",
"parameters": {
"city": { "type": "string", "description": "城市名,例如 北京" }
}
}
大模型看到说明书后,会说"我要调用 get_weather,参数 city=北京"。框架负责真的去执行这个调用,把结果拿回来给大模型。整个过程,开发者只需要注册工具,不需要教大模型怎么用。
3.2 能碰什么(权限与沙箱)
智能体不可信吗?不是——但它的能力边界必须明确。框架提供:
- 权限声明:这个智能体只能读
/data目录,不能写系统文件 - 沙箱:把它关进一个隔离环境,即使它"失控"也影响不到外面的世界
3.3 记不记得住(记忆与上下文)
大模型每次对话都是"失忆"的。框架负责:
- 短期:把多轮对话整理成上下文
- 长期:把重要信息存进数据库/向量库,下次还能想起来
3.4 忙不忙得过来(多智能体)
一个任务可以拆给多个智能体协作:一个负责调研、一个负责写代码、一个负责审查。框架负责编排它们,并决定谁先谁后、结果怎么汇总。
3.5 怎么连接世界(MCP 等协议)
不同系统之间的连接需要标准协议(比如 MCP——Model Context Protocol,模型上下文协议)。框架实现了这些协议,让智能体能和外部工具"即插即用"。
4. 一个具体例子:搭一个"天气小助手"
不用框架,你可能要写:
// 伪代码:没有框架的世界
const text = "北京天气怎么样";
const intent = llm.analyze(text); // 让模型理解意图
if (intent.action === "query_weather") {
const data = await fetch(`/api/weather?city=${intent.city}`);
const answer = llm.generate(data, text); // 把结果组织成人话
return answer;
}
用了框架(以 DSH/Cordis 风格示意):
// 伪代码:有框架的世界
ctx.set('weather', weatherApi); // 注册工具(余效应供给)
// 注册一个"天气插件"作为组件
ctx.use({
inject: ['weather'], // 声明我需要天气服务
apply(ctx) {
ctx.commands.register('天气 <city>', async (city) => {
const data = await ctx.weather.query(city); // 直接用
return `☀️ ${city} 今天 ${data.condition}`;
});
},
});
区别在哪?
- 没有框架:每一步流程都要你手写,工具一多就乱
- 有框架:你只声明"我需要什么、我提供什么",框架负责连接、调度、回收
5. 从"助手"到"自演化"
传统的智能体框架,组件是开发时写死、运行时不变的。
但未来(也是这篇论文的核心动机之一)智能体会这样工作:
- 智能体发现自己缺少某个工具
- 它自己写一个新工具(或者让另一个智能体写)
- 它把新工具动态安装到正在运行的框架上
- 用一段时间发现不好用,再动态卸载,换一个更好的
这就是"自演化智能体":运行中的系统自己修改自己。
这听起来很酷,但也很危险——如果装上的东西拆不掉、或者拆的时候把别的东西弄坏了,系统就会崩溃。要解决这个问题,就需要我们第一章第 3 节的主题:动态组合。
关键点回顾
- 智能体 = 感知 → 思考 → 行动 的循环
- 大模型只是"大脑",框架负责配"身体"
- 框架的五大职责:工具、权限、记忆、编排、连接
- 未来的智能体会自我修改组件 → 必须依赖"动态组合"
🚀 下一节:"为什么需要动态组合"——看看现在的软件为什么做不到"装上拆下不重启",以及这有多重要。
自测题 · 智能体框架的基本思想
完成作答后点击「提交答案」,可以查看对错与解析。
