为什么现在的 Agent 重新用回 Grep,而不是先做 RAG?

一句话结论:在真实的 Agent 工程落地中,向量数据库 RAG 往往不是解决方案,而是系统里最脆弱、最不可控的一环。Agent 重新捡起 Grep(准确说是以 ripgrep、AST 语法树、精准路径匹配为代表的确定性文本检索),不是技术倒退,而是工业界交够学费后的务实选择。


一、行业风向是怎么变的?

时间行业状态典型做法结果
2023–2024"向量依赖症"爆发期文档/代码切块 → Embedding → 向量库 → 余弦相似度 → Top-5 塞给模型被认为是"通用解法"
2025 下半年Agent 进入深水区实际任务完成率为导向的评测兴起重型向量管线频繁翻车
2026务实回归ripgrep + AST + LSP + 长上下文窗口10ms 的确定性检索"降维打击"复杂 RAG 管线

很多团队发现:辛苦搭建的向量管线,在真实排错、多文件修改、复杂业务定位场景下,准确率经常输给一条耗时 10 毫秒的 ripgrep 命令。

根本原因不是算法工程师不努力,而是向量语义检索的底层假设,与 Agent 的运行机理发生了错位。下面从四个维度拆解。


二、四大错位:为什么 RAG 不适合 Agent

错位 1️⃣:语义相关性 ≠ 逻辑精准性

向量检索擅长什么? 用户模糊地问"去年第三季度报销政策有什么变化",它能理解模糊意图,找到意思相近的段落。✅

Agent 需要什么? 一个具体的函数名、一个错误状态码、一个配置键值、一条精确的接口路径。❌ 向量检索帮不上忙。

一个真实的灾难场景:

报错信息:invalid_token_handler
检索方式实际表现
向量 RAGEmbedding 模型对专有名词/符号不敏感,“用户鉴权失败”“登录超时”“invalid_token_handler” 在潜空间里可能极其相似 → 召回 5 篇通用登录设计文档 + 一个貌似相关但完全不相干的函数,偏偏漏掉最关键的那一行真实定义
Grep不理解任何语义,只做确定性匹配:有 → 1ms 内返回文件名、行号、上下文;没有 → 返回空

⚠️ 做 Agent 最怕的不是"检索不到",而是"检索出一堆似是而非的信息"。 语义漂移会直接把模型带偏,让它基于错误上下文一本正经地编造解决方案。对需要依靠事实采取下一步动作的 Agent 来说,非黑即白的确定性,价值远高于充满幻觉的语义相似度


错位 2️⃣:动态环境下的索引维护成本不可承受

传统 RAG 有一个致命的工程前提:数据是相对静态的(先花几小时建索引,再对外提供只读检索)。

但 Agent 的本质是行动者——它改写系统、创建文件、修改代码、切换分支。定位一个线上故障时,它可能 5 分钟内编辑 8 个文件、新增 2 个调试类、删除若干行调用。

这就产生了一个死结

实时更新

异步/不更新

Agent 修改了代码

要不要实时更新向量库?

每次写入都要:
重切文本 → 调 Embedding 接口 → 写向量库

网络延迟 + 计算耗时
切片边界被破坏
几万文件的项目资源枯竭
数据一致性问题

向量库与磁盘真实状态脱节

Agent 检索到自己修改前的旧代码

基于失效信息做决策

💀 死循环

而 Grep 是完全无状态的:

维度向量 RAGGrep / ripgrep
数据副本需在磁盘/内存维护额外副本不需要
预处理切块 + Embedding + 建索引
数据新鲜度存在同步延迟,可能读到旧数据100% 忠实于物理磁盘
写入后可检索延迟秒级~分钟级(含 API 调用)下一毫秒即可扫到

对连续执行长程任务的 Agent 而言,这种"零延迟的真实感"是保命的底线

(笔者在企业级交付中见过大量项目卡死在这里,最后干脆砍掉代码仓和动态配置的向量索引,只留纯文本工具。类似的踩坑复盘,可参阅《大厂 Agent 落地手册:从 Demo 到生产避坑》等资料。)


错位 3️⃣:切片切断了代码与逻辑的拓扑结构

过去做 RAG 的人把全部精力放在切片调参上:500 字符 + 50 字符滑动窗口、按换行段落切、用小模型辅助切片……

但真实的逻辑系统不是线性排布的。 一个类可能跨越 2000 行:顶部是依赖引入,中间是成员变量,末尾是关键处理逻辑。固定窗口切片,几乎必然在最关键的语义连接处一刀切断:

切片后的惨状

原始代码结构

被切断

被切断

函数定义
入参/类型/上下文

函数体

报错返回逻辑

Chunk N
函数头部

Chunk N+1
报错返回

模型只拿到 Chunk N+1:
不知道入参是什么
不知道类型是什么
不知道调用了哪些变量

为了修补这个缺陷,业界又发明了父子文档检索、文档树展开、重排序等繁复管线——每加一层,延迟翻倍,故障率成倍上升

关键变量:2026 年,长上下文已经普及。

  • 模型上下文窗口早已不是 4K/8K 的局促状态;
  • 处理数十万 token 长文本的成本已大幅下降;
  • 长程注意力召回能力上了一个台阶。

于是 Agent 最理想的信息获取方式变了——不需要人类事先把内容剁成肉馅,而是:

读取工具ripgrepAgent读取工具ripgrepAgentrg "invalid_token_handler"文件名 + 精确行号 (坐标)读取整个文件/模块/行号附近 50 行完整上下文:变量定义✓ 作用域✓ 引用关系✓凭长文本推理能力一眼看清全局

Grep 在这里扮演的是一个轻量级的"坐标发射器":精准定位 → Agent 自主决定读取范围 → 上下文浑然一体。而不是拼凑五个散落各处、被打碎的向量切片。


错位 4️⃣:单次召回 vs 自主探索——交互范式的根本差异

传统 RAG 是为单轮问答设计的:提问 → 检索一次 → 灌给模型 → 生成结果。单向、被动、一次性的管道。

Agent 的核心定义是自主循环:观察环境 → 提出假设 → 采取行动 → 评估结果 → 修正假设 → 下一个行动。

如果 Agent 唯一的信息手段是向量 RAG,它的探索链路就被锁死了:向量潜空间的距离计算是一个不可解释的黑盒——搜不到时,Agent 不知道为什么搜不到,也不知道怎么改写查询才能避开噪声。

而确定性工具赋予了 Agent 真正的试错空间。一个成熟的代码/运维 Agent 的行为轨迹,非常接近真实工程师:

3000 条

0 条

少量精准匹配

rg 搜索核心关键词

匹配数量?

词太泛了

加文件后缀过滤

加特定目录路径

写正则表达式收窄范围

换关键词 / 往上一层目录找

✅ 定位成功,读取上下文

命令行的返回值、匹配数量、错误提示,全都是 Agent 调整策略的环境反馈。这种"主动试探、逐步缩小"的过程,完全契合大模型的链式推理逻辑。把黑盒向量检索硬塞给 Agent,等于剥夺了它与环境底层真实结构互动的权利

(2025–2026 年真正跑出商业价值的顶级团队,在底层工具链设计上有惊人的一致性。相关案例可参阅《全球大厂 Agent 落地实录(2025–2026):37 家真实案例 + 12 条避坑清单》等资料。)


三、架构第一性原理:用确定性约束概率性

必须想明白一个常识:大语言模型本身就是一个极度复杂的概率预测系统——它的每句话、每行逻辑都带有随机性。

如果信息输入端也是一套基于向量距离打分、充满相似度阈值妥协的概率系统,就变成了:

概率×概率=系统性脆弱\text{概率} \times \text{概率} = \text{系统性脆弱}概率×概率=系统性脆弱

输入不确定 → 召回不稳定 → 推理发散 → 任何一次参数微调、甚至换一个更长的提示词,都可能导致整条链条彻底坍塌。

健壮工程系统的铁律:用确定性的构件,约束概率性的核心。

层次交给谁具体内容
🧠 高层认知大模型(概率)理解逻辑、推导业务走向、规划行动步骤、评估环境状态
🗄️ 底层事实确定性系统数据读取、环境感知、事实检索

这也是为什么在代码和复杂知识领域,除 Grep 之外,以下工具正在成为 Agent 标配:

  • LSP(语言服务协议):想知道一个方法在哪被调用?直接向语言服务发"查找所有引用"请求,而不是算余弦相似度;
  • AST(抽象语法树解析):结构化理解代码,而非线性文本;
  • 符号表跳转:基于编译器和文件系统的确定性反馈。

这些工具给模型提供了一块坚实的立足点


四、总结:这不是倒退,而是祛魅

很多技术人有种执念:组件越新、链路越长、算法越复杂 = 系统越先进。向量数据库在过去几年承担了太多它不该承担的期待——很多人以为挂一个向量库,系统就获得了"记忆"和"理解企业知识的能力"。

但到了工业交付那天,面对苛刻的时延指标、有限的算力预算、零容忍的幻觉率要求,堆砌大量中间件的架构往往率先崩溃

这时大家才回过神来:那个几十年前由 Unix 哲学孕育、只有几千行 C 代码写就的文本查找逻辑,配合现代操作系统的页缓存和高度优化的正则引擎——

✅ 极度轻量、零外部依赖
✅ 响应时间毫秒级
✅ 结果 100% 忠实于物理磁盘上的事实

RAG vs 确定性检索:终极对比

维度向量 RAGGrep / ripgrep / AST / LSP
检索性质概率性(相似度打分)确定性(非黑即白)
专有名词/符号不敏感,易语义漂移精确匹配
数据新鲜度依赖索引同步,可能滞后实时,零延迟
维护成本切块/Embedding/索引重建无状态,零维护
上下文完整性切片破坏逻辑拓扑按需读取完整结构
可解释性黑盒,Agent 无法修正搜索策略反馈透明,支持自主探索
适用场景模糊意图、海量非结构化文档问答Agent 执行任务、代码排错、精确定位

🎯 让大模型带着 ripgrep 和编译工具去探索世界,而不是把它关在向量检索过滤后的狭窄切片里。 这是这两年 Agent 架构演进中最让人踏实的转变。

技术没有高低贵贱——能用最低的系统复杂度和最高的可靠性解决实际问题的手段,才是工业界最真实的选择。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐