百度 Agent 秋招算法岗一面二面面经(多智能体与三级记忆)
- 轮次
- 一面+二面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
一面
- 简单做一下自我介绍。
- 讲讲多 Agent 这套方案的整体业务背景,说说你对多 Agent 整体架构设计的理解。
- 在多 Agent 系统内部,各个智能体分别承担什么样的职责分工?
- 整个多 Agent 体系采用了分层架构,具体分层逻辑是如何设计落地的?
- 如果某个子 Agent 运行异常,出现崩溃、超时或者任务执行失败的情况,系统会设计什么样的容错兜底机制?
- 当前这套多 Agent 系统整体任务完成成功率表现如何?
- 在项目流程当中,是否会由 Agent 自主调用工具 skills?
- 是否可以交由大模型本身来动态编写 skills?
- 系统的长期记忆模块选用什么存储方案,记忆片段的匹配检索逻辑如何实现?
- 聊聊你项目采用的整套评估手段。
- 介绍下你校园相关项目,讲清楚项目整体实现思路。
- 动态路由模块拆解之后,包含哪些子模块?
- 项目里面因果驱动的机制是怎么实现的?
- 实验所使用数据集,是直接使用公开现成数据集吗?
- 最终验证效果,主要依靠下游任务指标做对比吗?
- 算法题:区间差集。
二面
- 请做一个简单自我介绍。
- 挑选一个你最熟悉的项目,完整展开介绍。
- 结合真实业务场景,讲讲这套方案的实际落地使用案例。
- 项目架构设计了三级记忆体系,为什么不能直接用单级架构完成,引入三级结构的必要性是什么?
- 短期记忆直接复用对话上下文即可,那中长期记忆部分是如何做处理维护?
- 记忆数据需要落库保存,记忆相关标注工作是否交由大模型自主完成?如何校验落库记忆数据的正确性?
- 项目里面记忆数据整体规模大概是什么量级?
- 如果要对记忆模块做效果评估,会设计哪些评估指标?
- 是不是依据这份知识被调用之后是否成功解决问题,反过来给文档打上可信度标签?
- 项目提到双引擎存储 + 混合检索策略,请问具体是哪两套存储引擎?
- 两套存储引擎分别服务中期记忆、长期记忆,还是分配别的用途?
- 生成向量嵌入的时候选用什么向量模型?
- 混合检索由向量检索 + 字面检索共同构成,字面检索的实现原理是什么?
- 算法题:生成有效括号;面试官继续追问多种不同实现思路,探讨两种、三种解法的优劣。
- 确认实习情况:如果正式入职,是否接受 base 定在实习所在城市?
《参考解析》
多 Agent 的分层架构与子 Agent 容错:多智能体真正的收益只有两条——上下文隔离(每个子 Agent 只装自己那段信息,避免超长上下文稀释注意力)与并行(独立子任务同时推进)。落到分层上,一般是「编排层 / 执行层 / 支撑层」:编排层负责意图识别、任务拆解、依赖排序与结果汇总;执行层是各领域子 Agent 与工具调用;支撑层是记忆、检索、沙箱、日志与评测。子 Agent 的职责划分要按能力边界而不是按对话轮次来切(检索型、计算型、写作型、校验型),每个子 Agent 的输入输出都用 schema 固定,避免自然语言长文传状态。容错这块面试官要的是分层答案:① 调用级——超时预算(每步设 deadline,避免长尾拖垮全局)、指数退避重试(只对幂等操作)、限流与断路器;② 任务级——子任务失败不直接崩掉全局,编排层按依赖判断是「换一条路径重试」「降级到简版能力」还是「跳过并标注该子任务未完成」;③ 状态级——每步产出落检查点(中间产物写工作区/库),进程崩了能从最后一个检查点续跑,写操作带幂等键避免重复副作用;④ 兜底层——所有尝试都失败时给用户一个诚实的、带缺失说明的结果,并落结构化日志供复盘。还有一个常被追问的点:成功率要能被度量,所以要按任务类型分解统计(而不是只报一个总成功率),把失败归因到「规划错、检索空、工具报错、模型胡编」四类,才谈得上优化。
三级记忆体系为什么必要:单级记忆只有两种极端——要么全塞上下文(贵、会被截断、注意力被稀释),要么全落库靠检索(丢会话的连贯性,指代和省略都接不上)。三级是把「时间尺度」和「存取方式」对齐:短期记忆就是当前会话的原始上下文,延迟最低、随对话滑动窗口或摘要压缩;中期记忆是会话级的结构化沉淀——任务状态、已确认的事实、约束与偏好,通常随会话结束做一次抽取与去重后写库;长期记忆是跨会话稳定的知识(用户画像、历史结论、领域事实),必须持久化并支持语义检索。三级的分工决定了各自的读写策略:短期只读不检索、靠裁剪控制 token;中期「会话内高频读、会话末批量写」;长期「写入要谨慎(错的事实会污染所有后续会话)、读取靠召回 + 重排」。面试官追问「为什么不能单级」时,落到这三个量化理由最有力:上下文窗口与成本的硬上限、跨会话持久性要求(进程重启后要还在)、以及检索粒度要求(长期记忆需要按语义片段召回,而上下文只能按时间顺序整体携带)。
双引擎存储与混合检索:字面检索的原理:双引擎的典型组合是「向量库 + 倒排索引库」——向量库存 embedding,负责语义相似(同义改写、跨语言、模糊表述);倒排库存原始词项,负责精确匹配(型号、错误码、人名、API 名这类「查不到就是查不到」的 token)。字面检索的主流实现是 BM25:把文档切成词项建倒排表,打分由三部分构成——词频 TF 经饱和函数处理(出现 10 次并不比出现 3 次重要 3 倍,避免长文堆词占优)、逆文档频率 IDF(越罕见的词权重越高,让「Kubernetes」这种词压过「的/是」)、以及文档长度归一化(长文档天然更容易命中,需要按平均长度做惩罚),再乘上查询词项的权重求和。它的边界很清晰:同义词、拼写变体、语义改写一律召回不到;而向量检索恰好相反,语义泛化好但对稀有专有名词容易「漂移」到语义相近但事实错误的段落。所以工程上是混合召回 + 融合:两路各取 top-k,用 RRF(按排名倒数加权,不依赖两路分数量纲)或加权归一化分数融合,再交给交叉编码器 rerank 精排。回答时再加一句中文场景的坑:BM25 依赖分词,中文要先分词(或改用 n-gram/字符级倒排),领域词还需要自定义词典,否则专业术语会被切碎导致召回骤降。
手撕「生成有效括号」的多种解法对比:① 回溯 + 剪枝(最常写):递归维护当前串、已用左括号数 open、右括号数 close,剪枝条件是 open < n 才能加左括号、close < open 才能加右括号,到 open == close == n 收集答案。它的搜索树被剪得只剩合法前缀,复杂度等于答案规模 × 串长(第 n 个卡特兰数 C(2n,n)/(n+1)),是面试里最不容易写错的版本。② 按长度 DP / 括号拼接:dp[i] 存 i 对括号的所有合法串,dp[i] 由 "(" + dp[j] + ")" + dp[i-1-j] 枚举 j 构造,逻辑上覆盖了所有「最外层括号匹配位置」的组合;好处是天然去重、便于按字典序回答,坏处是字符串拼接多、内存高。③ BFS / 队列逐层扩展:用队列按层生成,每层只保留 open>=close 的合法前缀,适合需要「按长度递增输出」或加 early-stop 的场景,代价是空间占用比回溯大。④ 值得一提的闭包/迭代法:从 {""} 出发反复做 "(" + s + ")" 与拼接,思路直观但去重成本高。优劣对比的落点是:时间空间上回溯最优、DP 最好解释「为什么不会漏」、BFS 最适合流式或限长输出;面试官继续追问时通常想看你能不能说出剪枝条件为什么充分(任何合法前缀都满足 close <= open <= n),以及 n 较大时应不应该真的把结果全枚举出来(很多时候该返回计数而不是列表,计数用卡特兰数公式或 DP 直接算)。