“RAG 已死,grep 当立?” 面试被问爆的话题,看完这篇都清晰了

github热门推荐 › “RAG 已死,grep 当立?” 面试被问爆的话题,看完这篇都清晰了 (第 58 章)
文章工具

🤖 一句话说清楚:grep 和 RAG 到底是什么?

先给你打个最直白的比方:

  • grep
     就像你用 Ctrl+F 在文档里精准找关键词,比如搜 “TODO”“function_name”,只要字对上了,立刻给你结果,又快又准,而且 100% 可控。
  • RAG
     就像你用 AI 在一堆资料里按意思找内容,比如搜 “差旅报销政策”,它会理解你的需求,把意思相关的段落找出来,哪怕里面没出现 “差旅报销” 这四个字。

最近 Claude Code 火了,因为它不用 RAG,靠 grep+Glob+Read 三个工具,代码检索效果直接拉满,于是网上开始传 “RAG 已死”。但真的是这样吗?



🧠 核心对比:grep vs RAG,到底谁强谁弱?

1. 工作原理拆解

维度
grep(关键词检索)
RAG(语义检索)
核心逻辑
基于字符串匹配 / 正则表达式,精确找文本
基于向量嵌入,理解语义找相似内容
前置成本
零成本,开箱即用,不用建索引
需要选嵌入模型、做分块、建向量库、维护索引
响应速度
毫秒级,文件越大优势越明显
依赖索引规模,实时性不如 grep
检索精度
100% 精确匹配,结果可预期
依赖嵌入模型,存在 “语义漂移”,可能找错
维护成本
几乎为零,文件更新自动生效
索引需要定期更新,数据变了就得重跑
适合场景
代码、日志、结构化文本,关键词明确
企业知识库、文档、非结构化文本,语义模糊

2. 为什么 Claude Code 用 grep 做代码检索效果更好?

很多人以为是 RAG 不行了,其实是代码这个场景太适合 grep:

  • 代码里的函数名、变量名、类名都是固定的字符串,用 grep 搜getUserInfo,比用向量检索找 “获取用户信息的函数” 准多了;
  • 代码库天天变,RAG 的索引刚建好,代码已经更新了,很容易出现 “索引和实际代码不同步” 的问题;
  • 用 grep 不用维护复杂的向量库,用户打开项目就能直接用,没有部署和维护成本;
  • 再配合 Glob(找文件)和 Read(读内容),Claude Code 形成了一套Agentic Search闭环:先 Glob 找文件,再 grep 搜关键词,最后 Read 读内容,效率比 RAG 高得多。


📊 什么时候用 grep?什么时候用 RAG?(面试必背决策框架)

很多人面试被问住,就是因为只知道说 “grep 比 RAG 好”,却没搞懂场景匹配。

✅ 优先选 grep 的场景

  • 代码检索:找函数定义、变量引用、TODO 注释;
  • 日志分析:按关键词 / 错误码筛选日志;
  • 结构化文本:配置文件、命令行输出、脚本;
  • 快速验证:临时项目、一次性任务,不想搭 RAG 基础设施。

✅ 优先选 RAG 的场景

  • 企业知识库:20 万份非结构化文档,搜 “差旅报销政策” 这种语义需求;
  • 跨模态检索:带图片、表格、PDF 的混合文档,关键词没法直接匹配;
  • 同义词 / 模糊需求:比如搜 “收入确认规则”,要匹配 “ASC 606”“记账规则” 这类同义词;
  • 大规模非结构化数据:百万级文档,纯 grep 会返回大量噪音,淹没有效信息。


📈 场景决策流程图(竖排)

你的数据是什么类型?    ↓┌─────────────┐ ┌───────────────────┐│ 代码/日志/配置 │ │ 企业文档/知识库/非结构化数据 │└──────┬──────┘ └─────────┬─────────┘       ↓                   ↓关键词明确吗?            需求是语义模糊吗?       ↓                   ↓    用grep               用RAG       ↓                   ↓┌─────────────┐ ┌───────────────────┐│ 实时、低成本、精确匹配 │ │ 理解语义、跨文本、泛化检索 │└─────────────┘ └───────────────────┘


🛠️ 代码对比:grep vs RAG,实际使用有什么区别?

1. grep 检索代码(零成本,直接用)

# ------------------------------# 步骤1:用ripgrep(高性能grep)找代码里的TODO# ------------------------------# 安装ripgrep(比原生grep快很多)# macOSbrew install ripgrep# Ubuntusudo apt install ripgrep# 步骤2:在项目里搜索TODO注释rg "TODO" ./src --include="*.ts"# 输出:所有包含TODO的TypeScript文件和行号,毫秒级返回
2. 简易 RAG 实现(需要部署,有维护成本)
# ------------------------------# 步骤1:安装依赖# ------------------------------pip install langchain chromadb sentence-transformers# ------------------------------# 步骤2:构建向量索引(需要分块、嵌入、建库)# ------------------------------from langchain.vectorstores import Chromafrom langchain.embeddings import HuggingFaceEmbeddingsfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.document_loaders import DirectoryLoader# 加载文档loader = DirectoryLoader("./docs", glob="*.txt")documents = loader.load()# 分块text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)texts = text_splitter.split_documents(documents)# 嵌入并建向量库embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")db = Chroma.from_documents(texts, embeddings, persist_directory="./chroma_db")db.persist()# ------------------------------# 步骤3:检索(语义搜索)# ------------------------------query = "公司差旅报销政策"docs = db.similarity_search(query, k=3)# 输出:语义相关的3段文档内容,需要等待索引加载和向量计算


💡 成熟的 Agent 系统,是 “组合拳” 不是 “单选题”

Claude Code 的成功,不是因为它完全不用 RAG,而是它在代码场景里,用 grep 解决了最核心的检索问题。真正成熟的 Agent 系统,从来不会只选一个工具:

  • 代码场景:用 grep+Glob+Read 做精确检索,快速定位文件和函数;
  • 知识库场景:用 RAG 做语义检索,理解用户的模糊需求;
  • 混合场景:先用语义搜索定位大方向,再用 grep 做精确匹配,最后读文件确认。

就像原文里说的:技术选型从来没有银弹,理解原理、匹配场景,才是正道。说 “RAG 已死” 的人,本质上是把 “特定场景下的优化” 当成了 “通用结论”。



#RAG已死 

#grep 

#ClaudeCode 

#AI面试 

#程序员选型 

#大模型Agent 

#代码检索




⚠️ 版权声明

本文为免费文章,欢迎转载。转载请注明出处:一木科技(https://www.pingquan.vip/2026/05/28/rag-%e5%b7%b2%e6%ad%bb%ef%bc%8cgrep-%e5%bd%93%e7%ab%8b%ef%bc%9f-%e9%9d%a2%e8%af%95%e8%a2%ab%e9%97%ae%e7%88%86%e7%9a%84%e8%af%9d%e9%a2%98%ef%bc%8c%e7%9c%8b%e5%ae%8c%e8%bf%99%e7%af%87/),并保留原文链接。