多智能体面试高频问题
核心结论(3 条必记)
- 先给结论,再展开细节 -- 面试官最想听到的是核心判断
- 有对比才有选择 -- 说明不同方案的优劣,体现系统性思维
- Demo 能跑不等于生产可用 -- 体现工程思维,关注容错、监控、安全
一、架构类
1. 什么时候用 Multi-Agent,什么时候单 Agent 就够了?
答题要点:
先从单 Agent 开始 -> Prompt 超 2000 token 时模型注意力下降 -> 任务步骤超 5 步需要不同专业能力 -> 需要并行处理子任务提高效率 -> 业务流程有明确分工环节 -> 需要不同 Agent 使用不同模型(成本优化)
单 Agent 适用于:简单查询、步骤少的任务、对延迟敏感的场景。
2. Agent 间的通信机制有哪些?各有什么优劣?
答题要点:
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 共享状态 | 简单直接 | 状态膨胀 | 简单流程 |
| 消息传递 | 解耦灵活 | 实现复杂 | 大规模系统 |
| 事件驱动 | 异步可扩展 | 调试困难 | 实时系统 |
生产系统推荐使用共享状态(如 LangGraph 的 StateGraph) -> 简单且可控 -> 状态膨胀时考虑消息传递。
3. 如何设计一个高可用的 Multi-Agent 系统?
答题要点:
服务层多副本部署 + 自动扩缩容 -> 存储层 Redis Sentinel 集群 + 向量数据库副本 -> 模型层多厂商互备 + 自动切换 -> 编排层任务状态持久化 + 断点续跑 -> 监控层全链路 Trace + 多维度告警。
4. 如何避免 Agent 间的死循环?
答题要点:
设置最大迭代次数(硬限制) -> 定义质量达标的终止条件(软限制) -> 设置全局超时(兜底保护) -> 监控连续无改进的次数 -> 提供手动中断接口 -> 设置 Token 消耗上限。
5. ReAct、Plan-Execute、Reflexion 三种模式的区别?
答题要点:
| 模式 | 特点 | 适用场景 |
|---|---|---|
| ReAct | 思考-行动-观察循环 | 简单任务,1-3轮 |
| Plan-Execute | 先规划再执行 | 多步骤任务,5-10步 |
| Reflexion | 执行后反思改进 | 高质量输出,需迭代 |
核心区别:ReAct 是实时循环 -> Plan-Execute 将规划与执行分离 -> Reflexion 在 ReAct 基础上增加自我反思环节。
二、RAG 类
6. RAG 的核心流程是什么?
答题要点:
文档加载 -> 文本切片 -> Embedding -> 向量存储 -> 用户查询 -> Query Embedding -> 向量检索 -> 上下文拼接 -> LLM 生成回答。
每个环节优化空间:切片用 RecursiveCharacterTextSplitter(chunk_size=500) -> 中文 Embedding 用 bge-large-zh-v1.5 -> 检索用混合检索 + Rerank -> 上下文拼接控制总长度避免超出窗口。
7. 如何优化 RAG 的检索精度?
答题要点:
Query 优化(HyDE、Query 改写、多 Query) -> 检索策略(混合检索向量+BM25、MMR 多样性) -> 结果精排(Cross-Encoder Rerank) -> 元数据过滤(按部门、文档类型)。
8. 长文本怎么处理?
答题要点:
| 策略 | 特点 | 适用场景 |
|---|---|---|
| Map-Reduce | 分片独立处理,可并行 | 大量独立片段 |
| Refine | 逐步精炼,上下文连贯 | 需要连贯性的场景 |
| Stuff | 直接塞入 Prompt | 短文本 |
大多数场景用 Map-Reduce -> 需要连贯性时用 Refine -> 短文本直接 Stuff。
9. 如何做知识库的增量更新?
答题要点:
文档指纹法计算 hash 识别变更 -> 只对新增/变更文档处理 -> 版本管理知识库集合支持灰度切换 -> 增量 Embedding 只处理新切片 -> 设置过期策略自动清理 -> 定期全量对比确保完整性。
10. 向量数据库怎么选?
答题要点:
| 场景 | 推荐 | 原因 |
|---|---|---|
| 开发测试 | Chroma | 轻量、嵌入式 |
| 中等规模 | Qdrant | 功能丰富、性能好 |
| 大规模生产 | Milvus | 分布式、高可用 |
| 多模态 | Weaviate | 支持混合检索 |
选型维度:数据规模 -> QPS 要求 -> 部署方式 -> 功能需求(过滤/混合检索)。
三、工具类
11. Function Calling 的原理是什么?
答题要点:
开发者定义工具的 JSON Schema -> 将工具定义随消息发送给 LLM -> LLM 判断是否需要调用工具 -> 输出 JSON 格式的调用指令(不是自然语言) -> 开发者解析指令并执行实际工具 -> 将工具结果返回给 LLM 继续推理。
关键点:LLM 本身不执行工具,只生成调用指令 -> 执行由开发者控制 -> 因此可以加入校验、限流、降级等安全措施。
12. 如何设计一个好的工具?
答题要点:
名称用动词+名词格式(search_web、query_database) -> 描述清晰说明功能和限制(含适用和不适用场景) -> 参数类型明确有描述有默认值(有限选项用 enum) -> required 只放真正必须的参数 -> 返回统一格式包含成功/失败状态。
反面案例:工具名太抽象(如 "process") -> 描述太简短(如 "处理数据") -> 参数没有类型约束。
13. 工具调用失败怎么处理?
答题要点:
分三层处理:网络超时/临时故障用指数退避重试(最多3次) -> 主工具不可用时切换到备选工具(降级) -> 所有方案都失败时明确告知用户并给出替代建议。
注意:参数错误不要重试 -> LLM 生成的错误参数不会自动变对 -> 应该反馈错误让 LLM 重新生成。
14. 如何防止 Agent 乱调用工具?
答题要点:
精简工具列表(每个 Agent 最多 3-5 个) -> 工具描述清晰明确说明适用场景 -> 加入工具调用校验(参数类型、取值范围) -> 设置工具调用频率限制 -> System Prompt 中明确说明何时该用/不该用工具。
四、Prompt 类
15. 如何设计一个好的 System Prompt?
答题要点:
好的 System Prompt 包含五个部分:角色定义(明确身份和专业领域) -> 行为规则(能做/不能做/不确定时怎么处理) -> 输出格式(JSON Schema 或明确格式要求) -> 示例(1-3 个正确行为示例) -> 边界处理(超出能力范围时如何响应)。
关键原则:具体 -> 明确 -> 有约束 -> 避免模糊描述。
16. Few-shot 怎么选择示例?
答题要点:
代表性覆盖主要输入类型 -> 多样性包含正常/边界/异常三种情况 -> 简洁性每个示例聚焦一个要点 -> 数量 3-5 个最佳(过多分散注意力) -> 高阶用法基于语义相似度动态选择最相关的示例。
17. 什么时候需要精调(SFT)?
答题要点:
Prompt 工程已达瓶颈优化空间有限 -> 需要特定领域的专业输出风格 -> 需要稳定输出特定格式 -> 需要显著降低推理成本(小模型+精调 > 大模型+Prompt) -> 有足够的高质量标注数据(至少 500 条)。
注意:精调不是万能的 -> 数据质量 > 数据数量 > 精调方法。
18. 如何让 Agent 稳定输出 JSON?
答题要点:
三层保障:Prompt 层明确指定 JSON Schema 和示例 -> API 层使用 response_format={"type": "json_object"} -> 校验层用 Pydantic 校验 + 自动重试。
for attempt in range(3):
response = llm.invoke(prompt)
try:
return Model.model_validate_json(response)
except ValidationError:
prompt += "\n格式有误,请严格按 JSON Schema 输出"五、治理类
19. 如何防止 Prompt 注入?
答题要点:
多层防御:输入检测(正则匹配可疑模式) -> 输入清理(移除特殊标记、截断过长输入) -> Prompt 加固(System Prompt 加入安全规则) -> 输出审核(检查是否泄露系统信息) -> 权限控制(限制 Agent 可执行操作)。
关键原则:不要期望单一防线能挡住所有攻击 -> 多层防御才是正道。
20. 如何控制 Agent 的成本?
答题要点:
三层防线:请求级单次 Token 上限(如 8000) -> 任务级单次成本上限(如 5元) -> 系统级每日/每月预算上限。
优化手段:简单任务用小模型 -> 缓存相似查询结果 -> 精简 Prompt 长度 -> 控制输出长度 -> 设置迭代次数上限。
21. 如何保证 Agent 的输出安全?
答题要点:
双向审核:输入审核检测 Prompt 注入和敏感请求 -> 输出审核检查是否泄露敏感信息和符合规范。
具体措施:敏感信息自动脱敏(手机号/身份证/银行卡) -> 内容安全检测(政治/暴力/色情) -> 格式合规检查 -> 事实性检查(是否存在明显事实错误)。
22. 如何做 Agent 的可观测性?
答题要点:
三层可观测性:日志(结构化记录输入输出、耗时、Token) -> Trace(全链路追踪,可视化执行链路) -> 指标(实时统计准确率、延迟、成本、错误率)。
工具选择:LangChain/LangGraph 生态首选 LangSmith -> 框架无关用 AgentOps -> 需要深度定制时自建。
关键指标:请求成功率 -> P95 延迟 -> Token 消耗和成本 -> 用户评分趋势。