面试指南
本文整理了 Agent 方向的高频面试问题,帮助读者系统性地准备相关面试。
基础概念¶
Q1: 什么是 AI Agent?它与传统的 LLM 调用有什么区别?¶
AI Agent 是以 LLM 为核心推理引擎,具备自主感知、决策和行动能力的智能系统。与传统 LLM 调用的区别在于:
- 传统 LLM 调用是单轮或简单多轮对话,模型只能生成文本;
- Agent 具备工具调用能力,可以与外部环境交互;
- Agent 具备规划能力,可以将复杂任务分解为子步骤;
- Agent 具备记忆能力,可以跨步骤、跨会话保持上下文;
- Agent 具备反思能力,可以根据反馈调整策略。
Q2: 请解释 ReAct 框架的工作原理。¶
ReAct(Reasoning + Acting)是一种将推理与行动交替进行的 Agent 范式。其工作流程为:
- Thought:模型分析当前状态,推理下一步行动;
- Action:根据推理结果选择并执行一个动作;
- Observation:获取动作执行的结果;
- 循环执行,直到得出最终答案。
核心优势是可解释性和灵活性——Thought 步骤使决策过程透明,Observation 使模型可以动态调整策略。
Q3: Function Calling 是如何工作的?模型是如何学会调用工具的?¶
工作流程:
- 开发者在请求中定义可用工具的名称、描述和参数 schema;
- 模型根据用户需求推理出需要调用的工具,生成结构化的调用请求(JSON 格式);
- 客户端执行工具调用,将结果返回给模型;
- 模型基于工具结果生成最终回复。
训练方式:
- SFT 阶段:在训练数据中加入大量「需求 → 工具调用」的样本对;
- RL 阶段:通过强化学习优化工具选择的准确性和参数生成的质量。
核心技术¶
Q4: Agent 的记忆机制有哪些类型?如何设计一个长期记忆系统?¶
Agent 的记忆分为三类:
- 短期记忆:对应 LLM 的上下文窗口,任务结束即丢失;
- 长期记忆:通过向量数据库、知识图谱或文件系统持久化存储;
- 工作记忆:当前任务的临时状态和中间结果。
设计长期记忆系统的关键考虑:
- 存储方式:通常使用向量数据库(如 Chroma、FAISS)进行 embedding 存储;
- 检索策略:语义检索(向量相似度)+ 关键词检索的混合方案;
- 写入策略:根据重要性评分选择性写入,避免存储噪声;
- 遗忘策略:基于时间衰减、容量限制或相关性淘汰低优先级信息。
Q5: 单次规划(Plan-and-Execute)和自适应规划(Re-planning)各有什么优缺点?¶
单次规划:
- 优点:全局视角,步骤之间逻辑连贯,执行效率高;
- 缺点:初始计划可能因信息不足而不准确,执行过程中难以修正。
自适应规划:
- 优点:容错性强,能根据中间结果动态调整策略;
- 缺点:开销更大,频繁重新规划可能导致循环或资源浪费。
实际应用中,通常采用折中方案:先生成一个粗粒度的初始计划,在执行过程中进行有限次数的重新规划。
Q6: 请对比 MCP 和 Function Calling。¶
| 维度 | Function Calling | MCP |
|---|---|---|
| 本质 | 模型的输出能力 | 工具交互的通信协议 |
| 工具发现 | 静态定义在请求中 | 动态发现(tools/list) |
| 跨模型 | 各厂商格式不同 | 统一开放标准 |
| 运行时 | 不支持动态更新 | 支持工具动态注册 |
| 复杂度 | 简单直接 | 需要 Server-Client 架构 |
两者是互补关系而非替代关系:MCP Server 的工具最终通常还是通过 Function Calling 被模型调用。
工程实践¶
Q7: 如何评估一个 Agent 系统的质量?¶
Agent 评估通常从以下几个维度展开:
- 任务完成率:Agent 是否成功完成了目标任务;
- 步骤效率:完成任务所需的步骤数和工具调用次数;
- 准确性:中间结果和最终输出的正确性;
- 鲁棒性:面对错误和异常时的恢复能力;
- 延迟与成本:端到端响应时间和 token 消耗。
常用 Benchmark:
- SWE-bench:代码修复能力评估;
- WebArena:Web 浏览与操作能力评估;
- GAIA:通用 AI 助手能力评估;
- ToolBench:工具调用能力评估。
Q8: 在实际项目中,如何减少 Agent 的幻觉问题?¶
- 工具增强:让 Agent 通过工具获取真实数据,而非依赖模型内部知识;
- 检索增强:通过 RAG 提供准确的上下文信息;
- 事实校验:在关键步骤后增加事实验证环节;
- 置信度评估:让模型对自己的输出给出置信度,低置信度时触发重试或请求人工干预;
- 约束输出:通过 Structured Output 限制模型的输出格式,减少自由发挥的空间。
Q9: 多 Agent 系统中,如何处理 Agent 之间的冲突?¶
- 优先级机制:为不同 Agent 设置优先级,高优先级 Agent 的决策优先执行;
- 投票机制:多个 Agent 各自给出方案,通过投票或加权投票决定最终方案;
- 仲裁者:引入专门的仲裁 Agent,负责裁决不同 Agent 的冲突;
- 辩论机制:让冲突的 Agent 进行多轮辩论,通过推理达成共识;
- 回退机制:无法达成一致时,回退到更保守的默认方案。
Q10: 请设计一个代码 Agent 的整体架构。¶
flowchart TD
U[用户需求] --> P[Planner Agent]
P --> |任务分解| E[Executor Agent]
E --> |代码生成| T[代码工具]
T --> |执行结果| E
E --> |代码审查| R[Reviewer Agent]
R --> |有问题| E
R --> |通过| T2[测试工具]
T2 --> |测试结果| E
E --> |最终结果| U
M[(记忆系统)] --> E
E --> M
核心组件:
- Planner Agent:负责理解需求、分解任务、制定执行计划;
- Executor Agent:负责代码生成、文件操作、命令执行等具体操作;
- Reviewer Agent:负责代码审查、质量检查、错误检测;
- 记忆系统:存储项目上下文、历史操作、错误经验等;
- 工具层:文件读写、终端执行、搜索、版本控制等。
关键设计考虑:
- 使用 ReAct 范式进行推理与执行的交替;
- 每次操作后检查结果,失败时进行反思和重试;
- 通过代码测试验证生成代码的正确性。