摘要
理解 AI Agent 的核心架构是开发 Agent 系统的前提。本文将 AI Agent 类比为人体的三个核心器官——大脑(LLM 模型层)、双手(工具调用层)和海马体(记忆系统层),从架构设计、交互机制、数据流三个维度深度拆解"模型+工具+记忆"的三位一体架构。分析三者之间的协作时序、状态同步策略和常见设计陷阱,给出可落地的架构设计参考。面向希望深入理解 Agent 内部机制的 AI 应用开发者和架构师。
📌 经典原理,长期适用:本文讲解的 Agent 核心架构原理不依赖特定框架或模型版本,属于 Agent 工程化的基础理论,长期有效。涉及的具体框架 API 以 2026 年 9 月版本为准。
文章目录

图:Agent三位一体架构总览图
一、为什么用"三位一体"来理解 Agent?
1.1 一个直觉类比
人类的智能行为不是单一器官完成的。你问"明天北京天气怎么样"——大脑负责理解问题并规划"需要查天气",双手负责拿起手机打开天气 App,海马体负责记住"你明天要去北京出差"这个上下文。
AI Agent 的运作方式几乎一模一样:
| 人类器官 | Agent 组件 | 核心职责 | 技术实现 |
|---|---|---|---|
| 大脑(前额叶) | LLM 模型层 | 理解、推理、规划、决策 | GPT-5 / Claude / DeepSeek |
| 双手 | 工具调用层 | 与外部世界交互 | Function Calling / MCP |
| 海马体 | 记忆系统层 | 存储与回忆上下文 | 向量数据库 / 上下文管理 |
1.2 为什么不是"两部分"或"四部分"
为什么不是两部分(模型+工具)? 因为没有记忆的 Agent 就像"失忆症患者"——每次对话都从零开始,无法积累经验,无法保持长期上下文。
为什么不是四部分? 有人主张加一个"规划层"作为独立组件。但规划本质上是 LLM 的核心能力,不需要独立为第四个组件。强行拆分反而增加了系统复杂度。
三位一体的核心在于"循环"——三个组件不是线性串联(模型→工具→记忆),而是在一个循环中持续交互:模型读取记忆→规划→调用工具→工具返回结果→模型反思→更新记忆→继续规划。
图:Agent 三位一体架构的核心循环关系
二、模型层:Agent 的大脑
2.1 LLM 在 Agent 中的角色
LLM 在 Agent 中承担四个核心职责:
| 职责 | 描述 | 对应人类认知 |
|---|---|---|
| 意图理解 | 理解用户输入的真正含义 | 语言理解 |
| 任务规划 | 将复杂目标分解为可执行步骤 | 前额叶规划 |
| 工具选择 | 决定调用什么工具、传什么参数 | 工具选择 |
| 结果评估 | 判断工具返回结果是否满足需求 | 反思与评估 |
2.2 不同模型在 Agent 场景下的能力差异

图:四大主流模型在 Agent 场景下的能力对比
关键差异分析:
推理能力决定 Agent 的"规划质量"——面对复杂多步任务,强推理模型能制定更合理的执行计划。GPT-5 和 Claude-4 在这一维度领先。
工具调用决定 Agent 的"执行可靠性"——JSON Schema 约束的准确性、参数填充的完整度。Claude-4 的 Function Calling 稳定性最高。
上下文管理决定 Agent 的"记忆容量"——上下文窗口越长,能处理的任务越复杂。Claude-4 的 200K 窗口在长任务场景下有优势。
2.3 模型层的工程设计
选择模型只是第一步,如何"用好"模型才是关键。以下是模型层的三个工程要点:
要点一:System Prompt 设计
System Prompt 是 Agent 的"性格设定"。它决定了 Agent 的角色、行为边界和输出风格。
SYSTEM_PROMPT = """你是一个数据分析助手,具备以下能力:
1. 查询数据库获取数据
2. 执行统计分析
3. 生成可视化报告
工作原则:
- 收到任务后先制定执行计划
- 每一步执行后评估结果,决定是否继续
- 如果工具调用失败,尝试替代方案
- 不确定的信息要明确标注
输出要求:
- 执行计划用编号列表
- 数据结果用表格
- 最终结论加粗
"""
这个 System Prompt 定义了 Agent 的角色、能力、工作原则和输出格式。在 Agent 架构中,System Prompt 属于"模型层配置",但它直接影响 Agent 的所有行为。
要点二:温度(Temperature)参数
Agent 场景下,温度参数的选择与 ChatBot 不同:
| 场景 | 建议温度 | 原因 |
|---|---|---|
| 任务规划 | 0.0-0.3 | 需要确定性,避免"创造性"跑偏 |
| 工具调用 | 0.0 | 参数必须精确,不能"创造"参数值 |
| 内容生成 | 0.5-0.7 | 需要一定的创造性 |
| 代码生成 | 0.0-0.2 | 代码必须准确 |
要点三:多模型路由
生产级 Agent 不应该只用一个模型。根据任务复杂度路由到不同模型,是成本控制的关键:
def route_model(task_complexity: str, task_type: str) -> str:
"""根据任务特征选择模型"""
if task_complexity == "high":
return "gpt-5" # 复杂推理用强模型
elif task_type == "code":
return "claude-4-sonnet" # 代码用 Claude
elif task_type == "simple_qa":
return "deepseek-v4" # 简单问答用低成本模型
else:
return "gpt-5-mini" # 默认用中等模型
三、工具调用层:Agent 的双手
3.1 工具调用的三种模式
| 模式 | 描述 | 优点 | 缺点 | 典型框架 |
|---|---|---|---|---|
| Function Calling | 模型原生工具调用 | 最稳定、参数准确 | 绑定特定模型 | OpenAI / Anthropic |
| MCP 协议 | 标准化工具协议 | 跨框架复用 | 生态尚在发展 | OpenClaw |
| Prompt 注入 | 在 Prompt 中描述工具 | 模型无关 | 最不稳定 | 早期 LangChain |
图:Function Calling 与 MCP 协议的时序对比
3.2 工具设计原则
工具设计不是"定义个函数就行"。好的工具设计能大幅提升 Agent 的决策准确率,坏的工具设计会让 Agent 频繁出错。
原则一:粒度适中
# ❌ 太细:Agent 需要调用 3 次才能完成一个操作
@tool
def get_order_id(customer_name: str) -> str:
"""根据客户名获取订单ID"""
@tool
def get_order_status(order_id: str) -> str:
"""根据订单ID获取状态"""
@tool
def cancel_order(order_id: str) -> bool:
"""取消订单"""
# ✅ 适中:一个工具完成完整操作
@tool
def find_and_cancel_order(customer_name: str) -> dict:
"""根据客户名查找订单并取消,返回取消结果"""
order_id = get_order_id(customer_name)
status = get_order_status(order_id)
if status == "shipped":
return {"success": False, "reason": "已发货,无法取消"}
return cancel_order(order_id)
原则二:描述清晰
工具描述是 Agent 选择工具的"唯一依据"。描述不清晰,Agent 就会选错工具或传错参数。
# ❌ 描述模糊
@tool
def search(query: str) -> str:
"""搜索"""
# ✅ 描述清晰
@tool
def search_web(query: str, max_results: int = 5) -> list:
"""搜索互联网获取最新信息。适用于需要实时数据、新闻、天气、股价等场景。
参数:
- query: 搜索关键词,建议10-30字
- max_results: 返回结果数量,默认5条
返回:搜索结果列表,每条包含标题、摘要、链接
"""
原则三:错误可恢复
@tool
def query_database(sql: str) -> dict:
"""执行SQL查询"""
try:
result = db.execute(sql)
return {"success": True, "data": result}
except ConnectionError:
return {"success": False, "error": "数据库连接失败", "retry": True}
except SyntaxError as e:
return {"success": False, "error": f"SQL语法错误: {e}", "retry": False}
工具返回的 retry 字段告诉 Agent:“这个错误值得重试"还是"这个错误重试也没用”。这种设计让 Agent 做出更智能的错误处理决策。
3.3 工具管理的演进
图:Agent 工具管理的演进路径
- 阶段1:工具直接写死在代码里,增删工具需要改代码
- 阶段2:工具通过配置文件(YAML/JSON)注册,增删工具改配置即可
- 阶段3:Agent 运行时动态发现可用工具,按需加载
- 阶段4:MCP 协议标准化工具接口,跨框架复用
- 阶段5:Agent 根据需求自己创建临时工具(前沿研究方向)
2026 年的主流框架已经进入阶段3-4。OpenClaw 的 Skill 系统是阶段3的典型代表,MCP 的普及推动了阶段4的发展。
四、记忆系统层:Agent 的海马体
4.1 为什么 Agent 需要记忆?
一个没有记忆的 Agent 就像一个"每次都从零开始"的实习生。你告诉它"用中文回答",下一轮它就忘了。你跟它讨论了半小时的方案,新会话里它什么都不知道。
Agent 的记忆系统解决三个问题:
| 问题 | 描述 | 记忆类型 |
|---|---|---|
| 当前推理需要上下文 | “用户刚才说了什么?” | 工作记忆 |
| 会话内的状态保持 | “我们讨论到第几步了?” | 会话记忆 |
| 跨会话的知识积累 | “上次用户说他偏好简洁回答” | 长期记忆 |
4.2 三层记忆架构
图:Agent 三层记忆系统架构
工作记忆(Working Memory):
工作记忆就是 LLM 的当前推理上下文——System Prompt + 最近几轮对话 + 工具返回结果。它的容量受限于模型的上下文窗口。
# 工作记忆的管理
class WorkingMemory:
def __init__(self, max_tokens: int = 128000):
self.messages = []
self.max_tokens = max_tokens
self.current_tokens = 0
def add_message(self, message: dict):
"""添加消息到工作记忆"""
tokens = count_tokens(message["content"])
if self.current_tokens + tokens > self.max_tokens:
self._compress() # 超出窗口,触发压缩
self.messages.append(message)
self.current_tokens += tokens
def _compress(self):
"""压缩策略:旧消息摘要 + 保留最近N条"""
old_messages = self.messages[:-5] # 保留最近5条
recent = self.messages[-5:]
summary = llm_summarize(old_messages)
self.messages = [
{"role": "system", "content": f"之前对话摘要:{summary}"}
] + recent
self.current_tokens = count_tokens(str(self.messages))
会话记忆(Session Memory):
会话记忆保存一次完整对话的所有历史。当工作记忆超出窗口时,旧消息被压缩后存入会话记忆。会话结束时,有价值的信息被提取到长期记忆。
长期记忆(Long-term Memory):
长期记忆是 Agent 跨会话的知识库。通常用向量数据库(如 Pinecone、Chroma)实现,存储用户偏好、历史决策、知识沉淀等。
4.3 记忆管理的核心挑战
挑战一:什么时候该写入长期记忆?
不是所有对话内容都值得记住。"今天天气怎么样"不需要写入长期记忆,但"用户偏好用中文回答"需要。
def should_remember(content: str) -> bool:
"""判断内容是否值得写入长期记忆"""
# 启发式规则
remember_signals = [
"用户偏好", "重要决策", "项目背景",
"记住这个", "以后都用", "别忘了"
]
return any(signal in content for signal in remember_signals)
挑战二:什么时候该检索长期记忆?
不是每轮对话都需要检索长期记忆。无脑检索会浪费 Token、降低响应速度。
def should_retrieve(user_input: str) -> bool:
"""判断是否需要检索长期记忆"""
# 需要检索的信号
retrieve_signals = [
"上次", "之前", "你还记得", "我们讨论过",
"我的偏好", "历史"
]
return any(signal in user_input for signal in retrieve_signals)
挑战三:什么时候该遗忘?
长期记忆不是越多越好。过时的信息会干扰 Agent 的决策。需要设计"遗忘机制"——定期清理不再相关、已过时的记忆。
def forget_outdated(memory_store, current_time):
"""定期清理过时记忆"""
for memory in memory_store:
age = current_time - memory.created_at
if age > timedelta(days=90): # 超过90天
if memory.relevance_score < 0.3: # 相关性低于阈值
memory_store.delete(memory.id)
五、三位一体的协作机制
5.1 完整的任务执行时序
图:Agent 完整任务执行的端到端时序
5.2 三层之间的状态同步
三层组件之间的状态同步是 Agent 工程化中最容易出问题的地方。常见故障模式:
| 故障 | 原因 | 后果 | 解决方案 |
|---|---|---|---|
| 记忆不一致 | 工作记忆和会话记忆未同步 | Agent "忘记"刚才说的话 | 每轮推理后同步工作→会话 |
| 工具结果丢失 | 工具返回结果未写入工作记忆 | Agent 重复调用同一工具 | 工具结果立即写入工作记忆 |
| 长期记忆污染 | 无价值信息写入长期记忆 | 检索结果噪声多 | 写入前过滤,定期清理 |
| 上下文膨胀 | 所有信息都留在工作记忆 | Token 超限、成本飙升 | 主动压缩 + 丢弃策略 |
5.3 架构设计的状态图
图:Agent 状态机的完整生命周期

图:Agent三位一体组件协作的全景示意图
六、常见架构设计陷阱
6.1 陷阱一:工具过载
现象:把所有可能的工具一次性塞给模型,导致 System Prompt 超长、模型选错工具。
根因:没有工具加载策略,所有工具始终可用。
解决方案:动态工具加载——根据任务类型只加载相关工具。
# 按任务类型分组工具
TOOL_GROUPS = {
"data_analysis": ["query_db", "statistical_analysis", "generate_chart"],
"content_creation": ["search_web", "write_article", "format_markdown"],
"dev_ops": ["check_logs", "restart_service", "run_script"],
}
def get_tools_for_task(task_type: str) -> list:
"""根据任务类型返回相关工具集"""
return TOOL_GROUPS.get(task_type, [])
6.2 陷阱二:记忆无限膨胀
现象:长期记忆越积越多,检索质量持续下降。
根因:没有遗忘机制和记忆评分策略。
解决方案:记忆分级 + 定期清理。高频访问的记忆保留,低频访问且过时的记忆遗忘。
6.3 陷阱三:线性思维链
现象:Agent 按固定步骤执行,遇到异常时不知道调整计划。
根因:System Prompt 规定了固定执行流程。
解决方案:给 Agent 反思和重新规划的能力。
七、适用边界
7.1 三位一体架构的适用场景
✅ 适合:
- 需要多步推理的复杂任务
- 需要调用外部工具的业务流程
- 需要跨会话保持上下文的应用
- 需要自主决策的场景
7.2 不适用场景
⚠️ 不适合:
- 单轮问答(用 RAG 就够了,不需要 Agent 架构)
- 固定流程的自动化(用传统工作流引擎更可靠)
- 对延迟极敏感的场景(Agent 循环推理会增加延迟)
- 对确定性要求极高的场景(LLM 推理有随机性)
7.3 架构选择的决策建议
| 场景 | 推荐架构 | 理由 |
|---|---|---|
| 知识问答 | RAG(非Agent) | 单轮检索足够,不需要循环 |
| 多步信息查询 | 轻量 Agent(模型+工具) | 不需要长期记忆 |
| 个性化助手 | 完整三位一体 | 需要跨会话记忆用户偏好 |
| 业务流程自动化 | 完整三位一体 | 需要工具调用+状态管理 |
| 数据分析 | 轻量 Agent(模型+工具) | 不需要长期记忆但需要工具 |
八、总结

图:Agent三位一体架构核心设计要点总结图
8.1 核心观点
本文将 AI Agent 的核心架构拆解为"三位一体"——模型(大脑)+ 工具(双手)+ 记忆(海马体)。三个组件不是线性串联,而是在一个循环中持续交互:模型读取记忆→规划→调用工具→评估结果→更新记忆→继续规划。
三层之间最关键的工程挑战是状态同步——工作记忆、会话记忆和长期记忆之间的协调策略决定了 Agent 的实际表现。记忆不是越多越好、工具不是越多越好,关键在于"按需"——按需加载工具、按需检索记忆、按需写入记忆。
8.2 下篇预告
下一篇《从 Prompt Engineering 到 Agent Engineering:开发范式的代际跃迁》将从架构层面走向开发方法论,分析 Agent 时代的开发范式如何从"调 Prompt"进化为"设计系统",以及这种范式转变对开发者技能树的影响。
参考资料
- OpenAI - Function Calling Guide
- Anthropic - MCP Specification
- ReAct: Synergizing Reasoning and Acting in Language Models
- Memory Systems for AI Agents: A Survey
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/sinat_41617212/article/details/164829896




