月之暗面(Kimi)一面技术面 · 全场单主题连环追问 · 有手撕 · 结果:挂 22 分钟读完

月之暗面 Agent 开发一面:27 问只考记忆,挂面复盘

Agent 开发岗(大模型应用落地)

面经月之暗面Kimi记忆系统上下文压缩挂面复盘

岗位:月之暗面(Kimi)· Agent 开发岗 轮次:一面技术面,结果:挂 一句话定性:这是一场「单点深挖型」面试,全场只考记忆和上下文一个主题,换个方向问六遍,考你是真做过还是背过。 素材时间线:2026 年 7 月的一手挂面复盘(牛客),整理时间 2026-09-28


0. 一分钟速览

项目内容
公司 / 岗位月之暗面(Kimi)· Agent 开发岗
形式线上单面,1 位技术流面试官,全场约 27 问
有手撕吗有。重排链表(LeetCode 143)
有八股吗少。八股只作为记忆话题的引子出现
考察重心短期记忆实现、历史压缩、总结触发机制、向量召回、RAG 组件、Claude Code 架构
难度感受单题不难,难在同一个主题被换了六种问法盘问,任何背过的部分都会露馅
结果挂。挂点集中在触发机制和工程细节层
价值这是了解「深挖型面试」长什么样的最好样本

1. 面试流程与时间分配

流程:自我介绍 → 短期记忆实现 → 历史压缩与总结 → 向量召回历史对话 → RAG 组件细节 → Claude Code 架构 → 手撕 → 反问

环节面试官在听什么挂点常出现在哪
短期记忆滑动窗口、截断策略有没有真的写过只说「保留最近 N 轮」说不出 token 预算怎么分配
历史压缩总结的触发机制和增量策略说不出「为什么按 token 数触发而不是按轮次」
向量召回相似度检索的原理和组件选型cosine 讲不清几何意义、答不出为什么不用 BM25
RAG 组件切分、Embedding、Milvus、Rerank 的实操只背过流程名词,说不出参数和调试经历
Claude Codeharness 概念、记忆分层设计没拆过 Claude Code 的结构

原帖作者的形容:「面试官是典型的技术流,说话不快,但每个问题都像手术刀——先切进去,再搅一搅,看看你到底是真懂还是背的。」「面试官揪着记忆这一个点,换了六种姿势盘问我。」


2. 追问机制:一个主题的六层问法

把这场面试的追问路径拆出来,是准备任何「深挖型面试」的模板:

  1. 第一层问方案:「多轮对话的短期记忆怎么实现?」
  2. 第二层问参数:「滑动窗口开多大?token 预算怎么分?」
  3. 第三层问触发:「历史压缩的总结什么时候触发?为什么按 token 数不按轮次?」
  4. 第四层问取舍:「增量摘要和全量摘要各什么时候用?」
  5. 第五层问替代:「向量化召回历史对话,cosine similarity 的原理?为什么不用 BM25?」
  6. 第六层问迁移:「Claude Code 的记忆是怎么设计的?harness 是什么?」

第六层是最狠的一问:把你聊了半小时的「记忆」话题甩到一个具体产品上,看你能不能把方案层的东西落到真实系统里。挂在这层的人最多。


3. 逐题要点:记忆主线

3.1 短期记忆实现

问法:「多轮对话的短期记忆怎么实现?」

答题要点:短期记忆的载体就是上下文窗口里的对话历史,工程问题是窗口有限。三个基础手段按层次说:滑动窗口(保留最近 N 轮)、截断(超预算丢最老内容)、摘要压缩(把老历史压成总结文本)。落点给分配方式:系统提示词、检索结果、当前轮、历史各占多少 token 预算,说得出预算分配就是做过的人。

3.2 总结的触发机制(本场挂点之一)

问法:「历史压缩的总结什么时候触发?」

答题要点:常见触发条件是「当前上下文用量超过阈值」。追问的关键题:**为什么按 token 数触发而不是按轮次?**因为每轮的长度差异极大,按轮次触发时,长回复场景会等很久才压缩(窗口已经爆了),短回复场景又压缩得太频繁(浪费一次模型调用和延迟)。按 token 数触发直接对准资源约束,压缩时机可控。

再加一层:触发后做增量摘要(老摘要加新丢弃内容合成新摘要)还是全量重摘要,增量省成本但有误差累积,全量准确但贵,按对话重要程度选。

3.3 向量召回历史对话

问法:「历史对话存下来做检索,cosine similarity 的原理?为什么不用 BM25?」

答题要点:cosine 相似度衡量两个向量方向的夹角,把语义编码进向量后,方向接近意味着语义接近,它能处理「说法不同但意思相同」的历史表述。不用 BM25 的原因:关键词匹配对口语化、换说法的历史对话召回差,用户这轮说「那个方案」,BM25 没法匹配到三轮前讨论「技术路线」的内容,向量可以。加分边界:精确词(型号、人名、代码标识符)向量检索反而弱,生产里混合检索更稳,主动说出这个边界比硬撑「向量万能」好。

3.4 RAG 组件细节

问法:「切分怎么做?Embedding 用的什么?向量库为什么选 Milvus?Rerank 起什么作用?」

答题要点:这四个子题连问,每个都要有具体答案:切分讲策略(按语义边界、重叠窗口)和 chunk 大小的量级;Embedding 讲选型依据(中文效果、维度、成本);Milvus 讲选型理由(规模、索引类型、部署形态);Rerank 讲它解决「召回了但排序不对」的问题,交叉编码器比向量内积准但慢,所以只精排前几十条。

坑:四个子题里有任何一个答「这个当时是同事负责的,我不太清楚」,这场面试基本就结束了。单点深挖型面试就是在找这种边界。


4. Claude Code 与 harness

问法:「用过 Claude Code 吗?它的记忆是怎么设计的?harness 是什么概念?」

答题要点:Claude Code 的记忆分层次——会话内上下文、项目级配置文件(CLAUDE.md,跟着仓库走)、用户级全局配置(跨项目生效),三层的写入时机和生效范围各不相同。harness 指包在模型外层的工程结构:工具注册、权限控制、上下文管理、循环调度,模型负责推理,harness 负责把推理变成可靠的动作。这题的准备方式只有一个:真的拆一遍 Claude Code 的行为,读一遍它的配置体系。


5. 手撕:重排链表

LeetCode 143,原地重排单链表。标准解法三步:找中点、反转后半段、双指针交错合并。原帖作者用数组存节点再按下标重排的取巧做法,被面试官当场识破。深挖型面试的手撕也在验证真实性——取巧解法能过评测机,过不了面试官。


6. 复盘:挂在哪里,怎么补

原帖作者的自评挂点,值得对照自查:

  • 触发机制层没准备:方案名词都会,「为什么这样设计」答不出,第三层开始崩;
  • 组件细节有空白:四个 RAG 子题答崩一个,后面面试官的追问就更狠;
  • 产品迁移没练过:聊了自己项目的记忆方案,被问到 Claude Code 的设计时接不住。

补法按这三条来:

  1. 自己项目里的每个机制,把「为什么这样做、不这样做会怎样」写成一句话答案,背下来;
  2. RAG 全链路(切分、Embedding、向量库、Rerank)每个组件准备一个参数级的细节;
  3. 拆一个真实 Agent 产品(Claude Code 是最常被考的),把它的记忆分层和 harness 结构说清楚。

单点深挖型面试在 Kimi 这类产品公司会越来越常见——他们的业务就是长上下文和记忆,面试官问的就是自己每天在解决的问题。

相关题目:站内题库的「Agent 的记忆系统怎么设计」「上下文压缩怎么做」「Rerank 的作用是什么」都对应这场面试的原题。