<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>上下文工程 on XEDCZQ的博客</title><link>https://xedczq.cn/tags/%E4%B8%8A%E4%B8%8B%E6%96%87%E5%B7%A5%E7%A8%8B/</link><description>Recent content in 上下文工程 on XEDCZQ的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 03 Jul 2026 18:42:00 +0800</lastBuildDate><atom:link href="https://xedczq.cn/tags/%E4%B8%8A%E4%B8%8B%E6%96%87%E5%B7%A5%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>RAG 真的已经死了吗？我对 Agent 检索选型的思考</title><link>https://xedczq.cn/post/agent_retrieval_reflections/</link><pubDate>Fri, 03 Jul 2026 18:42:00 +0800</pubDate><guid>https://xedczq.cn/post/agent_retrieval_reflections/</guid><description>&lt;p&gt;最近看到一些围绕“RAG 已死”和“Coding Agent 为什么不使用传统 RAG”的讨论。对我来说，比判断一种技术是否过时更有价值的，是弄清楚：任务到底需要找什么信息，用什么方式找到它，以及找来的内容如何帮助模型回答。&lt;/p&gt;
&lt;p&gt;这篇笔记保留我对检索方案的理解和选型思考，不推断具体产品当前的内部实现，也不把讨论中的观点当成已经完成的实验结论。&lt;/p&gt;
&lt;h2 id="一先明确讨论中的-rag-指什么"&gt;&lt;a href="#%e4%b8%80%e5%85%88%e6%98%8e%e7%a1%ae%e8%ae%a8%e8%ae%ba%e4%b8%ad%e7%9a%84-rag-%e6%8c%87%e4%bb%80%e4%b9%88" class="header-anchor"&gt;&lt;/a&gt;一、先明确讨论中的 RAG 指什么
&lt;/h2&gt;&lt;p&gt;我会先把两个概念分开：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;广义的检索增强生成&lt;/strong&gt;：先获取外部信息，再把相关内容交给模型生成回答。这里的检索可以是关键词搜索、代码搜索、网页搜索或数据库查询。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;讨论中常见的向量 RAG 流水线&lt;/strong&gt;：文档切块、生成 embedding、建立向量索引、召回相关片段，再组织上下文。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这只是为了明确本文的讨论范围，并不是说 RAG 只能由这两种方式定义。关键词检索、向量检索、混合召回和多轮搜索，本来就可以组合。&lt;/p&gt;
&lt;p&gt;因此，看到“某个 Agent 不用 RAG”时，我首先会追问：它不依赖外部检索，还是没有采用预先建立向量索引的那条路径？这两个判断差别很大。&lt;/p&gt;
&lt;p&gt;我不认同直接把“某些场景不使用向量索引”推导成“检索增强已经失去价值”。&lt;/p&gt;
&lt;h2 id="二数据怎么组织会影响检索的起点"&gt;&lt;a href="#%e4%ba%8c%e6%95%b0%e6%8d%ae%e6%80%8e%e4%b9%88%e7%bb%84%e7%bb%87%e4%bc%9a%e5%bd%b1%e5%93%8d%e6%a3%80%e7%b4%a2%e7%9a%84%e8%b5%b7%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;二、数据怎么组织，会影响检索的起点
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;观察维度&lt;/th&gt;
 &lt;th&gt;文档知识库&lt;/th&gt;
 &lt;th&gt;代码库&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;可利用的组织信息&lt;/td&gt;
 &lt;td&gt;标题、章节、目录、元数据，完整程度因资料而异&lt;/td&gt;
 &lt;td&gt;文件路径、模块、符号、导入关系等&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;常见检索需求&lt;/td&gt;
 &lt;td&gt;按含义寻找相关论述、规则和依据&lt;/td&gt;
 &lt;td&gt;定位符号、调用位置、行为实现和相关测试&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;字面检索的优势&lt;/td&gt;
 &lt;td&gt;精确条款号、术语、标题等明确线索&lt;/td&gt;
 &lt;td&gt;函数名、错误信息、配置键等明确线索&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;语义检索的价值&lt;/td&gt;
 &lt;td&gt;查询表述与原文措辞不同的时候&lt;/td&gt;
 &lt;td&gt;只知道行为描述、不知道符号名称的时候&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果我已经知道函数叫 &lt;code&gt;generateResponse&lt;/code&gt;，优先搜索符号和字面内容通常是一个直接的起点。但如果问题是“哪里处理流式回复中断”，又不知道具体实现名，语义线索和多轮探索仍然可能有帮助。&lt;/p&gt;
&lt;p&gt;同样，法律或业务文档也不一定缺少结构，它们可能有清晰的章节、条款和元数据。不能仅凭“代码”或“文档”两个标签决定检索方案。&lt;/p&gt;
&lt;p&gt;我更关心的是：&lt;strong&gt;当前问题有没有可靠的定位线索，数据是否提供可以利用的结构。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="三高频变更增加了索引同步的要求"&gt;&lt;a href="#%e4%b8%89%e9%ab%98%e9%a2%91%e5%8f%98%e6%9b%b4%e5%a2%9e%e5%8a%a0%e4%ba%86%e7%b4%a2%e5%bc%95%e5%90%8c%e6%ad%a5%e7%9a%84%e8%a6%81%e6%b1%82" class="header-anchor"&gt;&lt;/a&gt;三、高频变更增加了索引同步的要求
&lt;/h2&gt;&lt;p&gt;代码频繁变化时，我会特别关注检索结果是否对应当前工作区。即使找到的片段很相关，如果它来自旧版本，也可能把模型带到错误方向。&lt;/p&gt;
&lt;p&gt;采用向量索引，需要考虑变更检测、增量更新、删除处理，以及不同分支或工作区之间的隔离。这些是工程成本，但不意味着每次修改都必须重建整个索引。&lt;/p&gt;
&lt;p&gt;直接搜索当前文件也有自己的成本：搜索范围可能过大，结果可能嘈杂，复杂问题可能需要多轮查询和读取。&lt;/p&gt;
&lt;p&gt;我的判断方式是把两类成本一起看：维护索引要付出什么，放弃索引后又会增加多少搜索时间和模型调用。&lt;/p&gt;
&lt;h2 id="四长上下文改变了取舍但没有替我们完成检索"&gt;&lt;a href="#%e5%9b%9b%e9%95%bf%e4%b8%8a%e4%b8%8b%e6%96%87%e6%94%b9%e5%8f%98%e4%ba%86%e5%8f%96%e8%88%8d%e4%bd%86%e6%b2%a1%e6%9c%89%e6%9b%bf%e6%88%91%e4%bb%ac%e5%ae%8c%e6%88%90%e6%a3%80%e7%b4%a2" class="header-anchor"&gt;&lt;/a&gt;四、长上下文改变了取舍，但没有替我们完成检索
&lt;/h2&gt;&lt;p&gt;上下文容量变大之后，有些小型资料集可以直接放入模型，也有些任务值得保留完整文件，以免切块丢失依赖关系。&lt;/p&gt;
&lt;p&gt;但“能装进去”和“适合全部装进去”是两回事。我仍然会问：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;资料是否真的能放入当前上下文预算？&lt;/li&gt;
&lt;li&gt;输入的成本和延迟是否可以接受？&lt;/li&gt;
&lt;li&gt;无关内容会不会干扰定位和推理？&lt;/li&gt;
&lt;li&gt;当前任务需要完整关系，还是只需要少量证据？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;长上下文可以减少某些任务对复杂检索流程的依赖，却不能自动保证信息利用效果。反过来，片段也不是越短越好：缺少定义、前提和调用关系，可能让回答失去依据。&lt;/p&gt;
&lt;p&gt;我倾向于根据任务在完整内容与相关片段之间选择，而不是把“全部塞进去”或“只给 top-k”当成固定答案。&lt;/p&gt;
&lt;h2 id="五agentic-search-与向量检索可以互相补充"&gt;&lt;a href="#%e4%ba%94agentic-search-%e4%b8%8e%e5%90%91%e9%87%8f%e6%a3%80%e7%b4%a2%e5%8f%af%e4%bb%a5%e4%ba%92%e7%9b%b8%e8%a1%a5%e5%85%85" class="header-anchor"&gt;&lt;/a&gt;五、Agentic Search 与向量检索可以互相补充
&lt;/h2&gt;&lt;p&gt;我理解的 Agentic Search，是让模型根据已有结果决定下一次搜索或读取动作：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;提出初始查询
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 阅读搜索结果
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 发现新线索或缺口
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 改写查询、切换工具或继续读取
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 收集足够证据后回答
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;它强调的是检索过程如何被组织，不是某一种底层搜索算法。循环里既可以使用字面搜索、BM25，也可以使用向量检索。&lt;/p&gt;
&lt;p&gt;多轮探索的吸引力在于：模型不必一次猜中正确问题，可以逐步从路径、符号和相关内容中扩大或缩小范围。对应的代价是额外轮次、模型调用和上下文开销，也依赖模型能否判断下一步该查什么。&lt;/p&gt;
&lt;p&gt;向量召回则可以作为候选发现的一步，再配合关键词、元数据过滤、重排和后续读取。是否更快、更省或更准确，需要在实际任务上测量。&lt;/p&gt;
&lt;p&gt;我不会因为一种方法是多轮的，就认为它一定优于单次召回；也不会因为检索由向量完成，就认为整个回答流程已经高效可靠。&lt;/p&gt;
&lt;h2 id="六把质量成本时效性和权限一起纳入选型"&gt;&lt;a href="#%e5%85%ad%e6%8a%8a%e8%b4%a8%e9%87%8f%e6%88%90%e6%9c%ac%e6%97%b6%e6%95%88%e6%80%a7%e5%92%8c%e6%9d%83%e9%99%90%e4%b8%80%e8%b5%b7%e7%ba%b3%e5%85%a5%e9%80%89%e5%9e%8b" class="header-anchor"&gt;&lt;/a&gt;六、把质量、成本、时效性和权限一起纳入选型
&lt;/h2&gt;&lt;p&gt;做检索选型时，我会从以下几个问题入手：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;问题&lt;/th&gt;
 &lt;th&gt;我会考虑的方案与检查点&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;已知精确名称、编号或错误文本吗？&lt;/td&gt;
 &lt;td&gt;先尝试字面、符号或字段查询&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;用户只知道含义，原文表述可能不同吗？&lt;/td&gt;
 &lt;td&gt;尝试向量召回或混合检索&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;数据有可用的字段、目录和关系吗？&lt;/td&gt;
 &lt;td&gt;优先利用过滤、结构化查询和导航信息&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;一次检索经常无法得到完整证据吗？&lt;/td&gt;
 &lt;td&gt;评估多轮搜索、查询改写和关联读取&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;数据变化频繁吗？&lt;/td&gt;
 &lt;td&gt;检查版本一致性、索引更新延迟和当前文件读取&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;延迟和成本限制严格吗？&lt;/td&gt;
 &lt;td&gt;限制轮次、候选量和读取规模，并实测端到端成本&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;数据有访问权限或隔离要求吗？&lt;/td&gt;
 &lt;td&gt;在检索和结果读取阶段验证权限、存储及缓存边界&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;安全性也不能只根据“有没有索引”判断。索引存储、检索服务、日志、缓存和模型输入都有各自的数据边界，直接搜索同样需要访问控制。&lt;/p&gt;
&lt;p&gt;对我来说，选型不是先挑一个技术名字，而是先明确任务的证据需求，再选择能够满足它的最小可行组合。&lt;/p&gt;
&lt;h2 id="七减少-token-消耗要关注实际读进来的内容"&gt;&lt;a href="#%e4%b8%83%e5%87%8f%e5%b0%91-token-%e6%b6%88%e8%80%97%e8%a6%81%e5%85%b3%e6%b3%a8%e5%ae%9e%e9%99%85%e8%af%bb%e8%bf%9b%e6%9d%a5%e7%9a%84%e5%86%85%e5%ae%b9" class="header-anchor"&gt;&lt;/a&gt;七、减少 token 消耗，要关注实际读进来的内容
&lt;/h2&gt;&lt;p&gt;如果 Agent 已经定位到一个函数，却仍然反复读取整个大文件，我会检查能否使用行范围、符号范围或相关片段缩小输入。&lt;/p&gt;
&lt;p&gt;但不能为了减少 token 切掉必要上下文。函数依赖的类型、调用方、配置和测试，可能正是判断行为所需要的证据。&lt;/p&gt;
&lt;p&gt;我会优先尝试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先搜索定位，再按范围读取。&lt;/li&gt;
&lt;li&gt;对已读取内容去重，避免重复塞入上下文。&lt;/li&gt;
&lt;li&gt;保留路径、行号或来源信息，方便回到原文核实。&lt;/li&gt;
&lt;li&gt;证据不足时按需扩展，而不是一次读取所有资料。&lt;/li&gt;
&lt;li&gt;给多轮检索设置停止条件，避免无目的地循环。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些方法是否有效，应该观察任务成功率、遗漏情况、延迟和输入输出 token，而不是只比较输入长度。&lt;/p&gt;
&lt;h2 id="八我会怎样回答rag-是否过时"&gt;&lt;a href="#%e5%85%ab%e6%88%91%e4%bc%9a%e6%80%8e%e6%a0%b7%e5%9b%9e%e7%ad%94rag-%e6%98%af%e5%90%a6%e8%bf%87%e6%97%b6" class="header-anchor"&gt;&lt;/a&gt;八、我会怎样回答“RAG 是否过时”
&lt;/h2&gt;&lt;p&gt;我的回答会先明确对方指的是广义检索增强，还是切块、embedding 和向量索引的具体路线。&lt;/p&gt;
&lt;p&gt;随后围绕数据规模、结构、变更频率、权限、延迟和成本展开：已知明确符号时可以先做字面定位；需要跨表述发现相关内容时，可以考虑语义或混合检索；需要逐步探索时，可以由 Agent 编排多轮检索。&lt;/p&gt;
&lt;p&gt;最后用真实任务验证。至少比较答案是否有依据、是否遗漏关键信息、检索内容是否最新，以及整个流程的成本和延迟。没有同口径评估，就不轻易宣称某种方案全面胜出。&lt;/p&gt;
&lt;p&gt;这次讨论带给我的提醒是：不要用“已死”替代工程判断。检索方案的价值，最终体现在它能否以可接受的成本，为当前任务提供正确、及时、权限合规的证据。&lt;/p&gt;</description></item></channel></rss>