m佬阿里国际AI研发一面
面试体验#
面试体验很好。一面主要围绕 AI 项目、Agent 工作流、任务修正、回退机制、工具注册、记忆系统和 RAG 检索展开。
问题记录#
- 先做一下自我介绍。
- 简历里的 AI 相关项目是通过自学仿照某类产品做的吗?能简单讲一下吗?
- 这个项目目前跑起来哪些具体的场景化应用?
- 如果要做一个“定时触发任务并自动通知某个人”的场景,在你的系统里会怎么落地?需要考虑哪些模块?
- 这个场景更像 workflow 还是 agent?为什么?
- 假设用户先发起一个查询任务,随后补充说参数写错了,要把原来的参数改成新的参数,怎么让 agent 快速、优雅地完成修改?
- 如果只通过 prompt 让 agent 感知“这是一次更正”,它怎么判断这条新消息是修改前一个任务,还是新的独立任务?
- 在 React / Agent Loop 已经执行中的情况下,如何处理用户中途插入的纠错信息?
- 如果一个任务已经执行到多轮,怎么判断应该回退到哪一轮、哪个节点重新执行?
- 如果通过模型判断需要回退的节点,如何控制成本和稳定性?
- 协调者和子 agent 的设计里,上层协调者和正在工作的下层 agent 之间怎么取舍和平衡?
- 如果子 agent 重启或重新执行,旧结果应该如何抛弃?怎么定义结果失效?
- 如果一直向上回溯 Loop 节点,会带来哪些开销和不确定性?
- 本地轻量工具注册表是做什么的?和正常的 MCP 工具有哪些区别?
- 项目里用了记忆吗?
- 如果线上生产环境里要构建一个面向 C 端用户的 Agent 记忆模块,会考虑哪些因素?
- Agent 的记忆应该怎么分层?
- 当前会话记忆、每日摘要记忆、长期用户记忆之间有什么区别?
- 如果用户问一个新问题,但历史记忆里有相关偏好,agent 怎么处理?
- 这里的 RAG / 检索流程应该怎么设计?
- 在大规模知识库场景下,如何高效召回用户真正需要的文档?
- 除了 query rewrite、多路召回之外,还有哪些思路可以提升召回效率?
- 有什么想问我的?
参考答案(AI 生成)#
以下答案由 AI 生成,仅供面试复盘参考。
1. 定时触发任务并自动通知某个人,怎么落地?#
答:可以拆成任务配置、调度器、执行器、通知通道、权限与审计五个模块。用户创建任务时保存触发规则、目标对象、执行参数和通知方式;调度器按 cron 或延迟队列触发;执行器调用工具或业务 API;通知模块接入 IM、邮件或站内信;审计模块记录谁创建、何时触发、执行结果和失败重试。
2. 这个场景更像 workflow 还是 agent?#
答:固定步骤、固定触发、固定通知对象的场景更像 workflow。引入动态判断、工具选择、异常分支、自主规划和多轮纠错后,它会向 agent 演进。工程上可以用 workflow 承载确定性主链路,用 agent 处理非结构化输入、异常解释和动态补全。
3. 用户补充参数写错了,怎么让 agent 快速完成修改?#
答:要把用户消息识别成 correction event,并绑定到已有任务上下文。系统可以维护 task id、参数版本、执行状态和依赖图;新消息进来后先做意图分类和指代消解,定位被修改的参数,再只回滚受影响的节点,复用已有结果。执行前生成 diff 给用户或协调器确认,减少整条链路重跑。
4. 怎么判断更正消息属于旧任务还是新任务?#
答:只靠 prompt 风险较高,更稳的是结合会话状态和结构化任务管理。可以根据时间窗口、显式指代、最近活跃 task、参数相似度、用户意图分类和任务状态判断;置信度低时让模型发起澄清。系统层面要保存 task graph 和 message-to-task 映射,让模型判断有可依赖的事实。
5. Agent Loop 执行中怎么处理中途纠错?#
答:把中途纠错作为高优先级事件注入事件总线。执行器检查当前节点是否可中断;可中断时暂停并保存 checkpoint;不可中断时等待节点结束后进入修正流程。随后根据影响范围重算计划,标记旧节点结果失效,并从最近可复用 checkpoint 继续执行。
6. 多轮任务怎么判断回退到哪个节点?#
答:每个节点都要记录输入、输出、依赖、工具调用和产物版本。参数变更后先做依赖分析,找到所有直接依赖该参数的节点,再向下标记受影响节点;最早受影响且具备 checkpoint 的节点就是回退点。模型可以辅助判断语义影响,最终由结构化依赖图约束回退范围。
7. 模型判断回退节点时怎么控制成本和稳定性?#
答:先用规则和依赖图做粗筛,只把候选节点、参数 diff 和关键上下文交给模型判断。模型输出必须结构化,比如 affected_nodes、reason、confidence;低置信度走保守回退或人工确认。线上还要记录判断结果和真实执行结果,用评测集持续回归。
8. 协调者和子 agent 怎么取舍?#
答:协调者负责目标拆解、任务分配、全局状态、预算控制和最终验收;子 agent 负责局部执行和专业工具调用。权衡点是自治程度和可控性:子 agent 太自由会带来成本和不确定性,协调者管得过细会降低并行效率。实践中可以让协调者掌握计划、权限和终止条件,子 agent 在明确边界内执行。
9. 子 agent 重启后旧结果怎么定义失效?#
答:结果要绑定输入版本、工具版本、上下文版本和执行时间。只要关键输入或依赖版本变化,旧结果就标记为 stale;如果产物已经被下游节点消费,需要触发下游失效传播。可以用 result id、version、status、dependency hash 管理结果生命周期。
10. 一直向上回溯 Loop 节点有什么问题?#
答:主要问题是成本上升、链路变长、状态不确定和结果抖动。回溯越靠前,受影响节点越多,复用率越低,也更容易引入新的模型随机性。工程上要限制最大回退深度、保留 checkpoint、做差量执行,并优先从结构化依赖图定位最小回退范围。
11. 本地轻量工具注册表是什么?和 MCP 工具有何区别?#
答:本地轻量工具注册表可以理解为应用内部的 tool catalog,记录工具名、参数 schema、权限、路由、超时和描述,用于快速注册和调用本地函数或内部 API。MCP 更像标准化协议,强调跨客户端、跨工具服务的统一连接、能力暴露和上下文交互。轻量注册表实现成本低,MCP 生态互通性更强。
12. C 端 Agent 记忆模块考虑哪些因素?#
答:要考虑用户授权、隐私合规、可解释、可删除、可纠错、跨设备同步、召回准确性、记忆过期和成本。C 端记忆尤其要避免把临时偏好永久化,也要避免错误记忆长期影响体验。产品上需要提供记忆查看、编辑、关闭和清除入口。
13. Agent 记忆怎么分层?#
答:可以分成会话短期记忆、任务级工作记忆、周期摘要记忆、长期用户记忆和领域知识记忆。会话记忆服务当前对话,任务记忆保存执行状态,周期摘要沉淀阶段性事实,长期记忆保存稳定偏好和画像,领域知识通过 RAG 检索补充外部事实。
14. 当前会话记忆、每日摘要记忆、长期用户记忆区别是什么?#
答:当前会话记忆强调实时上下文和最近指代;每日摘要记忆强调把一天内多轮交互压缩成阶段性事实;长期用户记忆强调稳定、可复用的偏好、身份信息和长期目标。三者在生命周期、召回频率、置信度要求和隐私等级上都不同。
15. 用户新问题和历史偏好冲突时怎么处理?#
答:当前显式意图优先,历史偏好作为弱约束参与排序和生成。系统可以把历史记忆作为候选上下文注入,并标记来源和时间;当新问题与历史偏好冲突时,优先执行当前请求,同时更新或降低旧记忆权重。必要时向用户确认偏好是否发生变化。
16. RAG / 检索流程怎么设计?#
答:典型流程是 query 理解、改写、召回、过滤、重排、上下文压缩、生成和引用溯源。召回层可以组合关键词、向量、结构化索引、图关系和历史行为;过滤层做权限、时间、业务域和语言过滤;重排层根据语义相关性、权威性和新鲜度排序;最终只注入高置信片段。
17. 大规模知识库如何高效召回真正需要的文档?#
答:先用元数据和权限缩小搜索空间,再做多路召回和 rerank。可以按业务域、文档类型、语言、时间、作者、产品线建立索引;召回时结合 BM25、向量、标题匹配、引用关系、点击反馈和用户画像;最后用 reranker 精排,配合缓存热门 query 和召回结果。
18. 提升召回效率还有哪些思路?#
答:可以做分层索引、文档摘要索引、chunk 与 document 双层召回、实体链接、知识图谱、query 分类路由、用户行为反馈、LLM rerank、负样本训练和召回评测集。工程上还要关注索引增量更新、冷热分层、缓存、并行检索和超时降级。