40-Agent架构设计
Agent 定义与核心组件
大模型 Agent 是一种超越简单文本生成的人工智能系统,它使用大型语言模型(LLM)作为核心大脑,能够进行对话、执行任务、推理并展现一定程度的自主性。
简而言之,Agent 是一个具有复杂推理能力、记忆和执行工具的系统,可以自主完成复杂任务。
一个完整的 LLM Agent 通常包含三大核心组件:
1. 规划(Planning)
复杂任务通常需要分解为多个步骤,Agent 需要对任务进行规划。
核心能力:
- 将大型任务拆解为更小、更易于管理的子目标;
- 自我反省和改进,从错误中学习,优化未来步骤;
- 制定完整执行计划。
2. 记忆(Memory)
- 短期记忆:利用大模型的上下文窗口存储近期对话和信息,也就是上下文学习;
- 长期记忆:利用外部向量存储存储长期信息,支持检索召回,相当于Agent的"外存"。
3. 工具使用(Tool Use)
大模型训练数据有截止日期,并且存在幻觉问题,通过调用外部工具:
- 可以获取实时信息(天气、新闻);
- 执行计算、调用API;
- 访问专有知识库;
- 弥补模型固有缺陷,扩展能力边界。
主流 Agent 架构
ReAct
ReAct(Reasoning + Acting)将推理和行动相结合,是最经典的 Agent 架构:
核心思想:
- Agent 交替进行推理(Thought)和行动(Action);
- 推理帮助 Agent 思考下一步该做什么;
- 行动调用工具获取外部信息;
- 观察工具返回结果,继续下一轮推理。
Prompt 格式:
Question: {question}
Thought: ...
Action: {tool_name}[{tool_input}]
Observation: {tool_result}
...
Thought: I now know the final answer
Final Answer: {answer}
优点:
- 推理过程可解释性强;
- 将大模型推理和工具使用自然结合;
- 实现简单,效果稳定。
Plan-and-Execute
核心思想:
- 第一步:先由大模型做出完整计划;
- 第二步:逐步执行计划;
- 相比 ReAct,规划和执行分离,更适合复杂任务。
优缺点:
- 优点:对复杂任务有更清晰的整体规划;
- 缺点:规划错误可能导致整个执行偏误,误差累积。
ReAct vs Plan-and-Execute
| ReAct | Plan-and-Execute |
|---|
| 规划+执行交替进行 | 先完整规划,再执行 |
| 适合逐步推进的任务 | 适合已知结构的复杂任务 |
| 更灵活,能根据工具结果调整 | 规划一旦错了不容易挽回 |
Multi-Agent 架构
Multi-Agent 是多个 Agent 协作完成任务:
常见分工模式
-
用户 → 调度 Agent → 工作 Agent → 总结 Agent → 用户
- 调度 Agent:理解用户需求,分配给合适的工作 Agent;
- 工作 Agent:每个 Agent 专精一项任务(写代码、查资料、做设计);
- 总结 Agent:整合结果,输出给用户。
-
角色对话模式(AutoGPT 启发):
- 不同 Agent 扮演不同角色(产品经理、开发者、测试者);
- 通过对话协作完成整个项目;
- 代表性项目:ChatDev。
优点与挑战
优点:
- 专业化分工,每个角色做好自己擅长的事;
- 可以处理极其复杂的任务;
- 灵活性高,可动态增减角色。
挑战:
- 通信成本高,多个 Agent 对话可能很长;
- 协调困难,可能出现相互推诿;
- 成本更高,调用多次大模型。
任务分解方法
1. Chain of Thought (CoT)
- 要求模型"think step by step",将复杂任务分解为多个步骤;
- 最简单也最有效,启发了后续很多方法。
2. Tree of Thoughts (ToT)
- 在每一步都探索多种可能性,构建搜索树;
- 使用 BFS 或 DFS 搜索,让模型对状态剪枝;
- 比 CoT 更能探索多种路径,但成本也更高。
3. Graph of Thoughts (GoT)
- 支持任意图形结构的思考,不只是线性或树形;
- 可以处理聚合、回溯、循环等更复杂的思考流程;
- 包含了 CoT 和 ToT 作为特例,表达能力更强。
4. LLM+P
- 将规划任务外包给经典规划器;
- LLM 把问题翻译成 PDDL(规划域定义语言);
- 经典规划器求解出计划;
- LLM 再把计划翻译回自然语言;
- 适合有明确领域模型的规划问题。
自我反省方法
自我反省让 Agent 能从错误中学习,提高结果质量。
ReAct 框架
ReAct 本身就集成了反省:
- 在每一步,Agent 都能观察工具返回结果;
- 如果结果不对,下一步推理可以调整。
Reflexion
Reflexion 是一个增强自我反省的框架:
核心流程:
- Agent 执行任务得到轨迹;
- 启发式函数评估轨迹,判断是否失败以及失败原因;
- 大模型进行自我反思,总结经验教训;
- 反思结果加入工作记忆,开始下一次尝试;
- 最多尝试 N 次。
关键点:
- 自我反思通过 two-shot prompting 实现;
- 反思结果保存在记忆中,指导下一次尝试;
- 能显著提高复杂任务的成功率。
面试常见问题
1. LLM Agent 由哪些核心组件组成?
回答要点:
- 规划:任务分解、子目标拆解、自我反省;
- 记忆:短期记忆(上下文窗口)和长期记忆(外部向量存储);
- 工具使用:调用外部 API 获取信息、执行计算。
2. 什么是 ReAct 架构?
回答要点:
- ReAct = Reasoning + Acting;
- 交替进行推理和行动;
- Thought 让模型思考下一步,Action 调用工具,Observation 接收结果;
- 可解释性好,是最经典的 Agent 架构。
3. 为什么需要 Multi-Agent?
回答要点:
- 复杂任务需要不同专长的角色协作;
- 单一 Agent 能力有限,分工专业化可以提高质量;
- 人类社会也是分工协作,Multi-Agent 更符合复杂任务需求;
- 典型例子:ChatDev 用不同角色协作开发软件。
4. 常见的任务分解方法有哪些?
回答要点:
- CoT:step by step,最简单有效;
- ToT:树形探索,每一步考虑多种可能性;
- GoT:任意图结构,支持更复杂的思考关系;
- LLM+P:利用经典规划器做规划,LLM 做翻译。
5. Agent 如何进行自我反省?
回答要点:
- 执行完一轮后评估结果,找出失败原因;
- 大模型总结经验教训,存入记忆;
- 下一次尝试基于反思调整策略;
- Reflexion 是代表性框架;
- 能显著提高复杂任务的成功率。