Q914Agent 架构真题解析Agent 架构AgentAlpha 社区真题库约 9 分钟更新 2026-09-29

Agent整体流程是怎么做的?包括哪些模块

Agent整体流程是怎么做的?包括哪些模块

1️⃣ 考察意图

面试官想看你是否理解Agent系统不是“调LLM接口”的简单堆砌,而是具备感知-规划-执行-记忆-反思的完整流程架构。考察类型是系统设计+工程取舍,刁钻点在于:大多数人只会背ReAct流程,但说不清模块间如何解耦、失败如何恢复、记忆如何分层。答好了能展示你对生产级Agent的架构把控力,包括状态管理、工具调用容错、以及如何用最少LLM调用完成复杂任务。

2️⃣ 标准答

Agent整体流程是一个感知→规划→执行→反思→记忆更新的循环,核心模块包括以下5个,每个都有明确的输入输出和工程取舍。

1. 感知模块(Perception)

  • 职责:接收用户输入,做意图识别和实体抽取。不一定要用LLM,可以用小模型(如BERT分类器)做意图分类,节省成本。
  • 工程取舍:用LLM做意图识别灵活但慢且贵,用规则/小模型快但泛化差。实际落地常用两阶段:先用规则匹配高频意图(如“查天气”),fallback到LLM处理长尾。
  • 坑+解法:用户输入可能含噪声(拼写错误、歧义)。解法:在感知层加一个输入清洗步骤,比如用spell-checker或同义词映射,再传给LLM。

2. 规划模块(Planning)

  • 职责:将复杂任务分解为子任务,生成执行计划。主流方法有ReAct(边推理边行动)、Plan-and-Solve(先规划再执行)、Tree-of-Thoughts(多路径探索)。
  • 具体实现:用LLM输出JSON格式的计划,例如[{"step": "search_weather", "params": {"city": "北京"}}, {"step": "book_hotel", "params": {"city": "北京"}}]。关键是用few-shot prompt约束输出格式,避免自由文本。
  • 工程取舍:ReAct适合动态任务(需要根据中间结果调整),Plan-and-Solve适合确定性任务(如数据ETL)。取舍点:ReAct每步都调LLM,成本高;Plan-and-Solve一次规划,但计划可能过时。实际中常用混合策略:先Plan,执行中若遇到错误再ReAct重规划。

3. 执行模块(Execution)

  • 职责:调用工具/API执行子任务,包括代码解释器(Python REPL)、数据库查询(SQL)、外部API(天气、日历)等。
  • 工具注册:每个工具需要定义函数签名(输入输出schema),用OpenAPI规范或JSON Schema描述。LLM通过function calling选择工具。
  • 坑+解法:工具调用可能失败(API超时、返回格式错误)。解法:加重试机制(最多3次,指数退避)和fallback工具(如天气API失败则用网页爬虫)。另外,工具返回结果要截断(比如只保留前1000 token),避免撑爆LLM上下文。

4. 反思模块(Reflection)

  • 职责:对执行结果进行校验,若失败则重试或重新规划。这是Agent区别于简单RAG的关键。
  • 实现方式:用LLM判断结果是否满足用户意图(如“查询结果是否包含日期和温度”)。若不满足,触发重新规划:将错误信息反馈给规划模块,生成新计划。
  • 工程取舍:每次执行后都反思会显著增加LLM调用次数。取舍:只在关键步骤(如工具调用失败、结果为空)触发反思,普通步骤直接通过。或者用阈值:如果连续2步失败,才启动反思。

5. 记忆模块(Memory)

  • 职责:短期记忆(对话上下文)和长期记忆(向量数据库存储历史)。
  • 短期记忆:用滑动窗口(保留最近N轮对话,比如10轮)或摘要压缩(用LLM总结历史)。取舍:滑动窗口简单但可能丢失关键信息,摘要压缩保留语义但增加延迟。
  • 长期记忆:用向量数据库(如Chroma、FAISS)存储用户偏好、历史任务结果。检索时用混合检索(BM25+embedding),兼顾关键词和语义。
  • 坑+解法:记忆污染——长期记忆可能包含过时信息。解法:给每条记忆加时间戳和置信度,检索时按时间衰减权重。

整体流程示例:用户说“帮我查北京明天天气,并推荐一个酒店”。感知模块提取实体“北京”“明天”“天气”“酒店”;规划模块生成计划:先查天气,再根据天气推荐酒店;执行模块调用天气API,返回“晴,25°C”;反思模块检查结果是否完整(有温度、天气描述);记忆模块存储用户偏好(“喜欢晴天”);然后执行模块调用酒店推荐API,最终输出结果。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从模块划分、交互流程、工程取舍三个层面回答。模块层面,Agent包括感知、规划、执行、反思、记忆五个核心模块,每个模块有明确的输入输出。交互流程是循环的:感知→规划→执行→反思→记忆更新,反思失败会触发重新规划。工程取舍上,关键是用混合策略平衡成本和准确性,比如规划用Plan-and-Solve+ReAct fallback,记忆用滑动窗口+向量检索。总结一句:生产级Agent不是LLM的简单包装,而是一个有状态、可容错的完整流程系统。”

4️⃣ 高频追问 & 应对

追问 1:如果规划模块生成的计划有循环依赖(比如步骤A需要步骤B的结果,步骤B又需要步骤A的结果),你怎么处理?

这是典型的死锁问题。解法:在规划模块中加依赖图检测,用拓扑排序检查是否有环。如果发现环,有两种策略:1)合并步骤:将循环依赖的两个步骤合并为一个原子操作,由LLM一次性完成(比如A和B都依赖对方,那就让LLM同时生成A和B的结果)。2)引入外部状态:如果A和B需要互相交换数据,可以用一个共享的临时存储(如Redis),A写入结果,B读取,然后B写入结果,A再读取。实际中更常用合并步骤,因为减少LLM调用次数。

追问 2:你的Agent如何支持多用户并发?记忆模块怎么隔离?

多用户并发需要会话隔离。解法:每个用户分配一个session_id,所有记忆(短期和长期)都按session_id分片存储。短期记忆用内存缓存(如Redis的list结构),每个session一个key,过期时间设为30分钟。长期记忆用向量数据库的partition功能(如Pinecone的namespace),每个用户一个namespace。注意:工具调用(如API)也要带上用户上下文,避免数据混淆。性能取舍:每个session独立存储,内存开销大,但隔离性好;如果用户量大,可以用共享池+用户标签,但需要加权限校验。

追问 3:如果工具返回的结果是图片或大文件,怎么处理?

工具返回非文本内容时,不能直接塞给LLM。解法:1)摘要化:用多模态模型(如GPT-4V)将图片转为文本描述,再传给LLM。2)引用化:如果LLM不需要理解内容,只返回一个引用链接(如S3 URL),让前端展示。3)分块处理:大文件(如PDF)先分块,每块用LLM提取关键信息,再汇总。工程取舍:摘要化增加延迟和成本,引用化需要前端配合。实际中常用混合:小文件直接摘要,大文件引用+用户点击后异步处理。

5️⃣ 避坑 · 常见错误答法

  • ❌ 答成“Agent就是LLM+工具调用,流程是用户输入→LLM→工具→输出” → ✅ 正确切入:必须强调规划和反思模块,说明Agent是完整流程循环,不是线性流水线。工具调用只是执行层的一部分,核心是任务分解和错误恢复。
  • ❌ 说“记忆模块用向量数据库存所有历史对话” → ✅ 正确切入:记忆要分层,短期用滑动窗口或摘要,长期用向量检索,且要加时间衰减和置信度,避免记忆污染。全量存储会撑爆上下文且检索效率低。

6️⃣ 简历呼应

  • 如果你有RAG项目:从“RAG的检索-生成流程如何扩展为Agent的规划-执行”切入,强调反思模块是RAG没有的,展示你如何用ReAct处理多跳检索(如“查天气并推荐酒店”需要两次检索)。
  • 如果你只做过传统NLP:用“流水线架构”类比,感知模块类似NER,规划模块类似任务分解(如pipeline中的stage),执行模块类似API调用,记忆模块类似缓存。突出你理解模块化设计和解耦。
  • 如果你是校招无项目:聚焦论文复现,比如ReAct论文(Yao et al., 2023)中的“思考-行动-观察”循环,以及Toolformer(Schick et al., 2023)的工具学习。可以提一个demo:用LangChain实现天气查询Agent,展示感知→规划→执行→反思的完整流程。
  • ReAct: Synergizing Reasoning and Acting in Language Models (Yao et al., 2023)
  • Toolformer: Language Models Can Teach Themselves to Use Tools (Schick et al., 2023)
  • Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning (Wang et al., 2023)
  • LangChain Agent 官方文档:Agent Types and Tool Calling
  • 博客:Building Production-Ready Agents with Memory and Error Handling (Anthropic Engineering Blog)

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。