最近罗小黑(化名)听说Agent开发很好面试,薪资也高,于是就预约了面试,面试的时候面试官说我看你的简历里提到对 AI、Vibe Coding、Agent 有很深的理解。刚好我对这些前沿技术也了解,那我们就从最简单基础的开始吧。公众原文
👨‍💼面试官:很多 AI Coding 产品都在宣传自己用了 RAG(Retrieval-Augmented Generation),那你先解释一下什么是 RAG?
🧑‍💻求职者:RAG 本质就是把需要的信息提前建立索引,在模型回答之前先检索,再把检索结果拼接进 Prompt。流程一般是:

用户问题
│
▼
Embedding
│
▼
向量数据库
│
Top K Retrieval
│
▼
LLM

例如:

整个项目
│
切分 Chunk
│
Embedding
│
Vector DB
用户:"LoginService 在哪里?"
↓
Retriever
↓
找到最相关几个 Chunk
↓
LLM 回答

👨‍💼面试官:既然 RAG 这么优秀,为什么像 Aider、Cline 还有 Anthropic 官方出的 Claude Code,作为目前最顶尖的 AI 编码工具,它们无一例外都放弃了传统基于向量数据库的 RAG(检索增强生成)机制。你觉得这是为什么?
🧑‍💻求职者: 这是一个非常深刻的架构选择。简单来说,传统的向量 RAG 机制在“代码”这种高度结构化的数据面前,遭遇了水土不服。Claude Code 放弃它,主要有四个核心原因:结构不匹配、索引滞后、上下文红利以及 Agent 智能的进化。
👨‍💼面试官:心想小伙子说的好像我都听不懂啊,要是忽悠我看我怎么整你,展开说说什么叫“结构不匹配”?
🧑‍💻求职者: 传统的 RAG 核心是语义相似度(Semantic Similarity)。它把文本切块、做 Embedding,然后通过向量距离去捞最相似的片段。这在做自然语言、知识库问答时很好用。 但代码不是普通的文本,代码需要的是结构精度(Structural Precision),而不是模糊的语义相似。

  • 比如我搜索一个 getUser() 函数,传统 RAG可能会因为语义相似,把一堆测试文件、配置文件或者不相关的废弃代码块(Chunk)拼凑在一起喂给大模型。
  • 结果就是大模型拿到的上下文是支离破碎的,缺乏真正的代码上下文,比如类的继承关系、接口定义和模块导入。这种“信息噪音”极易导致模型写出看似合理但根本无法编译的“幻觉代码”。

👨‍💼面试官: 明白,代码是讲逻辑和结构的。那第二个原因,你提到“索引滞后”,这在开发中有什么具体的痛点?
🧑‍💻求职者: 传统的 RAG 是一种有状态(Stateful)的系统。要在代码库里做向量检索,你得先对整个项目做一次全量切块、调 API 转成向量、存入向量数据库(比如 Pinecone 或 pgvector)。

  • 状态漂移(State Drift): 程序员的日常是高频修改代码、切换分支(Git branch)。这意味着,你刚写完一行代码,你的向量索引就已经过期(Stale)了。
  • 如果每次改完代码都要重新跑一遍流水线去同步索引,这在本地 CLI(命令行工具)上是不可接受的,既慢又重。Claude Code
    追求的是“零预处理、开箱即用”,自然要抛弃这种沉重的包袱。

👨‍💼面试官: 那不依赖向量 RAG,Claude Code 是怎么在巨大的代码库里找代码的呢?总不能全盲猜吧?
🧑‍💻求职者: 这正是它聪明的地方!它放弃了向量 RAG,转向了 Agentic Search(智能体主动检索)。 Claude Code 是一个拥有自主工具调用能力(Tool Calling)的智能体。当你想改一个功能时,它会像人类程序员一样:

  1. 先读取根目录的目录树,或者看一眼 CLAUDE.md 获取全局规范。
  2. 调用系统原生的 grep 或 glob工具,用正则表达式或精确的文件名去匹配代码。
  3. 发现某个文件后,用 read_file 读进去,顺着 import 语句或者函数调用链,再精准地去开下一个文件。

核心逻辑: 这种基于“主动探索 + 确定性工具(Grep/文件系统)”的方式,保证了获取到的代码永远是最新的,而且完全契合代码的引用逻辑。

👨‍💼面试官: (点头)有点意思。利用模型自己的推理能力去当“探针”。那你刚才提到的第三点“上下文红利”,和这个有什么关系?
🧑‍💻求职者: 过去我们用 RAG,是因为大模型的上下文窗口(Context Window)太小了。几年前模型只能吞下 4K 或 8K 个 Token,不把代码切成碎块根本塞不进去。 但现在的模型(比如 Claude 3.5 系列)动辄拥有 200K 甚至更高的上下文窗口。一个几十万行代码的中小型项目,完全可以把核心框架、目录树甚至重点文件直接打包塞进上下文里。 既然模型自己的“内存”已经大到能装下一个小型图书馆了,我们为什么还要大费周章地在外面建一个低效的“检索流水线”呢?把生数据直接喂给它,或者让它按需去读大文件,它的全局推理效果反而更好。
👨‍💼面试官: 听起来很完美。但硬币都有两面,Claude Code 选择这种“智能体主动检索(Agentic Search)”代替“传统向量 RAG”,难道就没有代价吗?
🧑‍💻求职者: 确实有代价,这是一种哲学上的权衡(Trade-off):
传统 RAG 是“用基建换成本”。它的单次查询只带入极少量的 Chunk,Token 消耗极低、响应快,但代价是维护一套向量数据库和面对可能不精准的检索结果。
Claude Code 的方式 是“用智商换基建,用 Token 换 Freshness(时效性)”。因为它是多轮对话、不断地调用工具去探索和重试,这会消耗大量的 Token,且多轮交互会带来一定的延迟(Latency)。
👨‍💼面试官: 回答得非常通透!从数据特性聊到模型演进,还指出了背后的商业权衡。我的问题问完了,你对我们团队有什么想了解的吗?
🧑‍💻求职者:心想这下我应该面试通过了吧
在这里插入图片描述

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐