【AI面试临阵磨枪-27】Agent 通用抽象架构:感知、规划、行动、记忆 四个模块如何闭环?
一、面试题目在你看来一个成熟的AI Agent系统其通用的抽象架构是怎样的特别是感知、规划、行动和记忆这四个核心模块它们之间是如何协同工作形成一个完整闭环的请详细阐述一下你的理解。二、知识储备要回答好这个问题你需要对Agent的四大核心模块及其相互关系有深刻的理解。1. 感知 (Perception)① 功能Agent的“五官”负责从环境中接收信息。这不仅包括用户的自然语言输入还包括来自工具调用的API返回结果如JSON数据、网页内容、甚至是图像、声音等多模态信息。② 难点多模态信息的对齐与融合。例如如何将用户说的“这张图片里的猫”与上传的图片数据在语义上关联起来。2. 规划 (Planning)① 功能Agent的“大脑”是决策中心。它接收感知到的信息和来自记忆的知识将复杂的、模糊的用户目标拆解成一系列可执行的、有序的子任务或步骤。② 关键技术ReAct (Reasoning Acting)推理和行动交替进行动态调整策略。Tree-of-Thoughts (ToT)探索多种可能的推理路径选择最优解。Self-Reflection对自身上一步的行动结果进行评估和反思从而修正后续计划。3. 行动 (Action)① 功能Agent的“手脚”负责执行规划模块生成的任务。这通常通过调用外部工具来实现如搜索引擎、代码解释器、数据库查询接口、各种API等。② 难点工具选择的准确性和调用参数的规范性。Agent需要精确地将规划中的意图转化为工具能理解的参数格式。4. 记忆 (Memory)① 功能Agent的“经验库”贯穿整个交互流程。它确保Agent在多轮对话中不迷失并能利用历史经验优化当前决策。② 分层设计短期记忆 (Short-term Memory)存储当前会话的上下文如最近的几轮对话。通常通过滑动窗口实现保证对话的连贯性。长期记忆 (Long-term Memory)持久化存储跨会话的信息如用户偏好、历史任务记录、领域知识库等。常使用向量数据库或关系型数据库实现支持语义检索。5. 模块间的联动逻辑这是一个持续的循环过程感知输入 - 记忆检索 - 大脑规划 - 工具行动 - 结果反馈 - 记忆更新。每一次行动的结果都会作为新的感知输入触发新一轮的规划和行动直到任务完成。三、破局之道你可以这样自信地回答一个健壮的Agent架构其本质是为大模型构建一个“认知-行动”的闭环。我们可以将其类比为人类的工作方式感知是眼睛和耳朵负责接收外界信号记忆是大脑皮层存储着我们的经验和背景知识规划是前额叶负责思考、决策和制定计划行动是我们的双手负责执行计划并与世界互动。它们的闭环协作流程是这样的首先感知模块接收到用户指令或环境反馈。紧接着它会唤醒记忆模块从中检索相关的历史信息、用户偏好或先验知识为决策提供上下文。然后规划模块基于当前的感知信息和检索到的记忆像一个战略家一样将复杂目标拆解为一系列有序的、可操作的子任务。接下来行动模块作为执行者根据规划好的步骤精准地调用相应的工具如API、数据库来完成任务。最后行动产生的结果会再次被感知模块捕获形成新的观察。这个新的观察又会触发新一轮的记忆检索、规划和行动。如此循环往复直至达成最终目标。整个过程产生的新经验和关键信息也会被沉淀到记忆模块中让Agent在下一次面对类似情境时变得更加聪明。四、代码实现下面我们用Python和JavaScript分别展示一个简化的核心闭环逻辑。为了清晰起见我们将每个模块抽象为一个类或对象。Python 版本import json from typing import List, Dict, Any # --- 模拟模块 --- class Perception: 感知模块处理输入 def perceive(self, input_data: Any) - Dict[str, Any]: print(f️ [感知] 接收到输入: {input_data}) # 这里可以加入更复杂的预处理逻辑如多模态信息融合 return {type: user_input, content: input_data} class Memory: 记忆模块简单的记忆管理 def __init__(self): self.short_term [] self.long_term {} # 简化版实际应为向量数据库等 def retrieve(self, query: str) - List[str]: print(f [记忆] 正在检索与 {query} 相关的信息...) # 模拟从长期记忆中检索 if 天气 in query: return [用户喜欢晴天。] return [] def add(self, info: str): print(f [记忆] 保存新信息: {info}) self.short_term.append(info) class Planning: 规划模块分解任务 def plan(self, goal: str, context: List[str]) - List[Dict[str, str]]: print(f [规划] 正在为目标 {goal} 制定计划...) # 这里是核心的LLM推理部分简化为硬编码逻辑 if 北京天气 in goal: return [ {action: search_weather, args: {city: 北京}} ] return [] class Action: 行动模块执行工具调用 def execute(self, action_plan: List[Dict[str, str]]) - Any: for step in action_plan: action_name step[action] args step[args] print(f️ [行动] 执行动作: {action_name}, 参数: {args}) # 模拟工具调用 if action_name search_weather: # 模拟API调用 result f北京今天晴天温度25度。 print(f [行动] 动作 {action_name} 执行成功结果: {result}) return result return None # --- 核心引擎 --- class AgentCore: Agent核心引擎协调各模块形成闭环 def __init__(self): self.perception Perception() self.memory Memory() self.planning Planning() self.action Action() def run(self, user_input: str): # 1. 感知 perceived_info self.perception.perceive(user_input) # 2. 记忆检索 relevant_memory self.memory.retrieve(perceived_info[content]) # 3. 规划 task_plan self.planning.plan(perceived_info[content], relevant_memory) # 4. 行动 action_result self.action.execute(task_plan) # 5. 记忆更新 (形成闭环的关键) if action_result: self.memory.add(f任务{{user_input}}的结果是: {{action_result}}) return action_result # --- 运行示例 --- if __name__ __main__: agent AgentCore() final_response agent.run(今天北京天气怎么样) print(f\n Agent最终回复: {{final_response}})JavaScript 版本// --- 模拟模块 --- class Perception { /** 感知模块处理输入 */ perceive(inputData) { console.log(️ [感知] 接收到输入: ${inputData}); // 这里可以加入更复杂的预处理逻辑 return { type: user_input, content: inputData }; } } class Memory { /** 记忆模块简单的记忆管理 */ constructor() { this.shortTerm []; this.longTerm {}; // 简化版 } retrieve(query) { console.log( [记忆] 正在检索与 ${query} 相关的信息...); // 模拟从长期记忆中检索 if (query.includes(天气)) { return [用户喜欢晴天。]; } return []; } add(info) { console.log( [记忆] 保存新信息: ${info}); this.shortTerm.push(info); } } class Planning { /** 规划模块分解任务 */ plan(goal, context) { console.log( [规划] 正在为目辬 ${goal} 制定计划...); // 这里是核心的LLM推理部分简化为硬编码逻辑 if (goal.includes(北京天气)) { return [ { action: search_weather, args: { city: 北京 } } ]; } return []; } } class Action { /** 行动模块执行工具调用 */ execute(actionPlan) { for (const step of actionPlan) { const actionName step.action; const args step.args; console.log(️ [行动] 执行动作: ${actionName}, 参数: ${JSON.stringify(args)}); // 模拟工具调用 if (actionName search_weather) { // 模拟API调用 const result 北京今天晴天温度25度。; console.log( [行动] 动作 ${actionName} 执行成功结果: ${result}); return result; } } return null; } } // --- 核心引擎 --- class AgentCore { /** Agent核心引擎协调各模块形成闭环 */ constructor() { this.perception new Perception(); this.memory new Memory(); this.planning new Planning(); this.action new Action(); } run(userInput) { // 1. 感知 const perceivedInfo this.perception.perceive(userInput); // 2. 记忆检索 const relevantMemory this.memory.retrieve(perceivedInfo.content); // 3. 规划 const taskPlan this.planning.plan(perceivedInfo.content, relevantMemory); // 4. 行动 const actionResult this.action.execute(taskPlan); // 5. 记忆更新 (形成闭环的关键) if (actionResult) { this.memory.add(任务${userInput}的结果是: ${actionResult}); } return actionResult; } } // --- 运行示例 --- const agent new AgentCore(); const finalResponse agent.run(今天北京天气怎么样); console.log(\n Agent最终回复: ${finalResponse});