从概念到架构,一文读懂智能体的过去、现在与未来
AI Agent:从概念到架构,一文读懂智能体的过去、现在与未来
> 当 LLM 不再只是"你问我答"的聊天框,而是能够自主规划、调用工具、持续记忆的智能体时,软件的形态正在发生根本性变化。这篇文章带你从零理解 AI Agent 的核心架构、设计模式与工程实践。
## 一、什么是 AI Agent?
先说一个最朴素的定义:
> **AI Agent = LLM + 规划能力 + 工具调用 + 记忆**
传统的 LLM 交互模式是"一问一答"——你输入一段文字,模型返回一段文字,交互就结束了。这像是一个知识渊博但手脚被绑住的顾问:能说不能做。
AI Agent 打破了这个限制。它不仅能"说",还能"做":接收一个目标后,自主拆解步骤,调用外部工具(搜索、代码执行、数据库查询、API 调用),根据中间结果调整计划,直到完成目标。
用一个类比:
| | 传统 LLM | AI Agent |
|---|---------|----------|
| 角色 | 顾问 | 实习生 |
| 交互 | 单轮问答 | 多轮自主执行 |
| 能力 | 只有语言 | 语言 + 工具 + 记忆 |
| 典型场景 | "帮我翻译这段话" | "帮我调研竞品并写一份分析报告" |
## 二、AI Agent 的四大核心组件
一个完整的 Agent 系统通常由以下四个部分组成:
### 1. 规划(Planning)
规划是 Agent 的"大脑前额叶"——负责把一个大目标拆解为可执行的子步骤。
**ReAct 模式**(Reasoning + Acting)是最经典的规划范式:
```
思考:用户想要了解华为云 ECS 的价格,我需要先查询 ECS 的规格列表
行动:调用 search_flavors()
观察:返回了 s6.large.2、s6.xlarge.2 等规格
思考:现在我需要查询每个规格的价格
行动:调用 query_price("s6.large.2")
观察:价格为 0.34 元/小时
思考:信息已足够,可以组织回复了
```
这个"思考→行动→观察"的循环就是 Agent 的基本执行单元。每一轮中,LLM 先推理下一步该做什么(Reasoning),然后执行对应的工具调用(Acting),再根据返回结果进入下一轮。
更复杂的规划还包括:
- **任务分解(Task Decomposition)**:将复杂任务拆成树状子任务
- **反思与自我修正(Reflection)**:执行后评估结果质量,不满足则回退重试
- **计划重排(Replanning)**:执行中发现原计划不可行,动态调整
### 2. 工具调用(Tool Use)
工具是 Agent 的"手脚"——让它能与外部世界交互。
常见的工具类型:
```
┌─────────────────────────────────────────┐
│ Agent 工具箱 │
├──────────────┬──────────────────────────┤
│ 信息获取 │ Web 搜索、知识库检索、 │
│ │ 数据库查询、文件读取 │
├──────────────┼──────────────────────────┤
│ 动作执行 │ 发邮件、创建工单、 │
│ │ 调用 API、部署服务 │
├──────────────┼──────────────────────────┤
│ 代码执行 │ Python 沙箱、Shell 命令、│
│ │ SQL 执行 │
├──────────────┼──────────────────────────┤
│ 多模态 │ 图像生成、语音合成、 │
│ │ 文件解析 │
└──────────────┴──────────────────────────┘
```
工具调用的关键在于**接口描述**。Agent 需要知道每个工具做什么、需要什么参数、返回什么格式。这通常通过函数签名或 JSON Schema 来描述:
```python
@tool
def search_flavors(region: str, instance_type: str = "general") -> list:
"""
查询华为云 ECS 可用规格列表。
Args:
region: 区域 ID,如 cn-north-4
instance_type: 实例类型,如 general、memory、compute
Returns:
规格列表,每项包含 flavor_id、vcpu、memory_gb
"""
...
```
LLM 根据这段描述就能判断"什么时候该调用这个工具"以及"参数怎么填"。
### 3. 记忆(Memory)
记忆让 Agent 不再是"金鱼脑"——每次对话都从零开始。
记忆通常分两层:
**短期记忆(Working Memory)**
- 就是当前对话的上下文窗口
- 存放最近的思考链、工具调用结果、中间状态
- 受限于 LLM 的 context window 大小(如 128K tokens)
- 任务结束后清空
**长期记忆(Long-term Memory)**
- 跨会话持久化保存
- 通常用向量数据库实现(如 Chroma、Milvus、OpenViking)
- 存储形式:文本 chunk + embedding 向量
- 检索方式:语义相似度搜索(top-k)
```
用户:"上次我们讨论的那个部署方案,后来怎么样了?"
│
├── 短期记忆:当前对话上下文
│
└── 长期记忆:向量检索 "部署方案" → 找到 3 天前的对话片段
→ 注入到 prompt 中 → Agent "想起"了之前的讨论
```
长期记忆的工程实现通常是这样的:
1. **写入**:对话结束后,将内容切分为 chunk,计算 embedding,存入向量数据库
2. **检索**:新对话开始时,用当前 query 的 embedding 在向量库中做 top-k 相似搜索
3. **注入**:将检索到的历史片段拼接到 system prompt 或 context 中
4. **遗忘**:设置 TTL 或基于重要性评分淘汰低价值记忆
### 4. 行动循环(Action Loop)
把以上三个组件串起来,就是 Agent 的核心执行循环:
```
┌──────────────────────────────────────────┐
│ Agent 执行循环 │
│ │
│ 用户目标 │
│ │ │
│ ▼ │
│ ┌─────────┐ ┌──────────┐ │
│ │ 规划器 │───→│ 选择工具 │ │
│ │ (LLM) │ │ │ │
│ └─────────┘ └────┬─────┘ │
│ ▲ │ │
│ │ ▼ │
│ ┌─────────┐ ┌──────────┐ │
│ │ 记忆更新 │←───│ 执行工具 │ │
│ │ │ │ + 观察 │ │
│ └─────────┘ └──────────┘ │
│ │ │
│ ▼ │
│ 目标完成?───No──→ 回到规划器 │
│ │ │
│ Yes │
│ ▼ │
│ 返回结果 │
└──────────────────────────────────────────┘
```
每一轮循环中,Agent 都在回答三个问题:
1. **我现在在哪?**(观察当前状态和已有结果)
2. **我下一步该做什么?**(规划并选择工具)
3. **做完之后情况如何?**(评估结果,决定继续还是结束)
## 三、主流 Agent 架构模式
### 模式一:单 Agent + 工具集
最简单也最常见。一个 LLM 实例配备一组工具,通过 ReAct 循环完成任务。
```
用户 → [LLM + 工具集] → 结果
```
**适用场景**:任务单一、工具数量适中(< 20 个)、不需要并行处理。
**典型代表**:ChatGPT 的函数调用、Claude 的 tool use。
**优点**:实现简单、调试容易、延迟低。
**缺点**:工具太多时 LLM 选择准确率下降;复杂任务容易陷入循环。
### 模式二:多 Agent 协作
把一个大 Agent 拆成多个专业小 Agent,各自负责一个领域,通过消息传递协作。
```
┌───────────┐
│ 路由 Agent │
└─────┬─────┘
┌────────┼────────┐
▼ ▼ ▼
┌─────────┐ ┌──────┐ ┌──────────┐
│ 研究 Agent││编码 │ │ 审查 Agent │
│(搜索+分析)││Agent │ │(测试+review)│
└─────────┘ └──────┘ └──────────┘
```
**适用场景**:复杂任务需要多种专业能力、不同步骤可以并行。
**典型代表**:MetaGPT(模拟软件团队)、AutoGen(多 Agent 对话框架)。
**关键设计点**:
- **角色定义**:每个 Agent 有明确的职责边界
- **通信协议**:Agent 之间如何传递信息(共享黑板、消息队列、直接对话)
- **冲突处理**:两个 Agent 意见不一致时谁说了算
### 模式三:Plan-and-Execute
先由规划 Agent 生成完整计划,再由执行 Agent 逐步执行。规划和执行分离。
```
用户目标
│
▼
┌──────────┐ ┌───────────────────┐
│ 规划 Agent │──→ │ Step 1: 查询数据 │
│ 生成计划 │ │ Step 2: 分析数据 │
└──────────┘ │ Step 3: 生成报告 │
│ Step 4: 发送邮件 │
└───────────────────┘
│
▼
┌──────────┐
│ 执行 Agent │
└──────────┘
```
**适用场景**:任务步骤明确、需要全局视角、执行步骤可并行。
**典型代表**:LangChain 的 Plan-and-Execute、BabyAGI。
**优点**:减少中间步骤的 LLM 调用次数(规划一次,执行多次),效率更高。
**缺点**:计划可能不适应执行中的变化,需要 replanning 机制。
### 模式四:Router + Specialist
一个路由 Agent 负责理解意图并分发,多个专家 Agent 各自处理特定类型请求。
```
用户请求
│
▼
┌──────────┐
│ 路由 Agent │ ── "这是代码问题" ──→ 编码 Agent
│ 意图分类 │ ── "这是运维问题" ──→ 运维 Agent
└──────────┘ ── "这是财务问题" ──→ 财务 Agent
```
**适用场景**:客服系统、多功能助手、不同领域需要不同工具集。
**优点**:每个专家 Agent 只需加载相关工具,减少干扰;可独立优化。
## 四、Agent 的工程挑战
讲完架构,来聊聊真实落地时踩过的坑。
### 挑战 1:幻觉与工具误调
LLM 有时会"编造"一个不存在的工具名,或者传入格式错误的参数。
**应对策略**:
- 工具调用前做参数校验(JSON Schema validation)
- 工具不存在时返回明确错误,而非静默忽略
- 限制单轮可调用的工具集合(减少选择空间)
- 设置最大循环次数,防止无限重试
### 挑战 2:上下文窗口溢出
复杂任务可能产生大量中间结果,超出 context window。
**应对策略**:
- **摘要压缩**:定期对历史对话做摘要,用短文本替代长原文
- **分层记忆**:近期对话保留全文,较早的只保留摘要,更早的依赖向量检索
- **选择性遗忘**:根据相关性评分丢弃低价值上下文
### 挑战 3:成本与延迟
每轮循环至少一次 LLM 调用,复杂任务可能 10-50 轮,成本和延迟叠加。
**应对策略**:
- **模型分级**:规划用强模型(GPT-4、Claude),简单判断用小模型
- **缓存中间结果**:相同子任务不重复调用
- **并行执行**:独立子步骤同时发起工具调用
- **提前终止**:设置质量阈值,达到即可返回,不必"完美"
### 挑战 4:错误恢复
工具调用失败、API 超时、返回格式异常——Agent 需要能从错误中恢复。
**应对策略**:
```python
try:
result = tool.execute(params)
except ToolError as e:
# 方案 A:重试(带退避)
retry_with_backoff(tool, params)
# 方案 B:换一个工具
alternative_tool.execute(params)
# 方案 C:告诉 LLM 失败了,让它自己想办法
feed_error_to_llm_and_replan(e)
```
最关键的原则:**永远不要让 Agent 静默失败**。错误信息要回到 LLM 的上下文中,让它有机会调整策略。
### 挑战 5:安全与权限控制
Agent 能调用工具就意味着能执行真实操作——发邮件、改数据库、部署服务。这带来了安全风险。
**应对策略**:
- **最小权限原则**:每个 Agent 只授予完成任务所需的最小工具集
- **人工确认(Human-in-the-loop)**:高风险操作(删除、支付、部署)前暂停等待人工批准
- **沙箱执行**:代码执行类工具在隔离环境中运行
- **审计日志**:记录所有工具调用,可追溯
```
┌─────────────────────────────────────┐
│ 安全执行框架示例 │
│ │
│ Agent 决定: 删除数据库表 users │
│ │ │
│ ▼ │
│ 风险评估: 🔴 高风险 (DELETE 操作) │
│ │ │
│ ▼ │
│ 暂停 → 通知人工审批 │
│ │ │
│ ▼ │
│ 人工确认? ──No──→ 拒绝,返回错误 │
│ │ │
│ Yes │
│ ▼ │
│ 执行删除 + 记录审计日志 │
└─────────────────────────────────────┘
```
## 五、从架构到实现:一个最小可用 Agent
纸上谈兵不如动手。下面用 Python 展示一个最小但完整的 Agent 实现:
```python
import json
from openai import OpenAI
client = OpenAI()
# --- 定义工具 ---
tools = [
{
"type": "function",
"function": {
"name": "search_web",
"description": "搜索互联网获取最新信息",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "搜索关键词"}
},
"required": ["query"]
}
}
},
{
"type": "function",
"function": {
"name": "calculate",
"description": "执行数学计算",
"parameters": {
"type": "object",
"properties": {
"expression": {"type": "string", "description": "数学表达式"}
},
"required": ["expression"]
}
}
}
]
# --- 工具实现 ---
def execute_tool(name, args):
if name == "search_web":
return f"搜索结果: 关于 '{args['query']}' 的相关信息..."
elif name == "calculate":
try:
return str(eval(args["expression"]))
except Exception as e:
return f"计算错误: {e}"
# --- Agent 主循环 ---
def run_agent(user_message, max_steps=10):
messages = [
{"role": "system", "content": "你是一个有用的助手,可以搜索网络和进行计算。"},
{"role": "user", "content": user_message}
]
for step in range(max_steps):
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools
)
msg = response.choices[0].message
messages.append(msg)
# 如果没有工具调用,说明 Agent 完成了任务
if not msg.tool_calls:
return msg.content
# 执行所有工具调用
for tool_call in msg.tool_calls:
result = execute_tool(
tool_call.function.name,
json.loads(tool_call.function.arguments)
)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
return "达到最大步数限制,Agent 未能完成任务。"
# --- 运行 ---
result = run_agent("华为云 ECS s6.large.2 的月费用是多少?假设每天运行 24 小时,一个月 30 天。")
print(result)
```
这段代码不到 80 行,但已经包含了 Agent 的全部核心要素:LLM 推理、工具定义、工具执行、多轮循环、终止条件。
## 六、Agent 框架生态
如果你不想从零造轮子,以下是主流的 Agent 开发框架:
| 框架 | 语言 | 特点 | 适用场景 |
|------|------|------|----------|
| **LangChain** | Python/JS | 生态最全,组件丰富 | 快速原型、通用场景 |
| **LangGraph** | Python | 基于图的状态机,支持复杂流程 | 多 Agent 协作、复杂工作流 |
| **AutoGen** | Python | 微软出品,多 Agent 对话 | 多 Agent 协作研究 |
| **CrewAI** | Python | 角色扮演式多 Agent | 模拟团队协作 |
| **Semantic Kernel** | C#/Python | 微软出品,企业级 | .NET 生态集成 |
| **Dify** | Python | 可视化 Agent 编排 | 低代码场景 |
选框架的建议:**先从 LangChain 入手理解概念,然后根据实际需求选择**。如果你的工作流有复杂的状态流转和条件分支,LangGraph 是更好的选择;如果需要模拟团队协作,CrewAI 更直观。
## 七、AI Agent 的未来趋势
### 趋势 1:从单模态到全模态
未来的 Agent 不仅能处理文本,还能原生理解图像、视频、音频、代码、3D 模型。这将极大扩展 Agent 的应用边界——比如分析 UI 截图自动生成前端代码,或观看操作视频自动生成自动化脚本。
### 趋势 2:从云端到端侧
随着小模型能力提升和推理优化(量化、蒸馏),Agent 正在从云端走向本地设备。端侧 Agent 的优势:低延迟、隐私保护、离线可用。手机、PC、IoT 设备都可能成为 Agent 的运行平台。
### 趋势 3:从工具调用到世界模型
当前 Agent 通过工具与外部世界交互,本质上是"被动"的——需要人类预先定义好工具接口。未来的方向是让 Agent 拥有"世界模型"——对环境有内在理解,能预测行动后果,自主探索新工具和新方法。
### 趋势 4:Agent 之间的经济网络
当多个 Agent 各有所长,它们之间可以形成协作网络甚至经济市场:Agent A 擅长数据分析,Agent B 擅长报告生成,Agent C 需要完成一个任务时可以"雇佣" A 和 B。这类似于一个 AI 驱动的自由职业市场。
### 趋势 5:可解释性与对齐
随着 Agent 获得更多自主权,"它为什么这么做"变得越来越重要。未来的 Agent 需要内置可解释性——每一步决策都能追溯到具体的推理过程,而非黑箱。这对获得用户信任和满足监管要求都至关重要。
## 八、写在最后
AI Agent 不是魔法,它是 LLM + 工程设计的产物。理解了规划、工具、记忆、循环这四个核心组件,你就理解了所有 Agent 系统的骨架——不同的框架只是在骨架上长出不同的肌肉。
如果你正在考虑在自己的业务中引入 Agent,我的建议是:
1. **从单 Agent + 少量工具开始**——不要一上来就搞多 Agent 协作
2. **先解决工具定义和错误处理**——这是 80% 的工程量
3. **设置人工兜底**——Agent 出错时能平滑降级到人工处理
4. **建立评估体系**——用一组测试任务持续监控 Agent 表现
5. **关注成本**——Agent 的 LLM 调用次数远超普通 chatbot
Agent 技术还在快速演进,今天的最佳实践明天可能就被颠覆。但底层的思考框架——目标拆解、工具选择、状态管理、错误恢复——是不变的。掌握了这些,无论框架怎么换,你都能快速上手。
---
*本文由 AI Agent 架构实践总结而成,涵盖概念、架构、实现与趋势。如有疑问或讨论,欢迎交流。*
- 点赞
- 收藏
- 关注作者
评论(0)