Agent 架构怎么从零设计?
感知、规划、工具调用、记忆模块的关键技术选型
原题:假设你需要从零设计一个具备自主决策能力的AI Agent,请描述其整体架构设计(包括感知、规划、工具调用、记忆等模块),并解释关键技术选择的理由。
Agent · 百度真题
回答与解析
整体架构:四层循环设计
┌─────────────────────────────────────┐
│ 感知层 (Perception) │
│ 多模态输入 → 意图理解 → 任务分解 │
└─────────────┬───────────────────────┘
▼
┌─────────────────────────────────────┐
│ 规划层 (Planning) │
│ ReAct循环: 思考 → 行动选择 → 观察 │
│ 支持多步规划、子目标分解、回溯修正 │
└─────────────┬───────────────────────┘
▼
┌─────────────────────────────────────┐
│ 执行层 (Action/Tool Use) │
│ 工具注册中心 → 动态路由 → 结果解析 │
└─────────────┬───────────────────────┘
▼
┌─────────────────────────────────────┐
│ 记忆层 (Memory) │
│ 工作记忆 + 短期记忆 + 长期向量记忆 │
└─────────────────────────────────────┘
关键技术选择理由
1. 规划:ReAct + 可选Tree-of-Thoughts
- ReAct将推理轨迹与行动交错,比纯CoT更可控
- 复杂任务启用ToT多路径探索,用LM打分剪枝
2. 工具调用:OpenAI-style Function Calling
- 标准化JSON Schema描述工具,LLM原生支持
- 关键设计:工具描述即Prompt工程,需包含使用场景、参数约束、常见错误
3. 记忆三级架构
| 层级 | 存储 | 用途 |
|---|---|---|
| 工作记忆 | 当前对话上下文 | 即时推理 |
| 短期记忆 | 最近N轮摘要 | 会话连贯性 |
| 长期记忆 | 向量库+知识图谱 | 用户偏好、领域知识 |
4. 自我反思机制
- 执行后强制验证:结果是否回答原始问题?
- 失败触发重规划,最多3次回退
一个关键取舍
不追求完全自主,而是"人在环路"的可干预设计——关键决策点保留人工确认,这是落地安全性和可控性的平衡。
学习建议
建议系统学习该知识点
口语版讲法(约4分钟)
- 本质是决策循环:感知-规划-执行-记忆
- 核心是规划层:ReAct加ToT应对不同复杂度
- 工具调用关键在描述工程,不是模型能力
- 记忆三级架构:工作、短期、长期
- 落地取舍:人在环路,安全可控
这道题其实在问一个决策循环怎么搭起来。我会把它拆成四层:感知、规划、执行、记忆,核心是让Agent在环境里感知后,规划怎么行动,执行工具,再把结果记下来影响下一步。
先说感知层,这里我直接对接多模态输入,比如文本、图片、语音,但真正重要的不是怎么接,而是怎么把用户意图拆成可执行的任务。举个例子,用户说“帮我查一下这笔退款为什么还没到账”,感知层要理解这是查询退款状态,而不是投诉客服,所以意图分类和实体抽取是关键。
规划层是整个Agent的脑子。我用 ReAct 作为默认策略,让模型在思考、行动、观察之间循环,每一步都输出推理轨迹再选工具,这样比纯Chain-of-Thought CoT更可控。如果任务特别复杂,比如要跨系统查订单、库存、物流,我会启用 Tree-of-Thoughts 多路径并行探索,用模型自己打分剪枝。但ToT成本高,只有简单规划走不通时才触发,平时ReAct就够了。
执行层就是工具调用。我采用OpenAI风格的Function Calling,工具用JSON Schema描述,关键不在模型能不能理解,而在工具描述本身就是Prompt工程。比如一个查订单的工具,你得写明“当用户提供订单号时调用,订单号格式是xxx,常见错误是传了手机号”,不然模型会瞎猜。这里有个坑:工具多了容易混淆,我会按场景分组,比如客服场景只暴露退款、物流、商品查询三类工具,减少选择噪音。
记忆层我分三级。工作记忆就是当前对话上下文,直接放Sliding Window 滑动窗口里。短期记忆存最近N轮摘要,保证会话连贯性。长期记忆用Vector Database存用户偏好和领域知识,比如某个用户之前投诉过发货慢,下次再问类似问题,Agent能主动规避相关推荐。这里前提是向量检索质量要够,不然召回一堆无关的反而干扰。
落地时最关键的取舍是“人在环路”。我不会追求完全自主,反而会在关键决策点加人工确认,比如退款金额超过阈值或者要修改订单状态时,先暂停等审核。这不是技术限制,而是安全性和可控性的平衡。如果上线,我会特别关注失败时的回退逻辑:执行后强制验证结果是否回答了原始问题,失败最多重规划三次,三次还不行就转人工。常见失败场景是模型把工具调用参数搞错,比如查物流时传了订单号而不是运单号,所以工具描述里必须写清楚参数校验规则。
另外,规划层还可以引入 Self-Refine 让模型自己反思结果质量,但代价是延迟翻倍,所以在实时性要求高的场景我会慎用,比如客服对话里用户等不了十秒才回复。
所以整体上,我会把Agent看成一套带安全阀的决策循环,感知要准,规划要稳,工具要描述清楚,记忆要分层。更倾向先做窄场景的可靠Agent,再逐步扩展能力,而不是一开始就追求全自主。
关键一句:规划层引入Self-Refine可以提升结果质量,但延迟会翻倍,实时性要求高的场景需谨慎。
面试官还可能这样问
- 问法 1 · 场景切入
假设你要做一个智能客服Agent,用户说‘帮我查一下上个月订单,顺便退掉那个迟到的’,它得自己决定先查订单还是先处理退货。你从零设计这样一个能自主决策的Agent,整体架构怎么搭?
- 问法 2 · 层层追问
一个AI Agent要想自主决策,你觉得需要哪些核心模块?……那这些模块之间怎么协同工作?比如感知完怎么规划,规划完怎么调工具……再具体点,如果任务到一半发现走不通,系统该怎么处理?
- 问法 3 · 直球架构
设计一个具备自主决策能力的AI Agent架构,要求包括感知、规划、工具调用、记忆等模块,并解释关键技术选型理由。直接说你的方案。