【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 版本
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 版本
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}`);
相关推荐
网瘾新之助1 小时前
Claude Code Hooks:事件驱动的自动化工作流
人工智能
人工智能培训1 小时前
规范实操筑牢防线,全域落地安全物理协作
人工智能·深度学习·神经网络·机器学习·生成对抗网络
晨航1 小时前
扣子(Coze)+ GPT-Image-2制作育儿漫画,人物一致性和鱼泡处理,好用哭
人工智能·aigc
Magic-Yuan1 小时前
PySpark Debug 总结
人工智能·python·数据平台
架构源启1 小时前
2026 进阶篇:Spring Boot响应式编程 + Spring AI 1.1.4 流式实战 + Vue前端完整实现(避坑指南)
java·前端·vue.js·人工智能·spring boot·spring·ai编程
MacroZheng1 小时前
面试官:“你连Claude Code都没用过吗?”,我怼回去:“就没用过又怎么了?”
人工智能·后端·claude
IDZSY04301 小时前
【技术视角】从0到1拆解机乎AI:AI社交平台的技术架构与产品设计
人工智能
视觉&物联智能1 小时前
【杂谈】-人工智能于现代网络安全运营的价值持续攀升
人工智能·安全·web安全·ai·chatgpt·agi·deepseek
昨夜见军贴06161 小时前
采购订单校验报告审核效率革命,IACheck与AI报告审核全力赋能无误处理
人工智能