Swimming as fast as we can...
Swimming as fast as we can...
No summary in your language yet — showing the existing version.
视频围绕一道大厂面试题展开:Claude Code 为什么放弃 RAG,改用 agentic search(grep、glob、find 等 Linux 命令)。回答需从背景、技术缺陷、架构哲学、辩证思考四个层次展开。
回答时需展现“三层”结构:技术实施层(embedding 失效与管线复杂度)、架构选择层(无状态设计理念)、辩证层(承认 Token 成本与概念搜索局限),有理有据即有深度。
This transcript is not in English — you can generate an English translation: read the whole piece, or check it line by line against the original.
背景与事实陈述 面试官:为什么 Claude Code 放弃了 RAG?这个问题最近在大厂面试中频繁出现。我有个学员上个月面大厂 AI 岗就碰上了,面试官问 Claude Code 为什么放弃 RAG,你觉得合不合理?这题考的就是你对 RAG 链路的理解深度,加上你自己的工程判断。接下来我来拆解下这道面试题。 第一步,先把背景交代清楚。回答的时候,第一步先把事情的来龙去脉讲清楚,让面试官知道你是真的跟踪过这个话题。Anthropic 的工程师 Boris 在 2025 年 5 月 The Latent Space 播客里明确说过,Claude Code 早期确实试过 RAG,用的就是标准方案:本地向量数据库加 embedding 检索。但他们很快发现效果不行,最终切换到了他们叫 agentic search 的方式——说白了就是让模型自己用 grep、find 这些 Linux 命令实时搜索代码。Boris 原话是 "It outperformed everything by a lot",而且被追问是什么 benchmark 的时候,他说 "Mostly vibes",主要靠体感。这个回答本身就很有意思,我们一会儿再说。面试的时候你先把这个事实陈述清楚,让面试官知道你是有信息源的,不是在瞎编。 技术缺陷与架构哲学 好,接下来我们讲为什么放弃。很多人会笼统地说 RAG 效果不好,那面试里你得说清楚到底哪里不好。第一个问题也是最致命的,就是 embedding 对代码标识符的语义理解几乎是失效的。你想 `getUserById` 和 `deleteUserById` 这两个函数名,在向量空间里的距离非常近,因为他们共享了大量的 token,但他们的功能完全相反,一个是查询,一个是删除。代码不是自然语言,它是结构化的,精确标识符函数名、类名、变量名本身就是最好的检索关键词,在这种场景下精确匹配天然比语义匹配更可靠。grep 精确命中就不存在一票一投的问题。 第二个问题是 RAG 管线的准确率有一个乘法效应。你想想整个链路:文档切分、embedding 生成、向量检索、重排序、最终生成,每个环节哪怕做到 90% 的准确率,五个环节乘下来就只剩不到 60%。而且这些环节出错的时候,调试是噩梦级别的,你根本不知道是 chunk 切得不好,还是 embedding 质量有问题,还是 re-rank 模型偏了。但 grep 失败的原因只有一个,关键词没匹配上,这种确定性在工程上的价值是巨大的。第三个问题是索引的时效性。代码仓库变化极快,你上午建的索引下午可能就过时了,有人新提交了代码,重构了文件结构,索引就跟实际代码产生了漂移。你要么频繁重建索引付出巨大的计算开销,要么忍受过期索引带来的错误检索。grep 每次都是实时搜索,拿到的永远是当前最新的代码状态,根本不存在同步问题。 讲完技术细节之后,你可以再拔高一层,聊聊架构哲学,这会让面试官觉得你有 depth。Claude Code 的设计遵循的是一个非常经典的原则:无状态设计。这条线从 Unix 管道到 REST API 到 Serverless,在计算机科学里反复被验证过。不见索引意味着零配置,用户 clone 完代码就能直接用,不需要等几分钟构建 embedding;不维护状态意味着零运维负担,没有索引卡住了、缓存损坏了这种问题。而且 Anthropic 内部有一个原则叫 "Everything is the Model",尽量让模型本身去驱动决策,而不是在模型外搭一套复杂的工程管线,模型每变强一分,整个系统就自动变好一分。这其实就是 Rich Sutton 说的 Bitter Lesson 在工程上的体现。还有一个容易被忽略的点是安全性。RAG 方案需要把代码做 embedding 存到某个地方,不管是本地还是云端,这个向量表示本身就是一种信息泄露的风险,学术上已经有研究证明可以从 embedding 反推原始内容。而 grep 完全在本地执行,从架构上就杜绝了这个问题。 最后,面试的时候一定要展现辩证思维,不要把话说死。Claude Code 的方案也有明显的代价,最大的就是 token 消耗。每次搜索都是实时执行,模型要列目录、读文件、做多轮探索,token 用量远高于一次性的向量检索。Mufus 团队就公开批评过这一点,说这是在烧 token。而且对于超大型代码库,grep 的方式在概念级搜索上确实有短板,比如你想找所有跟权限校验相关的逻辑,grep 不一定能覆盖所有变体写法。所以业界目前的共识其实是在走向混合方案:精确搜索处理标识符级别的查找,语义检索处理概念级别的探索,两者互补。Claude Code 选择了激进的那一段,Cursor 选择了向量索引的那一段,未来大概率会在中间某处殊途同归。 最后简单总结一下,你把这些讲清楚,这道题基本就拿满分了。核心就是三层:技术事实层讲清楚 embedding 对代码的失效和管线复杂度;架构哲学层讲清楚无状态设计和 everything is the model 的理念;最后辩证层承认 token 成本和概念搜索的局限,有理有据有深度有边界,面试官想不给高分都难。以上就是对这道面试问题的分析和拆解,这里是丁师兄大模型,持续分享大模型面试干货。需要大模型一对一面试辅导的同学,请见评论区置顶介绍。大家面试加油。