解释 Agent 的核心组件:感知、推理、行动、记忆
难度:基础 分类:Agent 架构
简短回答
一个完整的 LLM Agent 由四大核心组件构成:感知模块(接收和解析输入)、推理模块(LLM 作为"大脑"进行思考和规划)、行动模块(调用工具执行操作)、记忆模块(存储和检索上下文信息)。这四个模块形成一个持续运转的认知闭环:感知→推理→行动→记忆→感知...
详细解析
感知模块(Perception)
感知模块是 Agent 的"感官系统",负责接收和预处理来自环境的各种信号。
职责:
•
接收用户自然语言输入
•
解析多模态数据(文本、图像、音频、视频)
•
处理工具返回的结果(Observation)
•
解析外部事件和通知(如 Webhook、消息队列)
关键设计要点:
•
感知不是被动接收,而是主动过滤和转换。原始数据需要被结构化为 Agent 可理解的格式
•
感知质量直接影响下游所有决策。如果 Agent 误解了用户意图或错误解析了工具输出,后续的推理和行动都会出错
•
现代 Agent 通常支持多模态感知:文本(NLP)、视觉(Computer Vision)、结构化数据(API Response Parsing)
代码块
Python
# 感知模块示例:解析用户输入并提取意图
class PerceptionModule:
def process_input(self, raw_input: dict) -> dict:
"""将原始输入转化为结构化的感知数据"""
return {
"user_query": raw_input.get("text", ""),
"images": raw_input.get("images", []),
"tool_results": raw_input.get("observations", []),
"context": self._extract_context(raw_input)
}
推理模块(Reasoning / Cognitive Core)
推理模块是 Agent 的"大脑",通常由 LLM 担任,负责理解任务、制定计划、做出决策。
核心能力:
•
任务理解:解析用户目标,理解隐含需求
•
任务分解:将复杂任务拆解为可执行的子任务
•
规划:制定行动序列,确定工具使用顺序
•
决策:在多个可选方案中选择最优路径
•
反思:评估中间结果,判断是否需要调整策略
主流推理范式:
#uKNzcxnimoVX text { white-space: pre; }#uKNzcxnimoVX .fb0 { stroke: var(--N900-FG, 0.15); }#uKNzcxnimoVX .fb0 {stroke: rgba(31,35,41, 0.15)}#uKNzcxnimoVX .fx0 { stroke-miterlimit: 10; }#uKNzcxnimoVX .fx0 {stroke-miterlimit: 10}#uKNzcxnimoVX .fa1 { fill: rgb(187, 191, 196); }#uKNzcxnimoVX .fa1 {fill: rgb(187, 191, 196)}#uKNzcxnimoVX .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#uKNzcxnimoVX .fx1 {font-style: normal}#uKNzcxnimoVX .fx2 { text-anchor: middle; }#uKNzcxnimoVX .fx2 {text-anchor: middle}#uKNzcxnimoVX .fx3 { dominant-baseline: central; }#uKNzcxnimoVX .fx3 {dominant-baseline: central}#uKNzcxnimoVX .fx4 { stroke: none; }#uKNzcxnimoVX .fx4 {stroke: none}#uKNzcxnimoVX .fc0 { fill: var(--text-caption); }#uKNzcxnimoVX .fc0 {fill: #646a73}#uKNzcxnimoVX .fa2 { fill: var(--text-link-disabled); }#uKNzcxnimoVX .fa2 {fill: rgb(187, 191, 196)}#uKNzcxnimoVX .fx5 { font: 400 16px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#uKNzcxnimoVX .fx5 {font-style: normal}#uKNzcxnimoVX .fx6 { text-anchor: start; }#uKNzcxnimoVX .fx6 {text-anchor: start}#uKNzcxnimoVX .fx7 { dominant-baseline: alphabetic; }#uKNzcxnimoVX .fx7 {dominant-baseline: alphabetic}#uKNzcxnimoVX .fc1 { fill: rgb(31, 35, 40); }#uKNzcxnimoVX .fc1 {fill: rgb(31, 35, 40)}#uKNzcxnimoVX .fb1 { fill: var(--N900-FG, 0.15); }#uKNzcxnimoVX .fb1 {fill: rgba(31,35,41, 0.15)}#uKNzcxnimoVX .fb2 { fill: rgb(209, 217, 224); }#uKNzcxnimoVX .fb2 {fill: rgb(209, 217, 224)}#uKNzcxnimoVX .fa3 { fill: var(--bg-body); }#uKNzcxnimoVX .fa3 {fill: #fff}ABC123456范式ReActPlan-and-ExecuteChain-of-ThoughtTree-of-ThoughtReWOO描述交替进行思考和行动先完整规划,再逐步执行逐步推理,但不执行行动探索多条推理路径一次性生成完整计划,减少 LLM 调用适用场景需要动态探索的任务结构化的多步任务纯推理问题需要回溯的复杂问题成本敏感场景
代码块
Python
# 推理模块:LLM 作为决策核心
class ReasoningModule:
def think(self, perception: dict, memory: dict) -> dict:
"""基于感知和记忆进行推理"""
prompt = self._build_prompt(perception, memory)
response = self.llm.generate(prompt)
行动模块(Action / Execution)
行动模块是 Agent 与外部世界交互的"手脚",负责执行推理模块做出的决策。
行动类型:
•
工具调用:执行 Function Calling(搜索、计算、API 请求)
•
代码执行:在沙箱中运行代码
•
数据操作:读写数据库、文件系统
•
通信:发送消息、邮件、触发通知
•
最终输出:向用户返回最终答案
关键设计考量:
•
行动需要有明确的成功/失败反馈,作为下一轮推理的 Observation
•
工具调用应有超时、重试和降级机制
•
危险操作(删除数据、发送邮件)需要 Human-in-the-Loop 确认
代码块
Python
# 行动模块:执行工具调用
class ActionModule:
def execute(self, action: dict) -> dict:
"""执行推理模块决定的行动"""
tool_name = action["tool"]
tool_input = action["input"]
try:
result = self.tools[tool_name].run(tool_input)
return {"status": "success", "observation": result}
except ToolError as e:
return {"status": "error", "observation": str(e)}
记忆模块(Memory)
记忆模块为 Agent 提供跨步骤和跨会话的上下文保持能力。
记忆类型:
关键设计要点:
•
上下文窗口有限,需要摘要和压缩策略
•
长期记忆的检索质量(Recall + Precision)直接影响 Agent 表现
•
需要遗忘机制来处理过时信息
代码块
Python
# 记忆模块:管理不同层次的记忆
class MemoryModule:
def __init__(self):
self.working_memory = [] # 当前任务步骤
self.conversation_history = [] # 对话历史
self.vector_store = VectorDB() # 长期记忆
def store(self, entry: dict):
"""存储新记忆"""
self.working_memory.append(entry)
if entry.get("persist"):
self.vector_store.upsert(entry)
def recall(self, query: str, k: int = 5) -> list:
"""检索相关记忆"""
return self.vector_store.search(query, top_k=k)
四大模块的协作闭环
四大模块构成认知闭环:感知把输入结构化,推理结合记忆做决策,行动的 Observation 反馈回感知,循环直至任务完成。
这个闭环持续运转,直到推理模块判断任务已完成(或达到最大步数限制)。四个模块的集成质量决定了 Agent 的整体能力——推理依赖记忆提供上下文,记忆依赖感知获取新信息,行动依赖推理做决策,感知处理行动的结果。
常见误区 / 面试追问
误区:"LLM 就是 Agent 的全部" — LLM 只是推理模块的核心,一个完整的 Agent 还需要感知、行动、记忆模块的协同工作。
误区:"记忆就是对话历史" — 对话历史只是短期记忆的一部分。完整的记忆系统还包括工作记忆(当前任务状态)和长期记忆(持久化知识库)。
追问:"如果推理模块(LLM)出错了怎么办?" — 需要 Guardrails(安全护栏)+ 自我反思机制 + 人工审核介入。好的 Agent 设计应该假设 LLM 会犯错,并在架构层面做好容错。
追问:"四个模块的耦合度应该怎么设计?" — 模块间应该通过标准化接口通信(如统一的消息格式),实现松耦合。这样可以独立替换某个模块(比如换一个 LLM、换一个向量数据库),不影响其他部分。
参考资料
•
AI Agent Core Components (IBM)
•
Traditional Agent Architecture: Perceive, Reason, Act (AWS)
•
The Architecture of Autonomous AI Agents (Deepak Gupta)
•
Agentic AI Architecture: Types, Components, Best Practices (Exabeam)
•
A Survey of Agent Architectures (arXiv:2308.11432) — Wang et al.