面试知识库
极高 困难

Agent设计模式#

一句话答案#

Agent 基于 ReAct 循环(感知→思考→行动→观察),通过 Tool Calling 扩展 LLM 能力,实现复杂任务自动化。

核心要点

Agent 设计模式是一组”让 LLM 自主完成任务”的编排范式,从轻到重构成一条谱系,按任务复杂度选型即可。

ReAct(Reasoning + Acting): 推理与行动交替,Thought→Action→Observation 循环往复,直到产出答案。最常用的基础模式,每步动态决策、灵活,但多轮串行、token 消耗高。

Plan-and-Execute(先规划后执行): 先让 LLM 一次性规划出完整步骤清单,再逐步执行(执行阶段可不再调用大模型推理)。适合可预先分解的复杂任务,减少 LLM 调用、目标更稳定;缺点是计划僵化,环境变化时需重规划。

Reflection / Self-Refine(反思自纠): 生成结果后让模型自我批判、再据反馈修正,可叠加多轮。显著提质量(尤其代码/写作),代价是成本和延迟翻倍。

Tool Use / Function Calling(工具调用): 不是独立”流程模式”,而是上述所有模式的执行底座——模型通过结构化调用外部工具/API 来真正”做事”,ReAct 的 Action、Plan 的每一步都落在它上面。

多 Agent 协作(Multi-Agent): 把任务拆给多个专职 Agent,典型如 Supervisor-Worker(一个编排、多个执行)。分而治之应对超复杂任务,但通信、状态一致性、成本都更高。

选型直觉: 简单任务 ReAct 够用;步骤可预知、要省调用用 Plan-and-Execute;要质量再叠 Reflection;只有任务超复杂、单 Agent 撑不住才上多 Agent。

这些模式落地时由 Agent Runtime(Planner / Executor / Tool Registry / Observability)承载,运行时的迭代上限、超时、状态快照等工程细节见《Agent Runtime与Checkpoint机制》。

面试回答(2分钟版)

Agent的核心是基于ReAct循环让LLM具备自主决策和工具调用能力。整个循环分四步:Observation获取当前状态包括对话历史和上次工具返回结果,Thought让LLM用Chain-of-Thought推理下一步该做什么,Action选择调用某个工具或直接生成最终答案,如果调用了工具就把结果追加到上下文继续下一轮循环。Agent Runtime是执行引擎,包含几个关键模块:Planner负责任务规划和拆解,Executor负责执行动作,Tool Registry管理可用工具的注册和发现,Memory Manager管理短期对话记忆和长期知识记忆。生产化要考虑几个关键设计点:设置max_steps比如15步防止无限循环烧token,每次LLM调用和工具调用都要设超时,每步保存状态快照支持断点恢复,Multi-Agent场景下工具调用要做并发限流。工具定义要遵循MCP协议标准化工具描述,让不同Agent框架能复用同一套工具。目前主流框架LangChain和LangGraph都实现了这套模式。

追问与易错

追问方向:

  • ReAct 和 Plan-and-Execute 什么时候用哪个? → ReAct 适合工具调用密集、每步需要动态决策的场景;Plan-and-Execute 适合可以预先拆解的复杂任务,先规划完整步骤再逐步执行
  • Agent 死循环怎么防?max_steps 设多少合适? → 三重防护:max_steps 上限(通常 5-15)+ 检测连续相同工具调用 + token 预算硬控。步数根据任务复杂度调,简单 QA 设 5,多步推理设 10-15
  • 你们项目的 Agent 架构是什么?为什么选这个架构? → DocMind 用 Supervisor-Worker,因为单 Agent 膨胀到 1400 行无法维护,重构后 Supervisor 只编排(586 行),Worker 独立可测(80-120 行/个)
  • Agent 的状态快照和断点恢复怎么实现? → 每步将 Thought/Action/Observation 序列化存储(Redis 或 DB),异常时从最后成功的步骤恢复,避免从头重跑

易错点:

  • ❌ 只讲 ReAct 概念不知道循环终止条件 → 必须设 max_steps(通常 5-15)+ 相同工具调用检测 + token 预算上限
  • ❌ 忽略超时控制 → 每次 LLM 调用和工具调用都要设独立超时,防止单步阻塞整个流程
  • ❌ 不区分 Agent 和 Chain → Agent 有自主决策循环,Chain 是固定流程,不能混用

项目实践(DocMind): 最初单 Agent 架构(DocMindAgent.java 膨胀到 1400 行),耦合了路由、检索、生成逻辑。Phase 2 重构为 Supervisor-Worker 模式:SupervisorAgent(586 行)只负责编排,RetrievalWorker / WebWorker / MemoryWorker / AnalysisWorker 各 80-120 行独立可测。新增 Worker 只需实现接口 + 在 PlanExecutor.resolveWorker() 注册,零侵入核心代码。