阿里边缘 BU 一面:三级 Agent 架构被追问十七层
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 自我介绍,简短。
- 你现在还在实习吗?已经拿到转正 offer 了,为什么还要走?后面还会不会看别家?
- 介绍这个风控归因 Agent 的业务背景、核心场景和整体方案。
- 为什么设计成三级 Agent,两级不行吗?
- 为什么第二层的编排也要单独做成一个 Agent,不能塞进主 Agent 里?
- 主 Agent、编排 Agent、原子子 Agent,职责边界怎么划的?
- 三层之间怎么通信?消息协议长什么样?
- 上下文怎么传递?传给子 Agent 的上下文怎么保证不漏?
- 原来的纯 ReAct 方案,问题只是工具调用不稳吗?
- 这个场景直接 ReAct + Tool,能不能满足需求?
- 加了多层多 Agent,速度会不会变慢?慢多少?
- 三级架构提升了准确率吗?提升集中在哪些场景?
- 如果给你一个月优化这个系统,你先动哪一层?
- 子 Agent 返回结果不合格,怎么重试?重试几次?怎么防止无限循环?
- 一个请求进来,你怎么知道是哪一层出的错?
- 你这套系统的评测集怎么建的?多少条?
- 归因准确率怎么定义?分母是什么?
- 三次召回结果冲突,以谁为准?
- 模型升级了(换基座),这套架构怎么适配?
- 成本怎么算的?单次请求多少钱?
- 如果业务方要求响应时间压到 3 秒以内,你砍什么?
- 手撕:给一批工具调用任务,每个声明依赖的前置任务,同一批内可并行,求最短完成时间并检测环。
《参考解析》
「拆分为什么等于降低复杂度」:这是全场最关键的一问。分散不等于降低,总复杂度可能更高。正确的说法是把复杂度从「单次决策的搜索空间」里换出来:一个 Agent 挂 40 个工具,模型每轮要在 40 个描述里选,选择准确率随候选数单调下降,而且长链路里错一步全错。拆成三层之后,主 Agent 只在 4 个领域里选、编排 Agent 在 8 个能力里选、子 Agent 只在 3~5 个工具里选,单点候选从 40 降到 5,错误被局部隔离、可以单独重试。代价要自己说出来:调度开销、上下文多次搬运、端到端延迟上升,以及可复现性下降。
编排层为什么不用 workflow:workflow 可测、可复现、延迟低,但它的前提是路径能事先写死。风控归因的路径依赖中间结果——查到 A 的结果才知道要不要查 B,而 A 的结果形态事先不确定。硬编码会退化成一棵巨大的决策树,维护成本高于 Agent。这是一个用可复现性换适应性的取舍,答的时候要明确「我认了这个代价」,并且给出补偿手段:关键节点仍做成确定性节点、整条链路留完整 trace 便于回放。
职责边界与通信协议:三层各自只对上一层负责。主 Agent 做意图理解与领域路由;编排 Agent 把领域目标拆成有依赖的子任务序列,决定顺序与并行;子 Agent 只做一件事,输入输出都有严格 schema。通信不传自然语言,传结构化任务包:目标、约束、已确认事实、待验证假设、可用工具白名单、输出 schema。原文材料用 artifact id 引用,需要时再取。
上下文怎么保证不漏:不是「传得多」而是「有契约」。必填字段缺失直接拒收,让上游补,而不是让下游猜。上下文膨胀的解法是分层:短期工作记忆(结构化任务包)+ 外部记忆(artifact 存储)+ 稳定知识(RAG)。真正的坑是「以为传了全文就等于没丢信息」,实际上模型在长上下文里对中段的利用率显著下降。
评测与准确率怎么定义:评测集要从真实工单采样,覆盖长尾与对抗样本,公开集/留出集分开。准确率必须有明确分母:是「每个 case 判对/判错」的 case 级准确率,还是「归因到的每个根因是否正确」的 span 级准确率,两者差别很大。还要区分可归因(有明确答案)与不可归因(信息不足)的样本,后者应该考「是否拒答/是否请求补充信息」。
多次召回结果冲突以谁为准:不能拍脑袋定优先级,要靠证据强度:置信度、来源可靠性、时间新鲜度(越新越可信)、是否可交叉验证。工程上做的是加权融合 + 冲突显式呈现——两个来源给出相反结论时,输出两个假设及各自证据,让下游或人工裁决,而不是硬选一个。
换基座怎么适配:架构上把模型调用收敛到一个适配层,prompt 模板、工具 schema、输出解析都在这一层;评测集是回归门——换模型先跑一遍评测,看哪些 case 退化了,再针对性调 prompt。要警惕的是模型能力分布变化:老模型不擅长的推理在新模型上变好,但老模型擅长的指令遵循可能变差。
成本与 3 秒延迟的取舍:单次请求成本 = 各层 token 之和 × 单价,优化点是减少串行轮次、缓存稳定前缀(prompt caching)、把小任务给小模型。压到 3 秒必须砍串行深度:能并行的子任务并行、能预取的提前预取、把「需要多轮工具调用」的路径改成一次规划 + 批量执行,必要时降级到两层甚至单层,并在返回里标明「本次为快速模式,覆盖度下降」。
手撕:带依赖的任务调度:本质是 DAG 上的关键路径(AOE 网络)。每个节点的最早开始时间 = 所有前驱最早完成时间的最大值,最早完成 = 最早开始 + 自身耗时,全局最大完成时间就是最短总工期。实现用 Kahn 拓扑排序 + 一遍松弛;环检测在拓扑排序结束后检查出队数量是否等于节点数,不等则说明有环,并能通过剩余入度不为 0 的节点回溯出环上节点。三个易错点:重复依赖要去重(否则入度算多)、多前驱取 max 而不是 sum、并行度受限时问题退化成资源约束调度(NP 难),只能启发式——按关键路径长度做优先级的贪心 + 优先队列。