AI Agent 的四大组成部分详解

📅 2026/6/29 22:12:57
AI Agent 的四大组成部分详解
从 LLM 到自主行动拆解智能体的核心架构目录组成部分总览大语言模型LLM—— Agent 的大脑规划模块 —— Agent 的思维能力记忆模块 —— Agent 的上下文管理工具集 —— Agent 的「超能力」总结3.1 组成部分总览如果把一个 AI Agent 比作一个人那么它的四大组成部分对应着人的四项核心能力组成部分类比核心职责大语言模型LLM 大脑理解、推理、生成语言规划模块Planning 思维拆解任务、制定策略、反思调整记忆模块Memory️ 记忆存储上下文、检索历史、积累经验工具集Tools 双手与外部世界交互、执行具体操作这四大模块协同工作让 Agent 从只会聊天的模型进化为能自主完成复杂任务的智能体。下面我们逐一深入。3.2 组成部分一大语言模型作用与地位大语言模型是 Agent 的核心引擎。它负责理解用户意图将自然语言指令解析为可执行的任务目标。推理与决策基于上下文信息判断下一步该做什么。生成输出产出文本、代码、计划、回复等。一句话概括没有 LLMAgent 就失去了智能的来源。LLM 决定了 Agent 的智力上限其他三个模块是让这份智力落地的放大器。当前主流选择截至 2026 年构建 Agent 的主流 LLM 选型如下模型提供商特点适用场景Claude (Opus / Sonnet)Anthropic强推理、长上下文200K、工具使用出色、安全性高复杂推理任务、代码生成、企业级 AgentGPT-4o / GPT-5OpenAI多模态、生态成熟、插件丰富通用 Agent、多模态任务Gemini 2.5 ProGoogle原生多模态、超长上下文1M、高性价比大规模文档分析、多模态 AgentDeepSeek-V3 / R1DeepSeek开源、推理能力强、成本低自部署 Agent、研究场景Qwen3 / Llama 4阿里 / Meta开源可定制、本地部署私有化部署、数据敏感场景选型建议追求最强推理 工具使用Claude Opus / Sonnet需要多模态能力GPT-5 或 Gemini需要私有化部署 成本控制DeepSeek 或 Qwen实际代码示例以下是一个使用 LLM 构建 Agent 的简单示例以 Anthropic SDK 为例import anthropic ​ client anthropic.Anthropic() ​ # 定义 Agent 的系统提示词 system_prompt 你是一个智能助手 Agent。你有以下能力 1. 分析用户需求 2. 制定执行计划 3. 调用工具完成任务 4. 根据结果调整策略 ​ 请始终先思考再行动。 ​ # Agent 主循环 def agent_run(user_task: str, tools: list[dict], max_steps: int 10): messages [{role: user, content: user_task}] ​ for step in range(max_steps): response client.messages.create( modelclaude-sonnet-4-6, systemsystem_prompt, messagesmessages, toolstools, max_tokens4096, ) ​ # 处理工具调用 if response.stop_reason tool_use: for block in response.content: if block.type tool_use: # 执行工具将结果返回给 LLM tool_result execute_tool(block.name, block.input) messages.append({ role: user, content: [{ type: tool_result, tool_use_id: block.id, content: tool_result, }] }) else: # 任务完成返回最终结果 return response.content[0].text ​ return 达到最大步数限制3.3 组成部分二规划模块为什么需要规划试想一下你让 Agent 帮我做一个电商网站。如果 Agent 没有规划能力它可能会直接开始写 HTML 代码——结果大概率是一团糟。规划模块让 Agent 能够拆解复杂任务将宏大目标分解为可执行的子任务。制定执行顺序确定先做什么、后做什么、哪些可以并行。动态调整执行中遇到问题能够重新规划。自我反思检查已完成的步骤发现遗漏或错误。规划是区分初级 Agent和高级 Agent的关键分水岭。两种主流规划方法方法一ReActReasoning Acting核心思想思考Thought→ 行动Action→ 观察Observation循环迭代。Thought: 我需要先了解项目结构 Action: 执行 ls 命令 Observation: 看到 src/, tests/, README.md ​ Thought: 项目有 src 目录我先看看里面的文件 Action: 执行 ls src/ Observation: 看到 main.py, utils.py, config.py ​ Thought: main.py 是入口我先读它 Action: 读取 src/main.py ...优点简单直观、易于实现、每个步骤可追踪。缺点缺乏全局规划容易走一步看一步陷入局部最优。代码示例def react_agent(task: str, tools: dict, max_steps: int 10): context f任务: {task}\n for step in range(max_steps): # 1. 思考 thought llm_think(context) context f\nThought {step1}: {thought} # 2. 行动 action llm_decide_action(context, tools) context f\nAction {step1}: {action} # 3. 观察 observation execute_action(action, tools) context f\nObservation {step1}: {observation} # 4. 判断是否完成 if llm_should_finish(context): return llm_generate_answer(context) return 未能在步数限制内完成任务方法二Plan-and-Solve先规划再执行核心思想先制定完整计划再逐步执行执行过程中可以修正。Step 1: 生成整体计划 ├── 1.1 了解项目结构和依赖 ├── 1.2 设计数据库模型 ├── 1.3 实现 API 接口 ├── 1.4 编写前端页面 └── 1.5 集成测试 ​ Step 2: 按计划执行 执行 1.1... 发现问题缺少配置文件 → 修正计划在 1.1 之后插入 创建配置文件 ​ Step 3: 执行过程中持续反思 检查点每个子任务完成后验证结果优点全局视角、效率更高、减少无效探索。缺点初始计划可能不准确需要较强的 LLM 推理能力。代码示例def plan_and_solve_agent(task: str, tools: dict): # 阶段一制定计划 plan llm_create_plan(task) print(f 初始计划:\n{plan}) results [] for i, step in enumerate(plan.steps): # 阶段二执行当前步骤 result execute_step(step, tools) results.append(result) # 阶段三反思与调整 if not result.success: print(f⚠️ 步骤 {i1} 失败: {result.error}) revised llm_revise_plan(plan, results, i) if revised.needs_change: plan revised.new_plan print(f 计划已更新:\n{plan}) # 阶段四检查点验证 if step.has_checkpoint: llm_verify_results(results[:i1], task) return llm_summarize(results, task)实际代码对比维度ReActPlan-and-Solve规划方式边想边做先规划再执行灵活性⭐⭐⭐⭐⭐ 极高⭐⭐⭐ 中等效率⭐⭐⭐ 可能绕路⭐⭐⭐⭐ 路径更短可解释性⭐⭐⭐⭐ 每步可追踪⭐⭐⭐⭐⭐ 计划清晰适用场景探索性任务、信息检索工程实现、多步骤项目Token 消耗较高多轮思考中等计划可复用选择建议你的任务是探索性的、不确定的 └── 是 → 用 ReAct灵活应变 └── 否 → 你的任务步骤清晰、目标明确 └── 是 → 用 Plan-and-Solve高效执行 └── 否 → 混合使用先制定粗略计划执行中用 ReAct 调整最佳实践现代高级 Agent如 Claude Code通常采用混合模式——先用 Plan-and-Solve 制定总体方案在具体执行每个子任务时切换到 ReAct 模式灵活应对。3.4 组成部分三记忆模块为什么记忆很重要没有记忆的 Agent 就像金鱼脑 对话一长就忘记之前说过什么 每次都要从头理解用户背景 无法从过去的错误中学习 换个对话窗口就完全失忆记忆模块让 Agent 能够跨越时间和对话保持连贯的认知。短期记忆Short-term Memory定义当前对话窗口内的上下文信息。实现方式对话历史将最近的用户消息和 Agent 回复拼接在 prompt 中滑动窗口当对话过长时保留最近 N 轮旧的被遗忘上下文压缩对历史对话做摘要用摘要替代原文class ShortTermMemory: def __init__(self, max_tokens: int 8000): self.messages [] self.max_tokens max_tokens def add(self, role: str, content: str): self.messages.append({role: role, content: content}) # 超出限制时自动压缩 while self._estimate_tokens() self.max_tokens: self._summarize_oldest() def _summarize_oldest(self): 将最早的几轮对话压缩为摘要 old_msgs self.messages[:4] summary llm_summarize(old_msgs) self.messages [ {role: system, content: f[早期对话摘要] {summary}} ] self.messages[4:] def get_context(self) - list[dict]: return self.messages长期记忆Long-term Memory定义跨对话、持久化的知识存储。实现方式方式原理适用场景向量数据库将文本转为向量按语义相似度检索知识库、文档问答知识图谱用实体-关系-实体三元组存储复杂关系推理结构化存储用户画像、偏好设置存数据库个性化、配置管理文件系统将关键信息写入文件持久化简单项目、个人助手import chromadb from chromadb.utils import embedding_functions class LongTermMemory: def __init__(self): self.client chromadb.PersistentClient(path./agent_memory) self.ef embedding_functions.DefaultEmbeddingFunction() self.collection self.client.get_or_create_collection( nameknowledge_base, embedding_functionself.ef, ) def remember(self, content: str, metadata: dict None): 存入长期记忆 doc_id fmem_{hash(content)} self.collection.add( documents[content], metadatas[metadata or {}], ids[doc_id], ) def recall(self, query: str, top_k: int 5) - list[str]: 检索相关记忆 results self.collection.query( query_texts[query], n_resultstop_k, ) return results[documents][0] if results[documents] else [] def forget(self, doc_id: str): 删除记忆 self.collection.delete(ids[doc_id])记忆架构图工作记忆是短期记忆和长期记忆的交汇点——它决定了 LLM 在当前推理中能看到什么信息。记忆模块的高级技巧1. 反思式记忆Reflective Memory不只是存储事实还存储反思——从经验中提炼的教训def reflective_memorize(experience: dict): # 存储原始经历 memory.store(experience, experience) # 让 LLM 反思并提炼教训 reflection llm_reflect(f 经历{experience} 请反思 1. 做了什么结果如何 2. 哪里做得好哪里可以改进 3. 下次遇到类似情况应该怎么做 ) # 存储反思比原始数据更有价值 memory.store(reflection, reflection, tags[lesson, improvement])2. 重要性加权记忆不是所有记忆都同等重要。给记忆打分优先保留重要信息def importance_weighted_store(content: str): # 让 LLM 评估这段信息的重要性1-10 score llm_score_importance(content) if score 8: memory.store_detail(content) # 完整存储 elif score 5: memory.store_summarized(content) # 摘要存储 else: memory.maybe_store(content) # 概率性存储3. 记忆的遗忘曲线模拟人脑的艾宾浩斯遗忘曲线让 Agent 的记忆管理更人性化def recall_with_decay(memory_id: str, current_time: float): mem memory.get(memory_id) elapsed current_time - mem.last_accessed # 艾宾浩斯遗忘曲线近似 retention math.exp(-elapsed / mem.halflife) if retention 0.1: memory.archive(memory_id) # 归档不再主动使用 return None # 刷新最后访问时间 memory.touch(memory_id) return mem.content3.5 组成部分四工具集工具是 Agent 的「超能力」LLM 本身只能生成文本。它不能❌ 读取文件❌ 执行代码❌ 搜索互联网❌ 调用 API❌ 操作数据库工具Tools赋予了 Agent 与外部世界交互的能力让它从只能聊进化为能做事。工具的定义与实现一个工具通常包含三个要素from typing import Any, Callable from dataclasses import dataclass dataclass class Tool: Agent 工具的标准化定义 name: str # 工具名称LLM 用它来识别 description: str # 功能描述帮助 LLM 判断何时使用 parameters: dict # 参数 JSON Schema function: Callable[..., Any] # 实际执行函数以 Anthropic SDK 的 tool use 格式为例tools [ { name: read_file, description: 读取指定路径的文件内容, input_schema: { type: object, properties: { file_path: { type: string, description: 文件的绝对路径 }, encoding: { type: string, default: utf-8, description: 文件编码格式 } }, required: [file_path] } }, { name: web_search, description: 在互联网上搜索信息返回相关结果列表, input_schema: { type: object, properties: { query: { type: string, description: 搜索关键词 }, num_results: { type: integer, default: 5, description: 返回结果数量 } }, required: [query] } } ]常用工具类型与实现Agent 工具集文件系统代码执行网络访问数据操作外部服务多模态读取文件写入文件搜索文件列出目录Python 解释器Shell 命令SQL 查询网页抓取API 调用搜索数据库读写JSON 解析CSV 处理邮件发送日历管理Slack 通知图片生成图片识别语音合成代码执行工具import subprocess import tempfile def execute_python(code: str, timeout: int 30) - dict: 在沙箱中执行 Python 代码 with tempfile.NamedTemporaryFile(modew, suffix.py, deleteFalse) as f: f.write(code) tmp_path f.name try: result subprocess.run( [python3, tmp_path], capture_outputTrue, textTrue, timeouttimeout, ) return { stdout: result.stdout, stderr: result.stderr, exit_code: result.returncode, } except subprocess.TimeoutExpired: return {error: f执行超时{timeout}秒} finally: os.unlink(tmp_path)API 调用工具import subprocess import tempfile def execute_python(code: str, timeout: int 30) - dict: 在沙箱中执行 Python 代码 with tempfile.NamedTemporaryFile(modew, suffix.py, deleteFalse) as f: f.write(code) tmp_path f.name try: result subprocess.run( [python3, tmp_path], capture_outputTrue, textTrue, timeouttimeout, ) return { stdout: result.stdout, stderr: result.stderr, exit_code: result.returncode, } except subprocess.TimeoutExpired: return {error: f执行超时{timeout}秒} finally: os.unlink(tmp_path)工具组合的实际案例以下是一个研究助手 Agent的工具组合示例——展示了多个工具如何协作完成一个复杂任务# 场景用户问 帮我调研一下 2025 年 AI Agent 框架的最新进展 # Agent 自动组合多个工具完成任务 research_flow [ # Step 1: 搜索 ToolCall(web_search, {query: AI Agent framework 2025 top tools}), ToolCall(web_search, {query: LangGraph CrewAI AutoGen 2025 comparison}), # Step 2: 读取搜索结果筛选高质量来源 ToolCall(web_fetch, {url: https://example.com/agent-comparison-2025}), ToolCall(web_fetch, {url: https://github.com/langchain-ai/langgraph}), # Step 3: 本地整理和分析 ToolCall(write_file, {path: /research/raw_notes.md, content: ...}), ToolCall(execute_python, {code: # 用代码分析 GitHub star 趋势 import requests repos [langgraph, crewAI, AutoGen] for repo in repos: data requests.get(fhttps://api.github.com/repos/{repo}).json() print(f{repo}: {data[stargazers_count]} stars) }), # Step 4: 生成最终报告 ToolCall(write_file, {path: /research/report.md, content: ...}), ]工具使用的最佳实践1. 工具描述要精确# ❌ 糟糕的描述 description: 搜索东西 # ✅ 优秀的描述 description: 在互联网上执行关键词搜索返回标题、URL 和摘要列表。 当你需要查找最新信息、事实核查、或获取训练数据截止日期之后的 信息时使用此工具。不要用于数学计算或代码执行。2. 错误处理要优雅def safe_tool_execute(tool_name: str, params: dict) - str: 统一的工具执行错误处理 try: result tool_registry[tool_name](**params) return json.dumps({success: True, data: result}) except FileNotFoundError as e: return json.dumps({success: False, error: f文件不存在: {e}}) except PermissionError as e: return json.dumps({success: False, error: f权限不足: {e}}) except Exception as e: return json.dumps({success: False, error: f未知错误: {e}})⚠️关键原则即使工具执行失败也要返回结构化的错误信息而不是让 LLM 去猜测发生了什么。LLM 看到错误信息后可以自动调整策略这是 Agent 鲁棒性的核心。3. 控制工具权限范围# 生产环境中应该限制工具的能力范围 tools_config { read_file: {allowed_paths: [/project/], max_size_mb: 10}, write_file: {allowed_paths: [/project/output/], require_confirm: True}, execute_bash: {allowed_commands: [ls, cat, grep, find], block_network: True}, web_fetch: {allowed_domains: [github.com, docs.python.org, wikipedia.org]}, }4. 避免工具循环❌ 问题场景 LLM 调用 search → 结果不理想 → 再次 search → 还是不行 → 继续 search → ... ✅ 解决方案 1. 设置单任务最大工具调用次数如 25 次 2. 检测重复调用连续 3 次相同工具 相似参数 → 提示 LLM 换策略 3. 设置思考超时如果 Agent 陷入循环自动注入 请总结当前已获得的信息尝试新方法总结AI Agent 的四大组成部分相辅相成构成了一个完整的智能体系组成部分一句话总结关键能力LLMAgent 的大脑理解、推理、生成规划Agent 的思维拆解、排序、反思、调整记忆Agent 的经验短期上下文 长期知识库工具Agent 的双手读写文件、执行代码、搜索、调用 API最后的建议构建 Agent 时不要试图一步到位。推荐的演进路径是起步LLM 1-2 个基础工具读写文件增强加入短期记忆支持多轮对话进阶引入 ReAct 规划支持复杂任务成熟添加长期记忆向量数据库 Plan-and-Solve卓越反思机制 记忆优化 工具生态每一层的加入都让 Agent 的能力产生质的飞跃。关键是根据你的场景选择合适的复杂度——过度设计一个简单场景的 Agent 和低配一个复杂场景的 Agent都是资源的浪费。本文适合对 AI Agent 有一定了解、希望深入理解其内部架构的开发者阅读。如果你正在构建自己的 Agent 系统希望这篇文章能帮助你做出更清晰的架构决策。上篇从工具到伙伴AI Agent 核心架构深度剖析-CSDN博客