项目面试题:多 Agent 监管协同系统

围绕多 Agent 监管协同系统(smart-voyage)整理的高频面试题,覆盖 Agent 划分、A2A/MCP、ReAct、意图识别、编排稳定性,附参考答案

多 Agent 监管协同系统(smart-voyage)项目面试题。点击折叠区查看答案。

二、多 Agent 监管协同系统(smart-voyage)

1:A2A 和 MCP 到底有什么区别?

查看答案
  • MCP 解决"Agent 连工具":工具以 MCP Server 标准化暴露,Agent 作为客户端发现、调用、拿结果

  • A2A 解决"Agent 连 Agent":AgentCard 声明技能,主控发现后委派任务、跟踪状态

我系统里两者配合:主控通过 A2A 派活给业务 Agent,业务 Agent 再通过 MCP 调工具执行。

2:A2A 具体怎么实现?踩过什么坑?

查看答案
A2A 基于 JSON-RPC 和 Agent Card 实现服务发现与通信。

3:MCP Server 暴露了哪些 tool?参数 schema 怎么定义?

查看答案
5 个 MCP 服务用 FastMCP 的 @mcp.tool 注册工具,类型注解自动生成 JSON Schema。

4:ReAct 流程讲一下?(smart-voyage)

查看答案

ReAct即推理加行动,模型边思考边调用工具,根据反馈循环决策,像人一样解决问题,避免纯推理或盲目操作的弊端。

要点拆解:Thought(推理缺什么)→ Action(调工具)→ Observation(结果回填)循环

为防失控,我加了三重护栏:最大步数、同名同参动作去重、整体超时。写操作不进工具表,由循环外确定性链路执行,保证自主调查只读不写。

举例(找出近 30 天投诉激增的高风险商户):

  1. 第 1 轮:查投诉分布
  2. 第 2 轮:查哪些商家
  3. 第 3 轮:整改历史和营业状态
  4. 第 4 轮:信息足够,总结输出

5:防止 ReAct 流程进入死循环,具体是如何实现的?

查看答案

三重护栏机制来防止死循环:

  1. 最大步数限制:默认 10 步超时,超过后返回兜底文案
  2. 动作去重:通过哈希指纹记录已执行的动作和参数组合,遇到重复查询会返回提示让模型换角度调查
  3. 整体超时控制:设置 120 秒时间上限

这三重机制确保即使模型陷入循环思考,也能被强制终止。另外,工具结果超长时会截断保护上下文窗口,避免 token 溢出导致异常。

6:用户意图识别错了怎么办?

查看答案
意图限定白名单,非法直接拦截;抽取参数标注来源,模型猜的高风险字段一律剔除并追问;身份字段用登录态强制覆盖,错误参数到不了 Agent。

7:意图漂移的原理、原因与解决方案

查看答案
上下文噪声累积导致,截断过长上下文,只传最近五轮对话。

8:主 Agent 是直接执行,还是先生成计划?

查看答案
  • 单意图:不生成计划,直接执行

  • 多意图:先生成计划,Plan-Execute

9:什么情况下串行执行,什么情况下并行执行?

查看答案
  • 有依赖就串行:多意图编排中前一步的 task_id 是后一步入参,还要逐步鉴权、失败即断

  • 无依赖就并行:不同请求由各业务 Agent 独立处理

10:不同 agent 之间的调度是怎么处理的?

查看答案
靠中枢管理:优先级、负载均衡、失败重试。

11:复合工作流失败怎么办?

查看答案
  • 请求层:失败重试

  • 模型格式错误等:添加校验拦截、阻断、降级

12:子 Agent 执行失败怎么办?

查看答案
连接类失败会重试,业务失败就终止执行,返回失败原因和已完成步骤结果。

13:工具或子 Agent 连续失败时怎么防止拖垮系统?

查看答案

分三层防控:

  1. 有限重试加退避:只重试连接类瞬时故障,超时不重试防重复执行
  2. 依赖降级:如 Redis 故障后冷却 60 秒并降级 MySQL
  3. 编排快速失败:任一步失败立即终止整条流程,防止故障扩散拖垮系统

14:循环纠错详细讲讲。

查看答案
第一次报错带上报错信息再来一遍,还是报错,就用百炼平台的 API 强模型纠错。

15:如何避免断点恢复时重复写数据库或重复发消息?

查看答案
采用幂等键去重,结合状态机校验;写入前查已处理标记,确保断点恢复时操作不重复执行。

16:Multi-Agent 最大的坑?

查看答案
拆得越多,越难维护。

17:多个并行 Agent 同时写 State,如何避免互相覆盖?

查看答案

并行 Agent 写 State 防覆盖,核心是"只增不改":

  • 用 Reducer 合并而非覆盖,比如 Annotated[list, operator.add],各节点只追加自己的结果

  • 必须写同一 key 的就串行化

  • 跨图共享数据用 Store 加乐观锁兜底

18:多个 Agent 返回结果后怎么聚合?

查看答案
主控制器通过 A2A 分发子任务,并行调用各 Agent,用 asyncio.gather 收集结果;单个失败则降级或重试,不阻塞整体;最后由主控统一汇总,LLM 生成最终答复返回用户。

19:如果两个子 Agent 的结果冲突怎么办?

查看答案
  • 先检测冲突:对比关键字段或用 LLM 判断矛盾点

  • 再按策略仲裁:优先采信权威数据源,或让第三方 Agent 复核

  • 无法判定时降级:向用户如实说明分歧并请求决策,不静默合并

20:多 Agent 协同如何保证稳定性?

查看答案

核心四点:

  1. 职责单一:主控只做编排,子 Agent 各管一域,便于独立扩缩容
  2. 任务 ID 全链路传递:状态可追溯
  3. 失败即终止并降级兜底:避免错误扩散
  4. 每个节点有超时与重试

再靠可观测性日志定位问题,整体稳定可控。

21:你们怎么评估 Agent 项目的效果?

查看答案
核心看任务完成率与准确率。Agent 没法用 RAGAS 那种框架评估,我们针对不同的功能,创建了一堆单元测试,测不同的指标:时间和准确率这些。

22:在多 Agent 协作过程当中,你是怎么去观测 Agent 的协作链路的?

查看答案

我用全链路追踪观测协作链路:

  • 主控生成 trace_id 随 A2A 请求透传,子 Agent 日志按 trace_id 聚合

  • 每步记录输入输出、耗时和 token

  • 再配 LangSmith 可视化状态图,快速定位哪个 Agent 出错,并统计耗时和 token 优化链路

23:假设链路中有一个 Agent 发生故障或表现异常,你该怎么去排障?可以通过哪些手段或方法?

查看答案
我们接入了 LangSmith,这个让项目有可观测性的能力,通过这里能看出来异常情况。