Q1: 你如何定义一个基于 LLM 的智能体(Agent)?它通常由哪些核心组件构成?**
P0 · agent_architecture
🏷 标签:agent, llm, architecture, planning, tool-use
1️⃣ 考察意图
这道题是 P0 级基础题,但面试官真正想看的不是“背定义”,而是区分你是在“背论文”还是“真做过”。考察类型是概念 + 工程取舍。刁钻点在于:很多人能列出“规划、记忆、工具”三个词,但说不出每个组件的具体实现选型(比如记忆用向量库还是 SQLite?规划用 ReAct 还是 Plan-and-Solve?)。答好了能展示你对 Agent 系统有端到端的工程理解,知道组件间的耦合与权衡,而不是只会调 API 的“套壳工程师”。
2️⃣ 标准答
定义:基于 LLM 的智能体是一个以 LLM 为推理核心,能自主感知环境、分解任务、调用外部工具、并基于反馈循环迭代执行以完成复杂目标的系统。它区别于“LLM + Prompt”的关键在于完整流程执行——不是一次问答,而是多步决策。
核心组件(按执行流水线排列):
- LLM 推理引擎:大脑。选型上,GPT-4 / Claude 3.5 适合复杂推理(成本高),开源模型如 Qwen2.5-72B 或 DeepSeek-V2 适合定制(需微调)。关键 trade-off:推理能力 vs 延迟——用 70B+ 模型做规划,7B 模型做简单工具调用(如 MoE 架构的 Mixtral 8x7B 可平衡)。
- 规划模块:将用户意图拆解为子任务。主流框架:ReAct(Yao et al., 2023):交替“思考-行动-观察”,适合单步工具调用。坑:容易陷入循环,需设最大步数(如 10 步)和重复检测。
- Plan-and-Solve(Wang et al., 2023):先生成完整计划再执行,适合长链条任务。坑:计划可能过时(如实时数据),需加“重新规划”触发器。
- Tree-of-Thoughts(Yao et al., 2023):多路径搜索,适合需要探索的任务(如代码调试),但 token 消耗大,实际落地少用。 记忆模块:分短期(上下文窗口)和长期(外部存储)。
- 短期记忆:就是 LLM 的 context window,但 GPT-4 128K 窗口仍不够处理 100 步对话。解法:用 滑动窗口(保留最近 N 轮)或 摘要压缩(每 5 步总结一次)。
- 长期记忆:用 向量数据库(Chroma / Pinecone)存 embedding,检索时用 BM25 + 稠密检索混合(HyDE 方法:先让 LLM 生成假设文档再检索)。坑:纯向量检索会丢失精确匹配(如“2024-03-15”),必须加 BM25 做召回融合。 工具调用接口:将 LLM 输出映射为 API 调用。核心设计:
- Function Calling(OpenAI 原生):定义 JSON schema,LLM 输出参数。坑:LLM 可能编造不存在的函数名,需做 白名单校验。
- 代码执行(如 Code Interpreter):LLM 写 Python 代码,沙箱执行。坑:安全风险(文件读写、网络请求),必须用 gVisor / Firecracker 隔离。
- REST API 调用:通过 ReAct 的“Action”字段触发。实际落地坑:API 返回格式变化导致解析失败,需加 重试 + 格式校验(如 JSON 解析失败时让 LLM 重新生成)。 执行与反馈循环:Agent 不是一次跑完,而是迭代。关键设计:
- 错误处理:工具调用失败(如 API 超时)时,LLM 应能“重试”或“换方案”。例如:天气 API 挂了,Agent 应尝试另一个数据源,而不是报错退出。
- 终止条件:任务完成(用户确认)、步数超限、或 LLM 判断“无法完成”。实际落地:必须设硬性步数上限(如 20 步),否则 Agent 会无限循环消耗 token。
典型架构:
- 单智能体(AutoGPT / BabyAGI):一个 LLM 实例完成所有任务。优点:简单;缺点:单点故障,一个幻觉导致全链崩。
- 多智能体协作(ChatDev / MetaGPT):分工(如 CEO Agent 规划、Coder Agent 写代码、Tester Agent 验证)。优点:容错好;缺点:通信开销大,需设计 共享记忆(如共享黑板模式)。
实际落地坑 + 解法:
- 坑:Agent 在长链条任务中“忘记”初始目标(如用户要订机票,Agent 中途跑去查酒店)。解法:在每次 LLM 调用时,在 system prompt 里注入 原始目标摘要(如“当前任务:帮用户订北京到上海的机票,已完成:查航班,下一步:选座位”)。
- 坑:工具调用参数幻觉(LLM 编造不存在的 API 参数)。解法:用 约束解码(如 Outlines 库)或 结构化输出(如 JSON mode),强制 LLM 输出符合 schema 的 JSON。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从定义、核心组件、关键设计三个层面回答。定义上,Agent 是 LLM 驱动的完整流程执行系统,核心是自主规划与工具调用。组件上,包括 LLM 推理引擎、规划模块(ReAct / Plan-and-Solve)、记忆模块(短期窗口 + 长期向量库)、工具调用接口(Function Calling / 代码执行)、以及反馈循环。关键设计是错误处理与终止条件——必须设步数上限和重试机制。总结一句:Agent 不是 LLM 套壳,而是把 LLM 当 CPU,用工具当外设,用记忆当缓存,构建一个能自主完成复杂任务的系统。”
4️⃣ 高频追问 & 应对
追问 1:你提到用 ReAct 框架,那如果 Agent 在第三步就陷入循环(重复调用同一个工具),你怎么检测和解决?
检测:维护一个“最近 N 步动作历史”的哈希集合(如最近 5 步的 (工具名, 参数) 对),如果新动作与历史重复,触发循环检测。解法:① 在 prompt 中注入“你正在重复动作,请尝试不同方案”;② 如果重复超过 3 次,强制切换策略(如从 ReAct 切换到 Plan-and-Solve,先生成完整计划再执行);③ 终极方案:设硬性步数上限(如 10 步),超限后让 LLM 总结已做内容并请求用户指导。
追问 2:你的 Agent 需要调用 50 个不同的 API,如何管理这些工具的描述,避免 LLM 在 function calling 时选错?
核心是 工具选择 的 trade-off:把所有工具描述塞进 context 会浪费 token 且增加幻觉。解法:① 分层路由:先让 LLM 判断任务领域(如“天气” vs “电商”),再只注入该领域的 5-10 个工具描述;② 向量检索工具库:把工具描述 embedding 后存向量库,每次根据用户 query 检索 top-5 工具,再注入 prompt;③ 工具描述标准化:每个工具描述必须包含“用途、输入参数 schema、输出格式、示例调用”,并用 JSON 格式,减少 LLM 解析歧义。
追问 3:多智能体协作时,如何解决 Agent 之间的“幻觉传染”(一个 Agent 的错误输出被另一个 Agent 当作事实)?
核心是 信息隔离与验证。解法:① 共享记忆加时间戳:每个 Agent 写入共享记忆时,标注“信息来源”和“置信度”(如“来自 Coder Agent,置信度 0.7”),Reader Agent 可以忽略低置信度信息;② 交叉验证:对关键信息(如代码输出),让两个不同 Agent 独立计算并对比结果,不一致时触发人工介入;③ 设计“仲裁 Agent”:专门负责检查其他 Agent 的输出是否自洽,用 CoT 推理判断是否可信。
5️⃣ 避坑 · 常见错误答法
- ❌ 把 Agent 定义为“LLM + 工具调用”,只提 Function Calling 不提规划与记忆 → ✅ 必须强调 Agent 的核心是完整流程决策,工具调用只是执行层,规划(任务分解)和记忆(状态管理)才是区分 Agent 和普通 API 调用的关键。
- ❌ 说“记忆就是向量数据库”,不提短期记忆管理和上下文窗口限制 → ✅ 必须区分短期(滑动窗口/摘要压缩)和长期(向量库+BM25 混合检索),并指出纯向量检索的精确匹配缺陷。
- ❌ 只提单智能体架构,不提多智能体协作的通信开销和共享记忆设计 → ✅ 如果面试官追问多智能体,必须能说出“共享黑板模式”和“仲裁 Agent”等具体设计,否则显得只做过 demo。
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“记忆模块”切入,讲你如何用向量库做长期记忆,以及 BM25 + 稠密检索的混合策略(HyDE),并指出 RAG 和 Agent 记忆的区别——RAG 是静态检索,Agent 记忆是动态写入。
- 如果你只做过传统 NLP:用“规划模块”类比,讲 ReAct 的“思考-行动-观察”循环类似于传统 NLP 中的“序列决策”(如对话系统中的 DST 和 Policy),但 Agent 用 LLM 替代了规则引擎,核心 trade-off 是推理能力 vs 可控性。
- 如果你是校招无项目:聚焦 AutoGPT 的论文复现,讲你如何用 GPT-3.5 实现一个简单的 Agent(如天气查询),并指出遇到的坑(循环、参数幻觉)和你的解法(步数上限、JSON schema 校验)。强调你理解“LLM 不是万能的,需要工程约束”。
7️⃣ 延伸阅读
- Yao et al., 2023: "ReAct: Synergizing Reasoning and Acting in Language Models"(ReAct 框架原论文)
- Wang et al., 2023: "Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models"
- Lewis et al., 2020: "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks"(RAG 基础,理解记忆模块)
- AutoGPT 项目源码(github.com/Significant-Gravitas/AutoGPT),看单智能体实现中的循环检测和步数控制
- MetaGPT 论文:Hong et al., 2023: "MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework"(多智能体协作架构)