什么是 LLM Agent
P0 · agent_architecture
🏷 标签:llm-agent, agent-architecture, tool-use
1️⃣ 考察意图
面试官想考察你对 LLM Agent 本质的理解,而非背诵定义。核心在于:你是否能区分 LLM Agent 与“套壳聊天机器人”或传统 Rule-based Agent 的差异。刁钻点在于,很多人会笼统回答“能调用工具的 LLM”,但忽略了**规划(Planning)和记忆(Memory)**作为独立模块的设计取舍。答好了能展示你对 Agent 架构的工程理解,以及从“单轮对话”到“多步自主执行”的范式跃迁认知。
2️⃣ 标准答
LLM Agent 是以大语言模型为推理引擎,通过感知环境、自主规划、调用工具、管理记忆来达成复杂目标的智能体系统。它不是简单的“LLM + 函数调用”,而是一个具备完整流程控制能力的架构。
核心组件与工程取舍:
- LLM 推理引擎:负责理解指令、分解任务、生成动作。这里的关键取舍是模型选择:GPT-4 级别模型推理强但延迟高、成本贵;小模型(如 7B 级)速度快但规划易出错。实际落地常用分层架构:用大模型做高层规划(如“搜索天气”),用小模型做低层执行(如“调用 API 格式化参数”)。
- 规划模块:这是 Agent 区别于聊天机器人的核心。常见范式:ReAct:推理(Reason)与行动(Act)交替进行,每一步输出“Thought → Action → Observation”循环。优点是透明可 debug,缺点是 token 消耗大。
- Plan-and-Solve:先一次性生成完整计划,再逐步执行。适合确定性任务,但遇到环境变化(如 API 返回错误)时需重新规划。
- Tree-of-Thoughts:探索多条路径,用 BFS/DFS 搜索最优解。适合复杂推理,但计算开销极高。
- 实际落地的坑:ReAct 容易陷入“循环思考不行动”,需设置最大步数(如 10 步)和重复检测(连续 3 步相同 Action 则强制终止)。 工具调用:将外部 API/函数封装为 LLM 可理解的 schema。关键工程点:
- 函数描述:用 JSON Schema 描述参数和返回值,描述要具体(如“search_weather(city: string, date: string) -> {temp: float, humidity: int}”),避免 LLM 误解。
- 错误处理:API 可能超时或返回 500,Agent 需能重试(指数退避)或切换工具(如搜索失败则用计算器估算)。
- 安全边界:限制工具权限(如只读数据库、禁止删除文件),防止 Agent 执行危险操作。 记忆管理:分短期(对话上下文)和长期(向量数据库)。
- 短期记忆:用滑动窗口(如保留最近 2000 tokens)或摘要压缩(用 LLM 总结历史)。取舍:窗口大则信息全但成本高,窗口小则易遗忘。
- 长期记忆:用 embedding 存储关键信息,检索时用 RAG 方式。坑:记忆污染——Agent 可能把错误中间结果存入记忆,导致后续推理偏差。解法:只存储“已验证”的 Observation,或给记忆加置信度标签。
工作流程示例(以“帮我查北京明天天气并计算后天温差”为例):
- 感知:接收用户指令。
- 规划:LLM 输出 Plan:① 查北京明天天气 → ② 查北京后天天气 → ③ 计算温差。
- 行动:调用
get_weather("北京", "2024-01-15"),返回{temp: -2}。 - 观察:记录结果到短期记忆。
- 循环:继续执行第 2 步,调用
get_weather("北京", "2024-01-16"),返回{temp: 5}。 - 终止:计算 5 - (-2) = 7,输出“温差 7°C”。
与传统 Agent 区别:传统 Rule-based Agent(如聊天机器人)依赖硬编码规则,无法处理未见过的问题;LLM Agent 利用语言模型的泛化能力,能理解模糊指令(如“帮我安排明天的行程”),并通过工具调用完成跨领域任务。但代价是不可靠——LLM 可能产生幻觉,导致规划错误。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,定义上,LLM Agent 是以大模型为推理引擎,具备规划、工具调用和记忆能力的自主系统,区别于聊天机器人。第二,架构上,核心组件包括规划模块(如 ReAct)、工具调用(JSON Schema 封装)和记忆管理(短期+长期),关键取舍是模型大小与成本、规划步数与可靠性。第三,工程落地要注意循环检测、错误重试和安全边界。总结一句:LLM Agent 的本质是让 LLM 从‘对话者’变成‘执行者’,但需要精心设计完整流程控制。”
4️⃣ 高频追问 & 应对
追问 1:如果 Agent 在规划时陷入死循环,你怎么处理?
应对策略:这是 ReAct 模式的常见问题。解法有三:1)设置最大步数(如 10 步),超时强制终止并返回部分结果;2)重复检测——维护一个 Action 历史列表,如果连续 3 步的 Action 和参数完全相同,则判定为循环,触发“切换策略”(如改用 Plan-and-Solve 或直接报错);3)引入随机性——在 LLM 的 temperature 参数上做文章,循环时调高 temperature(如从 0 调到 0.5)让模型跳出固定模式。实际项目中,我常用“最大步数 + 重复检测”组合,能覆盖 90% 的循环场景。
追问 2:如何保证 Agent 调用的工具不会产生安全风险?
应对策略:安全是 Agent 落地的红线。核心原则是最小权限:1)工具定义时,只暴露必要参数(如搜索 API 只允许 GET 请求,禁止 POST 修改数据);2)输入过滤——对 LLM 生成的参数做正则校验(如防止 SQL 注入或路径遍历);3)沙箱执行——工具调用在隔离环境(如 Docker 容器)中运行,限制网络和文件系统访问;4)审计日志——记录每次工具调用的输入输出,便于事后追溯。另外,对于高风险操作(如删除文件),可以加入人工确认环节,Agent 先生成“确认请求”,用户批准后才执行。
追问 3:Agent 的长期记忆怎么避免存储错误信息?
应对策略:记忆污染是 Agent 的致命问题。解法:1)只存储已验证信息——只有经过工具调用返回的 Observation 才存入长期记忆,LLM 推理产生的中间结果(如“我猜天气是 10°C”)不存;2)置信度标签——每条记忆附带一个置信度分数(如工具返回的为 1.0,LLM 推理的为 0.5),检索时按置信度排序;3)定期清理——用另一个 LLM 定期检查记忆库,删除矛盾或过时的条目(如“昨天的天气”)。实际项目中,我还会用时间戳,让 Agent 优先使用最新数据。
5️⃣ 避坑 · 常见错误答法
- ❌ 把 LLM Agent 等同于“能调用 API 的聊天机器人”,只强调工具调用,忽略规划和记忆。 → ✅ 必须指出规划模块(ReAct/Plan-and-Solve)和记忆管理(短期/长期)是 Agent 区别于聊天机器人的核心,并解释它们如何协同工作。
- ❌ 说“Agent 可以完全自主执行,不需要人工干预”。 → ✅ 强调 Agent 的可靠性问题:LLM 可能产生幻觉、工具可能失败、规划可能出错。实际落地需要人工在环(Human-in-the-Loop)或安全兜底(如最大步数、错误重试)。
- ❌ 只提概念,没有工程细节(如“用 ReAct 框架”但不解释具体怎么实现)。 → ✅ 给出具体方法名(如 JSON Schema 描述工具、滑动窗口管理记忆、重复检测算法),并说明 trade-off(如大模型 vs 小模型的分层架构)。
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“记忆管理”切入,对比 RAG 的检索增强与 Agent 的长期记忆异同。强调 Agent 需要更复杂的记忆更新策略(如置信度标签、时间戳),而 RAG 更侧重静态文档检索。可以举例:你在 RAG 项目中用向量数据库存储知识,迁移到 Agent 时增加了“只存储工具返回结果”的过滤逻辑。
- 如果你只做过传统 NLP:用“规划模块”类比迁移。传统 NLP 的意图识别和槽位填充(如对话系统)可以看作 Agent 规划的简化版。强调 Agent 的规划是动态的、多步的,而传统方法依赖静态规则。可以举例:你之前用规则引擎处理用户指令,现在用 LLM + ReAct 实现更灵活的规划。
- 如果你是校招无项目:聚焦论文复现 demo。可以提你复现了 ReAct 论文(Yao et al., 2023)的核心逻辑,用 GPT-3.5 API 实现了“搜索+计算器”的简单 Agent,并记录了成功率与调用次数。强调你理解了规划循环和工具调用的工程细节,并发现了“重复检测”的必要性。
7️⃣ 延伸阅读
- ReAct: Synergizing Reasoning and Acting in Language Models (Yao et al., 2023)
- Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning (Wang et al., 2023)
- Tree of Thoughts: Deliberate Problem Solving with Large Language Models (Wei et al., 2023)
- Toolformer: Language Models Can Teach Themselves to Use Tools (Schick et al., 2023)
- LangChain Agent 官方文档:理解 ReAct 和 Tool Calling 的工程实现细节