跳到主要内容AI 大模型 Agent 面试精选 15 题:基础概念与框架 | 极客日志PythonAI算法
AI 大模型 Agent 面试精选 15 题:基础概念与框架
综述由AI生成15 道 AI Agent 高频面试题,涵盖基础概念、ReAct 框架、工具调用、规划执行及多 Agent 系统。重点解析了 Agent 的核心组件(规划、工具、记忆、反思)、与传统 LLM 的区别、ReAct 的推理行动循环机制、工具调用的流程与错误处理、任务规划算法以及多 Agent 系统的协作通信设计。适合准备大模型应用岗位面试的技术人员参考。
颠三倒四38 浏览 一、Agent 基础概念篇(3 题)
01|什么是 AI Agent?它的核心组件有哪些?
参考答案:
AI Agent(智能体) 是一个能够感知环境、做出决策并执行行动的自主系统,可以理解用户意图、规划任务、调用工具并完成任务。
核心组件:
- 规划模块(Planning)
- 理解用户意图,分解复杂任务
- 制定执行计划
- 例如:将"帮我订机票"分解为"查询航班"→"选择航班"→"填写信息"→"支付"
- 工具调用(Tool Calling)
- 调用外部工具和 API
- 例如:搜索、计算器、数据库查询
- 扩展模型的能力边界
- 记忆管理(Memory)
- 短期记忆:当前对话的上下文
- 长期记忆:历史对话、用户偏好
- 工作记忆:当前任务的状态
- 反思与修正(Reflection)
工作流程:
用户输入 → 理解意图 → 规划任务 → 调用工具 → 执行行动 → 评估结果 → 返回用户
类型:
- ReAct Agent
- 结合推理(Reasoning)和行动(Acting)
- 交替进行思考和行动
- Plan-and-Execute Agent
- AutoGPT Agent
应用场景:
挑战:
- 工具调用的准确性
- 长期记忆管理
- 错误处理和恢复
- 安全性问题
02|Agent 和传统的 LLM 应用有什么区别?
参考答案:
传统 LLM 应用:
- 被动响应:只能根据输入生成文本
- 无工具调用:无法使用外部工具
- 无状态管理:每次请求独立处理
- 无自主决策:需要用户明确指令
Agent 应用:
- 主动执行:可以自主规划并执行任务
- 工具调用:可以调用外部 API 和工具
状态管理:维护对话历史和任务状态自主决策:可以根据情况调整策略| 特性 | 传统 LLM | Agent |
|---|
| 执行方式 | 被动响应 | 主动执行 |
| 工具调用 | 不支持 | 支持 |
| 状态管理 | 无状态 | 有状态 |
| 任务规划 | 无 | 有 |
| 错误处理 | 无 | 有反思机制 |
| 应用场景 | 文本生成、问答 | 自动化任务、智能助手 |
- 大模型无法直接访问外部信息
- 需要调用工具获取实时数据
- 复杂任务需要多步骤规划
- 需要记忆和状态管理
用户:今天北京天气怎么样?
LLM:我无法获取实时天气信息,建议您查看天气应用。
用户:今天北京天气怎么样?
Agent:调用天气 API → 获取数据 → 返回:北京今天晴天,25 度
03|Agent 的记忆管理有哪些类型?各有什么特点?
- 短期记忆(Short-term Memory)
- 作用:存储当前对话的上下文
- 实现:对话历史缓冲区
- 特点:
- 容量有限(通常几千 tokens)
- 快速访问
- 对话结束后清除
- 应用:保持对话连贯性
- 长期记忆(Long-term Memory)
- 作用:存储历史对话、用户偏好、知识库
- 实现:向量数据库、关系数据库
- 特点:
- 容量大(可存储大量信息)
- 持久化存储
- 需要检索机制
- 应用:个性化服务、知识问答
- 工作记忆(Working Memory)
- 作用:存储当前任务的状态和中间结果
- 实现:任务状态管理
- 特点:
- 应用:多步骤任务执行
- 对话历史压缩
- 使用摘要压缩长对话
- 保留关键信息
- 减少 token 消耗
- 向量检索
- 分层记忆
- 短期记忆:当前对话
- 中期记忆:最近对话摘要
- 长期记忆:重要信息持久化
- 记忆容量限制
- 检索准确性
- 信息更新和删除
- 隐私和安全
二、ReAct 框架篇(3 题)
04|什么是 ReAct?它的工作原理是什么?
ReAct(Reasoning + Acting) 是一种 Agent 框架,通过交替进行推理(Reasoning)和行动(Acting)来完成任务。
- 传统方法:先推理再行动,或先行动再推理
- ReAct:推理和行动交替进行,动态调整策略
- 观察(Observation)
- 思考(Thought)
- 分析当前情况
- 决定下一步行动
- 例如:"我需要搜索更多信息"
- 行动(Action)
- 观察结果
用户:北京的天气怎么样?
Agent:
Thought: 用户想知道北京的天气,我需要调用天气 API。
Action: search_weather(city="北京")
Observation: 北京今天晴天,温度 25 度
Thought: 我已经获取到天气信息,可以回答用户了。
Action: 返回结果给用户
- 动态调整
- 错误恢复
- 发现错误可以立即修正
- 通过观察 - 思考 - 行动循环优化
- 灵活性
| 方法 | 特点 | 适用场景 |
|---|
| ReAct | 推理和行动交替 | 动态环境、需要探索 |
| Plan-and-Execute | 先规划再执行 | 确定环境、复杂任务 |
| Reflex | 直接行动 | 简单任务、快速响应 |
05|ReAct 和 Plan-and-Execute 有什么区别?各适用于什么场景?
ReAct(Reasoning + Acting):
观察 → 思考 → 行动 → 观察 → 思考 → 行动 → ...
Plan-and-Execute(规划 - 执行):
理解任务 → 制定计划 → 执行步骤 1 → 执行步骤 2 → ... → 完成任务
| 特性 | ReAct | Plan-and-Execute |
|---|
| 规划方式 | 动态规划 | 预先规划 |
| 执行方式 | 交替推理和行动 | 按计划执行 |
| 适应性 | 高 | 低 |
| 效率 | 可能较低 | 较高 |
| 错误处理 | 容易修正 | 困难 |
| 适用环境 | 不确定 | 确定 |
- 环境不确定 → 使用 ReAct
- 任务复杂但环境确定 → 使用 Plan-and-Execute
- 可以结合使用:先规划,执行时用 ReAct 调整
06|ReAct 中的 Thought、Action、Observation 分别是什么?它们如何协作?
- Thought(思考)
- 作用:分析当前情况,决定下一步行动
- 内容:推理过程、决策依据
- 示例:"用户想知道天气,我需要调用天气 API"
- 特点:
- 可解释性强
- 帮助理解 Agent 的决策过程
- 可以用于错误分析
- Action(行动)
- 作用:执行具体操作
- 内容:工具调用、API 请求
- 示例:
search_weather(city="北京")
- 特点:
- 可执行的操作
- 有明确的输入和输出
- 可能失败需要处理
- Observation(观察)
- 作用:获取行动结果和环境状态
- 内容:工具返回结果、环境反馈
- 示例:"北京今天晴天,25 度"
- 特点:
1. Thought: 分析任务,决定需要什么信息
2. Action: 执行工具调用获取信息
3. Observation: 获取工具返回结果
4. Thought: 分析结果,决定下一步
5. Action: 继续执行或完成任务
6. Observation: 获取新的结果
...(循环直到任务完成)
任务:查询北京天气并给出穿衣建议
Thought: 用户想知道北京天气,我需要先查询天气信息。
Action: search_weather(city="北京")
Observation: 北京今天晴天,温度 25 度,湿度 60%
Thought: 天气信息已获取,25 度是温暖的天气,我应该给出穿衣建议。
Action: 生成回答
Observation: 任务完成
最终回答:北京今天晴天,25 度,建议穿轻薄衣物。
- Thought 的质量决定 Action 的质量
- 好的思考 → 正确的行动
- 错误的思考 → 错误的行动
- Observation 影响后续 Thought
- 循环直到任务完成
- 限制循环次数,避免死循环
- 验证 Observation 的可靠性
- 优化 Thought 的推理质量
- 处理 Action 失败的情况
三、工具调用篇(3 题)
07|Agent 如何调用工具?工具调用的流程是什么?
- 工具定义
- 定义工具名称、描述、参数
- 注册到 Agent 的工具库
- 例如:
search_weather(city: str) -> str
- 工具选择
- Agent 根据任务选择合适的工具
- 使用 LLM 判断需要调用哪个工具
- 可能同时选择多个工具
- 参数生成
- LLM 根据用户输入生成工具参数
- 验证参数格式和有效性
- 例如:
{"city": "北京"}
- 工具执行
- 调用工具函数或 API
- 处理网络请求、数据库查询等
- 获取执行结果
- 结果处理
- 解析工具返回结果
- 验证结果有效性
- 传递给 LLM 进行后续处理
tools = [{"name":"search_weather","description":"查询指定城市的天气","parameters":{"type":"object","properties":{"city":{"type":"string","description":"城市名称"}}}}]
用户输入:"北京天气怎么样?"
1. LLM 分析:需要调用 search_weather 工具
2. 生成参数:{"city":"北京"}
3. 执行工具:search_weather(city="北京")
4. 获取结果:"北京今天晴天,25 度"
5. LLM 生成回答:"根据查询,北京今天晴天,温度 25 度,适合出行。"
- Function Calling
- LLM 输出函数调用格式
- 解析并执行函数
- 返回结果给 LLM
- Tool Use
- 使用专门的工具调用格式
- 支持多工具并行调用
- 更灵活的参数处理
- API 调用
- 直接调用外部 API
- 处理认证和错误
- 支持异步调用
- 工具选择的准确性
- 参数生成的正确性
- 错误处理和重试
- 工具返回结果的验证
08|如何设计 Agent 的工具系统?需要考虑哪些因素?
- 工具分类
- 信息获取:搜索、查询、读取
- 信息处理:计算、转换、分析
- 信息存储:写入、更新、删除
- 系统操作:文件操作、网络请求
- 工具接口设计
- 统一接口:所有工具使用相同的调用方式
- 清晰描述:工具名称、功能、参数说明
- 类型安全:参数类型定义明确
- 错误处理:统一的错误返回格式
- 工具注册和管理
- 工具注册表:集中管理所有工具
- 权限控制:限制 Agent 可用的工具
- 版本管理:支持工具版本更新
- 动态加载:支持运行时添加工具
- 工具描述
- 清晰的工具名称和描述
- 详细的参数说明
- 示例用法
- 帮助 LLM 正确选择工具
- 参数验证
- 错误处理
- 工具执行失败的处理
- 超时处理
- 重试机制
- 错误信息反馈
- 安全性
class Tool:
def __init__(self, name, description, parameters, func):
self.name = name
self.description = description
self.parameters = parameters
self.func = func
def call(self, **kwargs):
self.validate_parameters(kwargs)
try:
result = self.func(**kwargs)
return {"success": True, "result": result}
except Exception as e:
return {"success": False, "error": str(e)}
def validate_parameters(self, params):
pass
tool_registry = {
"search_weather": Tool(
name="search_weather",
description="查询城市天气",
parameters={"city": {"type": "string", "required": True}},
func=search_weather_api
)
}
- 工具描述要详细准确
- 参数验证要严格
- 错误处理要完善
- 支持工具组合使用
- 提供工具使用示例
09|Agent 工具调用失败时应该如何处理?
- 错误信息反馈
- 重试机制
- 对于临时性错误(网络错误、超时)
- 设置重试次数和间隔
- 指数退避策略
- 降级处理
- 工具失败时使用备用方案
- 返回部分结果
- 提示用户手动操作
- 错误恢复
- Agent 分析错误原因
- 尝试修正参数
- 选择替代工具
def call_tool_with_retry(tool, params, max_retries=3):
for attempt in range(max_retries):
try:
result = tool.call(**params)
if result["success"]:
return result
else:
if is_retryable_error(result["error"]):
time.sleep(2 ** attempt)
continue
else:
return result
except TimeoutError:
if attempt < max_retries - 1:
time.sleep(2 ** attempt)
continue
else:
return {"success": False, "error": "工具调用超时"}
return {"success": False, "error": "工具调用失败,已重试多次"}
- 错误分析
- Agent 分析错误信息
- 判断是否可以修复
- 决定下一步行动
- 参数修正
- 根据错误信息修正参数
- 重新调用工具
- 例如:参数类型错误 → 转换类型后重试
- 替代方案
- 选择其他工具
- 使用不同的方法
- 例如:API 失败 → 使用搜索工具
- 用户通知
- 告知用户工具调用失败
- 说明原因和影响
- 提供替代方案
- 详细的错误日志
- 合理的重试策略
- 优雅的降级处理
- 用户友好的错误提示
四、规划与执行篇(3 题)
10|Agent 如何进行任务规划?规划算法有哪些?
- 任务理解
- 任务分解
- 将复杂任务分解为子任务
- 确定子任务之间的依赖关系
- 构建任务图
- 计划生成
- 计划执行
- LLM 规划(LLM-based Planning)
- 使用 LLM 直接生成计划
- 优点:灵活、适应性强
- 缺点:可能不准确、效率低
- 分层任务网络(HTN)
- 将任务分解为层次结构
- 从抽象到具体
- 适合结构化任务
- 状态空间搜索
- 搜索从初始状态到目标状态的路径
- 使用 A*、Dijkstra 等算法
- 适合确定环境
- 强化学习规划
任务:帮我订一张从北京到上海的机票
规划过程:
1. 任务分解:
- 查询航班信息
- 选择合适航班
- 填写乘客信息
- 支付订单
2. 依赖关系:
查询 → 选择 → 填写 → 支付
3. 执行计划:
Step 1: 调用 search_flights(origin="北京", dest="上海")
Step 2: 分析结果,选择最佳航班
Step 3: 调用 fill_passenger_info(flight_id, passenger_info)
Step 4: 调用 pay_order(order_id)
- 并行执行
- 识别可以并行执行的任务
- 提高执行效率
- 例如:同时查询多个信息源
- 动态调整
- 检查点设置
- 规划准确性
- 处理不确定性
- 动态环境适应
- 计算复杂度
11|Plan-and-Execute Agent 的工作流程是什么?它适合什么场景?
- 任务理解阶段
- 计划制定阶段
- 使用 Planner(规划器)生成详细计划
- 将任务分解为多个步骤
- 确定执行顺序和依赖关系
- 计划执行阶段
- Executor(执行器)按计划执行
- 逐步完成每个步骤
- 收集执行结果
- 结果整合阶段
用户输入
↓
Planner(规划器)
↓
执行计划:[Step1, Step2, Step3, ...]
↓
Executor(执行器)
↓
执行 Step1 → 执行 Step2 → 执行 Step3 → ...
↓
结果整合
↓
返回用户
任务:分析某公司的财务数据并生成报告
Planner 生成计划:
1. 获取公司财务数据
2. 计算关键财务指标
3. 分析财务趋势
4. 生成可视化图表
5. 撰写分析报告
Executor 执行:
Step 1: 调用 get_financial_data(company="XXX")
Step 2: 调用 calculate_metrics(data)
Step 3: 调用 analyze_trends(metrics)
Step 4: 调用 generate_charts(data)
Step 5: 调用 write_report(analysis, charts)
- 系统性强
- 执行效率高
- 按计划执行,减少思考时间
- 可以并行执行独立步骤
- 执行路径清晰
- 可解释性强
- 确定环境
- 复杂多步骤任务
- 需要可解释性
- 需要清晰的执行计划
- 便于审计和调试
- 例如:自动化工作流
12|如何评估 Agent 的规划质量?规划失败时如何改进?
- 规划完整性
- 是否覆盖所有必要步骤
- 是否考虑所有依赖关系
- 是否处理边界情况
- 规划正确性
- 步骤顺序是否正确
- 依赖关系是否合理
- 是否能达到目标
- 规划效率
- 步骤数量是否最少
- 是否可以并行执行
- 执行时间是否合理
- 规划可执行性
- 每个步骤是否可执行
- 是否有必要的工具和资源
- 参数是否完整
- 静态评估
- 动态评估
- 执行计划并观察结果
- 记录执行时间和成功率
- 分析失败原因
- 对比评估
- 增强任务理解
- 使用更详细的提示词
- 多轮对话澄清需求
- 提取关键信息
- 改进规划算法
- 使用更好的规划提示
- 引入规划模板
- 使用 Few-shot 示例
- 验证和修正
- 规划后验证完整性
- 执行前检查可执行性
- 动态调整计划
- 错误分析
原始规划(失败):
1. 查询天气
2. 生成报告
问题:缺少数据分析和可视化步骤
改进规划:
1. 查询天气数据
2. 分析天气趋势
3. 生成可视化图表
4. 撰写分析报告
5. 格式化输出
- 使用规划模板
- 验证规划完整性
- 支持动态调整
- 记录和分析失败案例
五、多 Agent 系统篇(3 题)
13|什么是多 Agent 系统?它有什么优势?
多 Agent 系统(Multi-Agent System) 是由多个 Agent 组成的系统,每个 Agent 负责不同的任务,通过协作完成复杂目标。
- Agent 角色分工
- 规划 Agent:负责任务规划
- 执行 Agent:负责具体执行
- 监督 Agent:负责质量检查
- 协调 Agent:负责 Agent 间协调
- 通信机制
- 消息传递:Agent 之间通过消息通信
- 共享状态:使用共享状态管理
- 事件驱动:基于事件触发协作
- 协调策略
- 集中式:有中央协调器
- 分布式:Agent 自主协调
- 混合式:结合两种方式
- 专业化
- 每个 Agent 专注于特定任务
- 提高执行质量
- 易于优化和维护
- 并行处理
- 多个 Agent 可以并行工作
- 提高系统效率
- 缩短响应时间
- 可扩展性
- 容错性
- 单个 Agent 失败不影响整体
- 可以替换失败的 Agent
- 系统更健壮
- 复杂任务分解
- 将大任务分解给多个 Agent
- 每个 Agent 处理一部分
- 最后整合结果
- 多领域协作
- 不同领域的专家 Agent
- 协作解决跨领域问题
- 例如:技术 + 商业分析
- 质量保证
- 执行 Agent 完成任务
- 监督 Agent 检查质量
- 修正 Agent 修复问题
任务:开发一个 Web 应用
Agent 分工:
- 产品 Agent:需求分析
- 设计 Agent:UI 设计
- 前端 Agent:前端开发
- 后端 Agent:后端开发
- 测试 Agent:质量测试
- 部署 Agent:部署上线
协作流程:
1. 产品 Agent 分析需求 → 传递给设计 Agent
2. 设计 Agent 设计 UI → 传递给前端 Agent
3. 前端 Agent 开发前端 → 传递给测试 Agent
4. 后端 Agent 开发后端 → 传递给测试 Agent
5. 测试 Agent 测试 → 反馈给开发 Agent
6. 部署 Agent 部署 → 完成
- Agent 间通信开销
- 协调复杂度
- 状态一致性
- 冲突解决
14|多 Agent 系统中如何实现 Agent 间的协作和通信?
- 消息传递(Message Passing)
- Agent 之间直接发送消息
- 消息包含任务、数据、状态
- 支持同步和异步通信
- 共享状态(Shared State)
- 使用共享存储(数据库、内存)
- Agent 读写共享状态
- 需要处理并发和一致性
- 事件驱动(Event-driven)
- 基于事件发布订阅
- Agent 订阅感兴趣的事件
- 事件触发 Agent 行动
- 主从模式(Master-Slave)
- 主 Agent 分配任务
- 从 Agent 执行任务
- 主 Agent 整合结果
- 对等模式(Peer-to-Peer)
- 层次模式(Hierarchical)
- 多层次的 Agent 结构
- 上层协调下层
- 类似组织结构
message = {
"from": "agent_a",
"to": "agent_b",
"type": "task_request",
"content": {"task": "analyze_data", "data": {...}, "deadline": "2024-01-01"},
"timestamp": "2024-01-01T10:00:00"
}
class Agent:
def send_message(self, to_agent, message):
pass
def receive_message(self):
pass
def broadcast(self, message):
pass
- 任务分配
- 根据 Agent 能力分配任务
- 负载均衡
- 优先级管理
- 冲突解决
- 状态同步
场景:多个 Agent 协作分析数据
1. 协调 Agent 接收任务
2. 协调 Agent 分配任务:
- 数据清洗 Agent:清洗数据
- 分析 Agent:数据分析
- 可视化 Agent:生成图表
3. Agent 执行任务并通信:
- 数据清洗 Agent → 分析 Agent:发送清洗后的数据
- 分析 Agent → 可视化 Agent:发送分析结果
4. 协调 Agent 整合结果
5. 返回最终结果
- 清晰的通信协议
- 可靠的消息传递
- 处理通信失败
- 监控通信状态
- 优化通信开销
15|如何设计一个高效的多 Agent 系统?需要考虑哪些因素?
- 模块化设计
- 每个 Agent 职责单一
- 接口清晰
- 易于替换和扩展
- 松耦合
- Agent 之间依赖最小
- 通过接口通信
- 独立部署和运行
- 可扩展性
- Agent 角色设计
- 明确每个 Agent 的职责
- 避免职责重叠
- 设计合理的角色分工
- 通信机制
- 协调策略
- 集中式 vs 分布式
- 同步 vs 异步
- 选择合适的协调算法
- 状态管理
- 共享状态 vs 独立状态
- 状态同步机制
- 一致性保证
- 错误处理
┌─────────────────┐
│ 协调层 │
│ (Coordinator) │
└────────┬─────────┘
│
┌────┴────┐
│ ┌───▼───┐ ┌───▼───┐
│Agent1 │ │Agent2 │
└───┬───┘ └───┬───┘
│ │
┌───▼─────────▼───┐
│ 共享状态层 │
│ (Shared State) │
└─────────────────┘
- 日志系统
- 记录 Agent 行为
- 追踪消息传递
- 分析性能瓶颈
- 可视化
- 可视化 Agent 状态
- 显示通信关系
- 监控系统健康
- 错误追踪
class MultiAgentSystem:
def __init__(self):
self.agents = {}
self.coordinator = Coordinator()
self.message_bus = MessageBus()
self.shared_state = SharedState()
def add_agent(self, agent_id, agent):
self.agents[agent_id] = agent
agent.set_message_bus(self.message_bus)
agent.set_shared_state(self.shared_state)
def execute_task(self, task):
plan = self.coordinator.plan(task, self.agents)
results = []
for step in plan:
agent = self.agents[step.agent_id]
result = agent.execute(step.task)
results.append(result)
return self.coordinator.merge(results)
- 清晰的架构设计
- 可靠的通信机制
- 完善的错误处理
- 全面的监控系统
- 持续的性能优化
总结
本文精选了 15 道关于 AI Agent 的高频面试题,涵盖了:
- Agent 基础概念:Agent 定义、核心组件、与传统 LLM 的区别
- ReAct 框架:工作原理、与其他框架对比、核心组件协作
- 工具调用:调用流程、工具系统设计、错误处理
- 规划与执行:任务规划、Plan-and-Execute、规划质量评估
- 多 Agent 系统:系统优势、协作通信、系统设计
- Agent 是能够自主执行任务的智能系统
- ReAct 通过推理和行动交替完成任务
- 工具调用扩展了 Agent 的能力边界
- 任务规划是复杂任务的关键
- 多 Agent 系统通过协作提高效率和能力
- 理解 Agent 的核心概念和工作原理
- 熟悉 ReAct 和 Plan-and-Execute 的区别
- 掌握工具调用的设计和实现
- 了解多 Agent 系统的设计原则
- 能够结合实际场景分析问题
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online