枣庄隔热条PA66 字节口试官:“为什么Claude Code无须RAG检索代码,而是用grep?”我:"因为...省钱?" 他千里默了三秒

大好枣庄隔热条PA66,我是小林。
前阵子,有个林友跟我聊起他口试字节 AI Agent 岗的资格。
被口试官问了个问题:「为什么 Claude Code 无须 RAG 检索代码,而是奏凯用 grep?」
我愣。
是啊,这两年 RAG 火成这样,险些成了 Agent 的标配。谁去作念个 AI 编程用具不上 RAG?
成果 Claude Code 这样个被业内认证「好用的 AI 编程用具之」,反其说念而行,连 embedding 和向量数据库的影子皆莫得,就靠 grep 加读文献这种朴素的式来取得代码转折文。
是 Anthropic 没钱搞向量库吗?光显不是。
是工程师水平不够吗?不可能。
那这背后到底是什么想象形而上学?为什么他们偏巧无须 RAG?
我把 Claude Code 的检索筹备源码翻了个底朝天,越看越合计这个聘请很有道理。
今天就从源码视角,带你层层拒绝这个问题我会按这个法规张开:
先搞懂代码检索到底要料理什么?
看 RAG 派是怎样干的? RAG 在代码场景有什么坑 ?
Claude Code 是怎样反向想考的?
Claude Code 检索三件套怎样组 ?
Claude Code 派子 agent 去检索是怎样回事?枣庄隔热条PA66
先搞懂代码检索到底要料理什么?
看 RAG 派是怎样干的? RAG 在代码场景有什么坑 ?
Claude Code 是怎样反向想考的?
Claude Code 检索三件套怎样组 ?
Claude Code 派子 agent 去检索是怎样回事?
读完这篇著作,你不光能答出这说念口试题,还能意会 Anthropic 对「Agent 应该长成什么样」的整套想路。
、先搞懂「代码检索」到底要料理什么问题
好多东说念主上来就跳进 RAG 和 grep 的对比,但我合计这样讲很容易让东说念主微辞。
不如我们先寥寂,把问题自己搞浮现:什么叫代码检索?为什么 Agent 写代码非得有这步?
你想啊,你开 Claude Code,跟它说「帮我把 UserService 里阿谁登录法改下,加个考证码逻辑」。模子要完成这个任务,件事得是什么?
得是「找到 UserService 这个文献、找到登录法的具体代码」。代码皆没看到,怎样改?
但问题来了:模子我方又弗成奏凯「看」磁盘上的代码,它只可看到你塞进转折文里的翰墨。
那你说,那把总共这个词面貌的代码全塞进去不就收场?
表面上是这样个理。但 LLM 的转折文窗口是有限的。就算用 Claude Opus 4.7 这种仍是援手 1M token 的长转折文模子,听着是真是大对吧?换算下冒昧有 200 多万字。但你想想,个略略像样点的面貌动辄几百万行代码,再算上依赖库源码就夸张了,光是这些就远模子的承载量,别说还要留位置给系统辅导、对话历史、用具调用成果。
塞不下,照旧塞不下。
转折文窗口 vs 代码库体积对比图
是以代码检索这步就出来了:从堆代码里,地捞出和面前任务筹备的几个片断,再塞给模子。
这有点像你查字典。本汉语辞书几千页,你不会重新读到尾,而是先翻目次、看拼音索引,定位到「龘」这个字地方的那页,然后只读那页。代码检索干的即是这个活儿。
字典查目次类比图
那「怎样查目次」、「怎样定位到那页」,即是不同案的各异地方了。
二、绕不开的 RAG:「先建库再查」的经典想路
说到检索,作念过 AI 行使的同学反馈详情是 RAG。这玩意儿面前是 Agent 圈的「网红工夫」,险些提到「让 LLM 用外部常识」,就意想它。
那 RAG 到底是怎样作念的?我用个藏书楼的故事给你评释白。
想象你是个藏书楼的料理员。馆里有几十万本书,读者来问「我想看本对于宋代茶文化的书」,你怎样办?
你不可能跑遍总共这个词馆每本书翻遍。贤达的作念法是:提前把每本书皆作念好分类卡片。卡片上写浮现书名、作家、关键词、内容撮要枣庄隔热条PA66,按主题归类好放进抽屉里。读者来,你照着卡片找对应的抽屉,几分钟就能把书翻出来。
RAG 在代码场景下,干的即是这个事儿。它的责任流不错拆成四步。
步,切片(Chunking)。
先把代码文献按某种礼貌切成小片断。常见的切法是按函数切、按类切,或者按固定行数切,比如每 100 行段。这特出于把厚厚的书拆成篇篇著作。
二步,向量化(Embedding)。
每个代码片断过遍 embedding 模子,转成串数字(个维向量)。你不错意会成给每个片断算了个「语义指纹」,道理邻近的片断,指纹也邻近。
Embedding 演示:代码经过模子酿成数字向量
三步,建索引(Indexing)。
把总共的向量存到个门的向量数据库里,比如 Faiss、Pinecone、Milvus 这些。这步即是「把分类卡片整理好,按抽屉摆放」。
四步,调回(Retrieval)。
用户发问的期间,把问题也向量化下,去库里找相同的 Top-K 个片断,比如像的 5 个,然后把这几段代码拼到 prompt 里,丢给 LLM。
向量调回 Top-K 暗示图
讲到这里,你可能仍是看出 RAG 的中枢套路了。
它把「找代码」这件事,转成了「算相同度」。总共的检索逻辑,后皆归结为「在向量空间里找近的几个邻居」。
那放到代码上呢?是不是也样敌?
别急,下节我们就来扒它的痛处。
三、RAG 在代码场景下的「水土不屈」
淌若 RAG 真是适代码场景,那 Claude Code 早就上了。问题是它有堆坑,我们个个看。
痛点 1:代码不像散文,切不动
著作是流式的枣庄隔热条PA66,你拦腰切刀,弃世不大,前后段皆还能立读。但代码不样,代码是有严格结构的。
举个例子,个函数 200 行,按 100 行段切了。成果上半段是个 if的开始,下半段是 else的扫尾,模子看到的两个片断,个少了 else,个少了 if,这玩意儿根底没法用。
恶运的是,函数 A 调用了函数 B,关联词 A 和 B 在不同片断里。模子只看到 A,塑料挤出机设备根本不知说念 B 是干嘛的,幻觉概纯厚接拉满。
函数被切两半暗示图痛点 2:精准匹配的活,向量干不了
向量调回的现实是「找相同的」,不是「找对的」。这在代码场景就繁难了。
你跟 Claude Code 说:「帮我看下 getUserById这个函数的完结」。
向量调回会怎样干?它会找堆「跟用户筹备的查询函数」给你:getUserByName、getUserByEmail、fetchUserInfo、queryUser,啥皆来遍。但你要的即是 getUserById这个具体的函数啊。
这就好比你跟共事说「帮我叫下张三」,成果他把李四五马六全叫过来了,因为他们皆是共事。
向量擅长「无极」,但代码好多期间要的即是「精准」。
配图见识:向量调回极度暗示,用户问「找张三」,成果向量库复返「李四五马六」
配图见识:向量调回极度暗示,用户问「找张三」,成果向量库复返「李四五马六」
向量调回极度暗示图痛点 3:代码每天在变,索引咋办
这是 RAG 在代码场景的另个恶梦。
你建好索引了,设立同学个 commit 改了 20 个文献,新增 3 个函数。索引怎样办?
要重建?总共这个词面貌再行切片、再行 embedding,资本不低,世俗 commit 奏凯能爆炸。
不重建?模子查到的全是旧版块,用落伍信息写新代码,bug 不写皆难。
要作念增量新?听着理,但完结起来堆畛域情况:哪些 chunk 要删、哪些要再行算、跨文献的援用关系怎样同步。说白了,浅显事情搞复杂了。
索引重建资本图痛点 4:冷启动慢得要命
你在个百万行的代码库上跑 RAG,光是建索引就要十几分钟以致久。
用户开用具枣庄隔热条PA66,看着进程条转,等几分钟才调运转用?这体验奏凯劝退半东说念主。Claude Code 的想象理念是「开就能用」,RAG 这套光显不接待。
冷启动恭候图痛点 5:黑盒,不可诠释
这点我合计关键。
向量召来 5 个片断,你问为什么是这 5 个?没东说念主答得上来。是因为 cosine 相同度?那为什么这 5 个比那 5 个?模子说不清,工程师也说不清,因为这玩意儿是黑盒。
出了 bug 你皆不知说念从哪儿查起。模子答错了,是调回错了?照旧调回对了但模子意会错了?追忆链路相配可怜。
追思下:RAG 在「静态文档、当然言语、无极匹配」这种场景是利器,但代码正巧是反过来的,是动态、结构化、需要精准的。RAG 在代码上不是弗成用,是用得很别扭。
那无须 RAG,又怎样搞代码检索呢?
四、Claude Code 的反向想路:把检索还给模子我方
在讲 Claude Code 的案之前,我想先抛个反问:你是怎样定位代码的?
我猜大部分辨脚员的责任流是这样的。
接办个生分心情,件事前看下目次结构,ls下心里有个数。要找某个在哪完结,反馈是 grep -r全局搜个关键字。grep 出堆候选文献,挨个 cat看下哪个像。找到了,再用裁剪器跳转开,前后翻翻看转折文。
总共这个词历程即是「找文献 → 找内容 → 看具体代码」三件套,盛极必衰,直到你找到蓄意。
隆重下:你莫得提前给总共这个词面貌建索引、作念向量化吧?莫得。你即是「现用现找」。
那你猜 Claude Code 的检索形而上学是什么?
浅显到让东说念主有时:让模子像手脚员样,我方去找。
不预处理、不建库、不算向量,每次需要代码就及时去现场查。用具就给三个:
Glob:按文献名 pattern 找文献(对应你的 find)
Grep:按内容关键字找代码(对应你的 grep -r)
Read:按需读文献内容(对应你的 cat和裁剪器跳转)
Glob:按文献名 pattern 找文献(对应你的 find)
Grep:按内容关键字找代码(对应你的 grep -r)
Read:按需读文献内容(对应你的 cat和裁剪器跳转)
手脚职责任流与 Claude Code 三件套对应关系
看似原始,但现实上是把「找代码」的有蓄意权还给了 LLM。你不需要提前猜模子会问什么,也不需要给它装个「智能调回引擎」,模子我方想搜什么就搜什么,搜完看眼成果,再决定下步。
这想路浅显到让你怀疑东说念主生:就这?真是够用?
我运转也这样想。但背面越扒源码越发现,这套「土味」用具背后藏着堆小巧想象。下节我们就把三件套挨个拒绝。
不外先别急,这里我先埋个伏笔:单纯靠主 agent 我方边 grep 边 read,遭受大型面貌会不会转折文爆炸?这个问题六节再揭开。
五、Claude Code 检索三件套,到底怎样组?
这节有点长,因为三件套每个皆有认真。我们先讲道理,后再贴源码加意会。
5.1 Grep:基于 ripgrep,但不是浅显封装
讲 Grep 用具之前,我想先问你个问题:既然 Claude Code 仍是给模子盛开了 Bash 用具,模子不错我方跑 grep -r "xxx" .,为啥还要单包个 Grep 用具?
这问题好多东说念主没认真想过。但你仔细品,这内部有三层磋议。
层,权限统管控。
Bash 是个用具,模子表面上能跑任何号召。淌若让它我方跑 grep,那 rm 也能跑、curl 也能跑、git push 也能跑。Claude Code 把 grep 单包成用具,特出于在这个频操作上单画了说念权限闸门,安全。
二层,输出模式可控。
你奏凯跑 bash grep,输出即是坨纯文本。但 Grep 用具不错提供结构化输出:行号、转折文行、按文献分组、以致援手「只复返匹配文献名」、「只复返匹配数目」三种粒度。模子按需聘请,token 耗费少好多。
三层,能。
Claude Code 的 Grep 底层用的是 ripgrep,不是传统 grep。ripgrep 是 Rust 写的,多线程并行、自动尊重 .gitignore(不去搜 node_modules 这种垃圾目次),能甩老 grep 几条街。
文安县建仓机械厂想象意图皆讲收场,我们看下源码 src/tools/GrepTool/prompt.ts里的用具描绘(这段会出面前模子的 system prompt 里,奏凯告诉模子怎样用):
A powerful search tool built on ripgrep
- ALWAYS use Grep forsearch tasks. NEVER invoke `grep` or `rg` as a Bash
command. The Grep tool has been optimized forcorrect permissions and access.
- Output modes: "content"shows matching lines, "files_with_matches"shows
only file paths (default), "count"shows match counts
- Use Agent tool foropen
相关词条:管道保温施工 塑料挤出设备 预应力钢绞线 玻璃棉厂家 保温护角专用胶1.本网站以及本平台支持关于《新广告法》实施的“极限词“用语属“违词”的规定,并在网站的各个栏目、产品主图、详情页等描述中规避“违禁词”。
2.本店欢迎所有用户指出有“违禁词”“广告法”出现的地方,并积极配合修改。
3.凡用户访问本网页,均表示默认详情页的描述,不支持任何以极限化“违禁词”“广告法”为借口理由投诉违反《新广告法》枣庄隔热条PA66,以此来变相勒索商家索要赔偿的违法恶意行为。