从概念到架构,一文读懂智能体的过去、现在与未来

举报
yd_269944482 发表于 2026/10/31 01:21:53 2026/10/31
【摘要】 AI Agent:从概念到架构,一文读懂智能体的过去、现在与未来> 当 LLM 不再只是"你问我答"的聊天框,而是能够自主规划、调用工具、持续记忆的智能体时,软件的形态正在发生根本性变化。这篇文章带你从零理解 AI Agent 的核心架构、设计模式与工程实践。## 一、什么是 AI Agent?先说一个最朴素的定义:> **AI Agent = LLM + 规划能力 + 工具调用 + 记忆*...

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 架构实践总结而成,涵盖概念、架构、实现与趋势。如有疑问或讨论,欢迎交流。*

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。