从 Claude Code 放弃 RAG 说起:实际项目中如何合理创建知识库

阅读路线图
#mermaid-svg-gipITiDOemNKESOj{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gipITiDOemNKESOj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gipITiDOemNKESOj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gipITiDOemNKESOj .error-icon{fill:#552222;}#mermaid-svg-gipITiDOemNKESOj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gipITiDOemNKESOj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gipITiDOemNKESOj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gipITiDOemNKESOj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gipITiDOemNKESOj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gipITiDOemNKESOj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gipITiDOemNKESOj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gipITiDOemNKESOj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gipITiDOemNKESOj .marker.cross{stroke:#333333;}#mermaid-svg-gipITiDOemNKESOj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gipITiDOemNKESOj p{margin:0;}#mermaid-svg-gipITiDOemNKESOj .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-gipITiDOemNKESOj .cluster-label text{fill:#333;}#mermaid-svg-gipITiDOemNKESOj .cluster-label span{color:#333;}#mermaid-svg-gipITiDOemNKESOj .cluster-label span p{background-color:transparent;}#mermaid-svg-gipITiDOemNKESOj .label text,#mermaid-svg-gipITiDOemNKESOj span{fill:#333;color:#333;}#mermaid-svg-gipITiDOemNKESOj .node rect,#mermaid-svg-gipITiDOemNKESOj .node circle,#mermaid-svg-gipITiDOemNKESOj .node ellipse,#mermaid-svg-gipITiDOemNKESOj .node polygon,#mermaid-svg-gipITiDOemNKESOj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gipITiDOemNKESOj .rough-node .label text,#mermaid-svg-gipITiDOemNKESOj .node .label text,#mermaid-svg-gipITiDOemNKESOj .image-shape .label,#mermaid-svg-gipITiDOemNKESOj .icon-shape .label{text-anchor:middle;}#mermaid-svg-gipITiDOemNKESOj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gipITiDOemNKESOj .rough-node .label,#mermaid-svg-gipITiDOemNKESOj .node .label,#mermaid-svg-gipITiDOemNKESOj .image-shape .label,#mermaid-svg-gipITiDOemNKESOj .icon-shape .label{text-align:center;}#mermaid-svg-gipITiDOemNKESOj .node.clickable{cursor:pointer;}#mermaid-svg-gipITiDOemNKESOj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gipITiDOemNKESOj .arrowheadPath{fill:#333333;}#mermaid-svg-gipITiDOemNKESOj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gipITiDOemNKESOj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gipITiDOemNKESOj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gipITiDOemNKESOj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gipITiDOemNKESOj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gipITiDOemNKESOj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gipITiDOemNKESOj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gipITiDOemNKESOj .cluster text{fill:#333;}#mermaid-svg-gipITiDOemNKESOj .cluster span{color:#333;}#mermaid-svg-gipITiDOemNKESOj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gipITiDOemNKESOj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gipITiDOemNKESOj rect.text{fill:none;stroke-width:0;}#mermaid-svg-gipITiDOemNKESOj .icon-shape,#mermaid-svg-gipITiDOemNKESOj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gipITiDOemNKESOj .icon-shape p,#mermaid-svg-gipITiDOemNKESOj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gipITiDOemNKESOj .icon-shape .label rect,#mermaid-svg-gipITiDOemNKESOj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gipITiDOemNKESOj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gipITiDOemNKESOj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gipITiDOemNKESOj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 📖 事实对齐
🔍 原因剖析
⚖️ 场景分界
💡 理念转变
🛠️ 落地实操
🏛️ 架构哲学
✅ 行动建议


引言:一个值得追问的工程决策

你可能听过这样一个说法:

"Claude Code 放弃了 RAG,改用 Grep 做代码检索。"

第一反应往往是惊讶------RAG 不是大模型应用的"标配"吗?如果连 Anthropic 自己都不用,是不是说明 RAG 不行了?

这个判断过于简化。本文要做的,不是简单地站队"RAG 好"或"RAG 坏",而是带你拆解这个决策背后的工程逻辑,最终落到一个更实用的问题上:

在你的实际项目中,到底什么时候该建知识库、怎么建、怎么用?


第一章 先对齐事实:发生了什么

1.1 Claude Code 确实没用传统 RAG

Claude Code 是 Anthropic 推出的命令行 AI 编程助手。根据 Anthropic 工程师在 2025 年 5 月 Latent Space 播客中的公开分享\^1,Claude Code 在代码检索上没有采用"向量数据库 + Embedding 检索"的标准 RAG 方案,而是让模型自己调用 grepglobfind 等工具,实时搜索代码库。

这种做法被称为 Agentic Search(智能体式检索)------检索的主动权交给了模型本身,而不是由一条预设的检索管线驱动。

两种检索架构的对比:
#mermaid-svg-ZIjN9B8XkziF8gyM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ZIjN9B8XkziF8gyM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZIjN9B8XkziF8gyM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZIjN9B8XkziF8gyM .error-icon{fill:#552222;}#mermaid-svg-ZIjN9B8XkziF8gyM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZIjN9B8XkziF8gyM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZIjN9B8XkziF8gyM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZIjN9B8XkziF8gyM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZIjN9B8XkziF8gyM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZIjN9B8XkziF8gyM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZIjN9B8XkziF8gyM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZIjN9B8XkziF8gyM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZIjN9B8XkziF8gyM .marker.cross{stroke:#333333;}#mermaid-svg-ZIjN9B8XkziF8gyM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZIjN9B8XkziF8gyM p{margin:0;}#mermaid-svg-ZIjN9B8XkziF8gyM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZIjN9B8XkziF8gyM .cluster-label text{fill:#333;}#mermaid-svg-ZIjN9B8XkziF8gyM .cluster-label span{color:#333;}#mermaid-svg-ZIjN9B8XkziF8gyM .cluster-label span p{background-color:transparent;}#mermaid-svg-ZIjN9B8XkziF8gyM .label text,#mermaid-svg-ZIjN9B8XkziF8gyM span{fill:#333;color:#333;}#mermaid-svg-ZIjN9B8XkziF8gyM .node rect,#mermaid-svg-ZIjN9B8XkziF8gyM .node circle,#mermaid-svg-ZIjN9B8XkziF8gyM .node ellipse,#mermaid-svg-ZIjN9B8XkziF8gyM .node polygon,#mermaid-svg-ZIjN9B8XkziF8gyM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZIjN9B8XkziF8gyM .rough-node .label text,#mermaid-svg-ZIjN9B8XkziF8gyM .node .label text,#mermaid-svg-ZIjN9B8XkziF8gyM .image-shape .label,#mermaid-svg-ZIjN9B8XkziF8gyM .icon-shape .label{text-anchor:middle;}#mermaid-svg-ZIjN9B8XkziF8gyM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ZIjN9B8XkziF8gyM .rough-node .label,#mermaid-svg-ZIjN9B8XkziF8gyM .node .label,#mermaid-svg-ZIjN9B8XkziF8gyM .image-shape .label,#mermaid-svg-ZIjN9B8XkziF8gyM .icon-shape .label{text-align:center;}#mermaid-svg-ZIjN9B8XkziF8gyM .node.clickable{cursor:pointer;}#mermaid-svg-ZIjN9B8XkziF8gyM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ZIjN9B8XkziF8gyM .arrowheadPath{fill:#333333;}#mermaid-svg-ZIjN9B8XkziF8gyM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZIjN9B8XkziF8gyM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZIjN9B8XkziF8gyM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZIjN9B8XkziF8gyM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ZIjN9B8XkziF8gyM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZIjN9B8XkziF8gyM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ZIjN9B8XkziF8gyM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZIjN9B8XkziF8gyM .cluster text{fill:#333;}#mermaid-svg-ZIjN9B8XkziF8gyM .cluster span{color:#333;}#mermaid-svg-ZIjN9B8XkziF8gyM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZIjN9B8XkziF8gyM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ZIjN9B8XkziF8gyM rect.text{fill:none;stroke-width:0;}#mermaid-svg-ZIjN9B8XkziF8gyM .icon-shape,#mermaid-svg-ZIjN9B8XkziF8gyM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZIjN9B8XkziF8gyM .icon-shape p,#mermaid-svg-ZIjN9B8XkziF8gyM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ZIjN9B8XkziF8gyM .icon-shape .label rect,#mermaid-svg-ZIjN9B8XkziF8gyM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZIjN9B8XkziF8gyM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ZIjN9B8XkziF8gyM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ZIjN9B8XkziF8gyM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 🤖 Agentic Search 架构
grep
向量库
API
不够
够了
用户提问
模型自主决策
实时搜索代码
语义检索文档
查询结构化数据
结果够吗?
模型回答
🔧 传统 RAG 架构
用户提问
向量检索

(预设管线)
重排序
拼接 Prompt
模型回答

核心区别:传统 RAG 的检索路径是固定的,模型只能被动接收检索结果;Agentic Search 让模型自己决定用什么工具、查几次、查完怎么用。

1.2 但这不等于"Anthropic 否定了 RAG"

这是一个常见的误读。事实上,同一时期 Anthropic 发布了多篇关于如何改进 RAG 的工程文章
#mermaid-svg-efQ5io9aZRqRhNpD{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-efQ5io9aZRqRhNpD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-efQ5io9aZRqRhNpD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-efQ5io9aZRqRhNpD .error-icon{fill:#552222;}#mermaid-svg-efQ5io9aZRqRhNpD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-efQ5io9aZRqRhNpD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-efQ5io9aZRqRhNpD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-efQ5io9aZRqRhNpD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-efQ5io9aZRqRhNpD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-efQ5io9aZRqRhNpD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-efQ5io9aZRqRhNpD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-efQ5io9aZRqRhNpD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-efQ5io9aZRqRhNpD .marker.cross{stroke:#333333;}#mermaid-svg-efQ5io9aZRqRhNpD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-efQ5io9aZRqRhNpD p{margin:0;}#mermaid-svg-efQ5io9aZRqRhNpD .edge{stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .section--1 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section--1 path,#mermaid-svg-efQ5io9aZRqRhNpD .section--1 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section--1 text{fill:#ffffff;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth--1{stroke-width:17;}#mermaid-svg-efQ5io9aZRqRhNpD .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:#ffffff;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-0 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-0 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-0 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-0 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-0{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-0{stroke-width:14;}#mermaid-svg-efQ5io9aZRqRhNpD .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-1 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-1 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-1 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-1 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-1{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-1{stroke-width:11;}#mermaid-svg-efQ5io9aZRqRhNpD .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-2 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-2 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-2 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-2 text{fill:#ffffff;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-2{stroke-width:8;}#mermaid-svg-efQ5io9aZRqRhNpD .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:#ffffff;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-3 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-3 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-3 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-3 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-3{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-3{stroke-width:5;}#mermaid-svg-efQ5io9aZRqRhNpD .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-4 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-4 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-4 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-4 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-4{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-4{stroke-width:2;}#mermaid-svg-efQ5io9aZRqRhNpD .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-5 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-5 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-5 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-5 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-5{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-5{stroke-width:-1;}#mermaid-svg-efQ5io9aZRqRhNpD .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-6 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-6 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-6 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-6 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-6{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-6{stroke-width:-4;}#mermaid-svg-efQ5io9aZRqRhNpD .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-7 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-7 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-7 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-7 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-7{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-7{stroke-width:-7;}#mermaid-svg-efQ5io9aZRqRhNpD .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-8 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-8 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-8 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-8 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-8{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-8{stroke-width:-10;}#mermaid-svg-efQ5io9aZRqRhNpD .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-9 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-9 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-9 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-9 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-9{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-9{stroke-width:-13;}#mermaid-svg-efQ5io9aZRqRhNpD .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-10 rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-10 path,#mermaid-svg-efQ5io9aZRqRhNpD .section-10 circle,#mermaid-svg-efQ5io9aZRqRhNpD .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-10 text{fill:black;}#mermaid-svg-efQ5io9aZRqRhNpD .node-icon-10{font-size:40px;color:black;}#mermaid-svg-efQ5io9aZRqRhNpD .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .edge-depth-10{stroke-width:-16;}#mermaid-svg-efQ5io9aZRqRhNpD .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-efQ5io9aZRqRhNpD .lineWrapper line{stroke:black;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled,#mermaid-svg-efQ5io9aZRqRhNpD .disabled circle,#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:lightgray;}#mermaid-svg-efQ5io9aZRqRhNpD .disabled text{fill:#efefef;}#mermaid-svg-efQ5io9aZRqRhNpD .section-root rect,#mermaid-svg-efQ5io9aZRqRhNpD .section-root path,#mermaid-svg-efQ5io9aZRqRhNpD .section-root circle{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-efQ5io9aZRqRhNpD .section-root text{fill:#ffffff;}#mermaid-svg-efQ5io9aZRqRhNpD .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-efQ5io9aZRqRhNpD .edge{fill:none;}#mermaid-svg-efQ5io9aZRqRhNpD .eventWrapper{filter:brightness(120%);}#mermaid-svg-efQ5io9aZRqRhNpD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2024年9月 《Contextual Retrieval》 检索失败率降低 49%-67% RAG 仍是大规模知识库方案 2024年12月 《Building Effective Agents》 区分 Workflow vs Agent "从最简单方案开始" 2025年5月 Latent Space 播客 Claude Code 用 Agentic Search 代码场景放弃传统 RAG 2025年6月 《Multi-Agent Research System》 多 Agent 协作检索 Token 消耗数据公开 Anthropic 检索技术演进时间线

  • 《Introducing Contextual Retrieval》(2024 年 9 月)\^2:Anthropic 系统性地介绍了如何通过"上下文增强"将 RAG 的检索失败率降低 49%(配合重排序可达 67%),并明确指出 RAG 是"扩展到超大规模知识库时的典型方案"。
  • 《Building Effective Agents》(2024 年 12 月)\^3:Anthropic 在讨论 Agent 架构时提到,"对于许多应用来说,用检索和上下文示例优化单次 LLM 调用通常就够了"。

关键区分 :Claude Code 放弃 RAG,是针对代码检索这个特定场景的决策,不是对 RAG 作为知识库技术的全盘否定。

理解这一点,是我们后续讨论的基石。


第二章 为什么代码场景不适合传统 RAG

2.1 先破除一个常见误区

很多人听到"Claude Code 放弃 RAG",第一反应是:"是不是 Embedding 对代码不灵?代码里大量共享 Token,模型分不清?"

这个说法站不住脚。 Embedding 的设计目标就是做语义区分。get_user_by_iddelete_user_by_id 虽然共享大量子串,但它们的语义截然不同,现代 Embedding 模型完全可以区分。Anthropic 在 Contextual Retrieval 的实验中,测试域就包含了代码库(codebases),且取得了正向结果\^2

所以,问题不在 Embedding 本身。

2.2 真正的三个问题

#mermaid-svg-W8NtrALjadRX0ZbD{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-W8NtrALjadRX0ZbD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-W8NtrALjadRX0ZbD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-W8NtrALjadRX0ZbD .error-icon{fill:#552222;}#mermaid-svg-W8NtrALjadRX0ZbD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-W8NtrALjadRX0ZbD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-W8NtrALjadRX0ZbD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-W8NtrALjadRX0ZbD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-W8NtrALjadRX0ZbD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-W8NtrALjadRX0ZbD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-W8NtrALjadRX0ZbD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-W8NtrALjadRX0ZbD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-W8NtrALjadRX0ZbD .marker.cross{stroke:#333333;}#mermaid-svg-W8NtrALjadRX0ZbD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-W8NtrALjadRX0ZbD p{margin:0;}#mermaid-svg-W8NtrALjadRX0ZbD .edge{stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .section--1 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section--1 path,#mermaid-svg-W8NtrALjadRX0ZbD .section--1 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section--1 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section--1 text{fill:#ffffff;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth--1{stroke-width:17;}#mermaid-svg-W8NtrALjadRX0ZbD .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-0 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-0 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-0 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-0 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-0 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-0{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-0{stroke-width:14;}#mermaid-svg-W8NtrALjadRX0ZbD .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-1 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-1 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-1 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-1 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-1 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-1{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-1{stroke-width:11;}#mermaid-svg-W8NtrALjadRX0ZbD .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-2 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-2 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-2 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-2 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-2 text{fill:#ffffff;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-2{stroke-width:8;}#mermaid-svg-W8NtrALjadRX0ZbD .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-3 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-3 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-3 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-3 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-3 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-3{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-3{stroke-width:5;}#mermaid-svg-W8NtrALjadRX0ZbD .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-4 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-4 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-4 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-4 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-4 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-4{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-4{stroke-width:2;}#mermaid-svg-W8NtrALjadRX0ZbD .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-5 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-5 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-5 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-5 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-5 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-5{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-5{stroke-width:-1;}#mermaid-svg-W8NtrALjadRX0ZbD .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-6 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-6 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-6 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-6 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-6 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-6{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-6{stroke-width:-4;}#mermaid-svg-W8NtrALjadRX0ZbD .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-7 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-7 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-7 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-7 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-7 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-7{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-7{stroke-width:-7;}#mermaid-svg-W8NtrALjadRX0ZbD .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-8 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-8 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-8 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-8 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-8 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-8{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-8{stroke-width:-10;}#mermaid-svg-W8NtrALjadRX0ZbD .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-9 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-9 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-9 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-9 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-9 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-9{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-9{stroke-width:-13;}#mermaid-svg-W8NtrALjadRX0ZbD .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-10 rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-10 path,#mermaid-svg-W8NtrALjadRX0ZbD .section-10 circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-10 polygon,#mermaid-svg-W8NtrALjadRX0ZbD .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-10 text{fill:black;}#mermaid-svg-W8NtrALjadRX0ZbD .node-icon-10{font-size:40px;color:black;}#mermaid-svg-W8NtrALjadRX0ZbD .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .edge-depth-10{stroke-width:-16;}#mermaid-svg-W8NtrALjadRX0ZbD .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled,#mermaid-svg-W8NtrALjadRX0ZbD .disabled circle,#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:lightgray;}#mermaid-svg-W8NtrALjadRX0ZbD .disabled text{fill:#efefef;}#mermaid-svg-W8NtrALjadRX0ZbD .section-root rect,#mermaid-svg-W8NtrALjadRX0ZbD .section-root path,#mermaid-svg-W8NtrALjadRX0ZbD .section-root circle,#mermaid-svg-W8NtrALjadRX0ZbD .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-W8NtrALjadRX0ZbD .section-root text{fill:#ffffff;}#mermaid-svg-W8NtrALjadRX0ZbD .section-root span{color:#ffffff;}#mermaid-svg-W8NtrALjadRX0ZbD .section-2 span{color:#ffffff;}#mermaid-svg-W8NtrALjadRX0ZbD .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-W8NtrALjadRX0ZbD .edge{fill:none;}#mermaid-svg-W8NtrALjadRX0ZbD .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-W8NtrALjadRX0ZbD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} RAG 在代码场景

的三个核心问题
不可诊断性
检索系统是外部黑盒
模型无法判断错误来源
调试时分不清哪个环节出错
Grep 失败原因唯一:关键词没匹配
环节乘法效应
文档切分 → Embedding → 检索 → 重排序 → 生成
每环节 90% 成功率
五环节串联仅 59%
出错时难以隔离问题
索引时效性
代码仓库变化极快
频繁重建:计算开销大
容忍过期:检索结果漂移
Grep 实时搜索无同步问题

问题一:不可诊断性

传统 RAG 的流程是:用户提问 → 系统检索相关片段 → 把片段塞进 Prompt → 模型回答。

问题在于,检索系统是模型外部的一个黑盒。当检索结果不对时,模型无法判断:

  • 是检索系统出了问题(没召回正确的片段)?
  • 还是数据本身就是这样(确实没有相关内容)?

模型没有能力"诊断"这条外部管线。在实践中,这意味着当结果出错时,你很难快速定位原因------是 Chunk 切分有问题?是 Embedding 质量不够?还是重排序模型偏了?

而 Grep 的失败原因只有一个:关键词没匹配上。这种确定性在工程调试中价值巨大------你一眼就能看出是搜索词写错了,还是代码里确实没有这个符号。

调试体验对比:
#mermaid-svg-ecS5smROwZAfQzSx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ecS5smROwZAfQzSx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ecS5smROwZAfQzSx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ecS5smROwZAfQzSx .error-icon{fill:#552222;}#mermaid-svg-ecS5smROwZAfQzSx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ecS5smROwZAfQzSx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ecS5smROwZAfQzSx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ecS5smROwZAfQzSx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ecS5smROwZAfQzSx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ecS5smROwZAfQzSx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ecS5smROwZAfQzSx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ecS5smROwZAfQzSx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ecS5smROwZAfQzSx .marker.cross{stroke:#333333;}#mermaid-svg-ecS5smROwZAfQzSx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ecS5smROwZAfQzSx p{margin:0;}#mermaid-svg-ecS5smROwZAfQzSx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ecS5smROwZAfQzSx .cluster-label text{fill:#333;}#mermaid-svg-ecS5smROwZAfQzSx .cluster-label span{color:#333;}#mermaid-svg-ecS5smROwZAfQzSx .cluster-label span p{background-color:transparent;}#mermaid-svg-ecS5smROwZAfQzSx .label text,#mermaid-svg-ecS5smROwZAfQzSx span{fill:#333;color:#333;}#mermaid-svg-ecS5smROwZAfQzSx .node rect,#mermaid-svg-ecS5smROwZAfQzSx .node circle,#mermaid-svg-ecS5smROwZAfQzSx .node ellipse,#mermaid-svg-ecS5smROwZAfQzSx .node polygon,#mermaid-svg-ecS5smROwZAfQzSx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ecS5smROwZAfQzSx .rough-node .label text,#mermaid-svg-ecS5smROwZAfQzSx .node .label text,#mermaid-svg-ecS5smROwZAfQzSx .image-shape .label,#mermaid-svg-ecS5smROwZAfQzSx .icon-shape .label{text-anchor:middle;}#mermaid-svg-ecS5smROwZAfQzSx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ecS5smROwZAfQzSx .rough-node .label,#mermaid-svg-ecS5smROwZAfQzSx .node .label,#mermaid-svg-ecS5smROwZAfQzSx .image-shape .label,#mermaid-svg-ecS5smROwZAfQzSx .icon-shape .label{text-align:center;}#mermaid-svg-ecS5smROwZAfQzSx .node.clickable{cursor:pointer;}#mermaid-svg-ecS5smROwZAfQzSx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ecS5smROwZAfQzSx .arrowheadPath{fill:#333333;}#mermaid-svg-ecS5smROwZAfQzSx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ecS5smROwZAfQzSx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ecS5smROwZAfQzSx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ecS5smROwZAfQzSx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ecS5smROwZAfQzSx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ecS5smROwZAfQzSx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ecS5smROwZAfQzSx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ecS5smROwZAfQzSx .cluster text{fill:#333;}#mermaid-svg-ecS5smROwZAfQzSx .cluster span{color:#333;}#mermaid-svg-ecS5smROwZAfQzSx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ecS5smROwZAfQzSx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ecS5smROwZAfQzSx rect.text{fill:none;stroke-width:0;}#mermaid-svg-ecS5smROwZAfQzSx .icon-shape,#mermaid-svg-ecS5smROwZAfQzSx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ecS5smROwZAfQzSx .icon-shape p,#mermaid-svg-ecS5smROwZAfQzSx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ecS5smROwZAfQzSx .icon-shape .label rect,#mermaid-svg-ecS5smROwZAfQzSx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ecS5smROwZAfQzSx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ecS5smROwZAfQzSx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ecS5smROwZAfQzSx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ⚡ Grep 出错时的调试路径
结果不对
关键词没匹配上
换个关键词重试
🔍 RAG 出错时的调试路径
结果不对
哪个环节?
Chunk 切分?
Embedding 质量?
向量检索参数?
重排序模型?
Prompt 拼接?
逐一排查...

问题二:环节乘法效应

RAG 是一条多环节管线:文档切分 → Embedding 生成 → 向量检索 → 重排序 → 最终生成。

每个环节哪怕做到 90% 的成功率,五个环节串联下来: 0.9 5 ≈ 59 % 0.9^5 \approx 59\% 0.95≈59%,整体成功率不到 60%。

环节越多,整体可靠性衰减越快:
#mermaid-svg-9r1uYxk2BoRcZ6w4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-9r1uYxk2BoRcZ6w4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .error-icon{fill:#552222;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9r1uYxk2BoRcZ6w4 .marker.cross{stroke:#333333;}#mermaid-svg-9r1uYxk2BoRcZ6w4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9r1uYxk2BoRcZ6w4 p{margin:0;}#mermaid-svg-9r1uYxk2BoRcZ6w4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} RAG 环节乘法效应:每环节 90% 成功率下的整体可靠性 1个环节 2个环节 3个环节 4个环节 5个环节 100 90 80 70 60 50 40 30 20 10 0 整体成功率 (%)

更麻烦的是,出错时你很难隔离是哪个环节的问题。这在生产环境中是调试灾难。相比之下,Grep 是单步操作,要么匹配到、要么没匹配到,没有中间状态的歧义。

问题三:索引时效性

代码仓库变化极快------上午建的索引,下午一个 PR 合并后可能就过时了。

这带来一个两难:
#mermaid-svg-iF8rGIEEizJ7QMbL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-iF8rGIEEizJ7QMbL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iF8rGIEEizJ7QMbL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iF8rGIEEizJ7QMbL .error-icon{fill:#552222;}#mermaid-svg-iF8rGIEEizJ7QMbL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iF8rGIEEizJ7QMbL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iF8rGIEEizJ7QMbL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iF8rGIEEizJ7QMbL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iF8rGIEEizJ7QMbL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iF8rGIEEizJ7QMbL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iF8rGIEEizJ7QMbL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iF8rGIEEizJ7QMbL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iF8rGIEEizJ7QMbL .marker.cross{stroke:#333333;}#mermaid-svg-iF8rGIEEizJ7QMbL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iF8rGIEEizJ7QMbL p{margin:0;}#mermaid-svg-iF8rGIEEizJ7QMbL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-iF8rGIEEizJ7QMbL .cluster-label text{fill:#333;}#mermaid-svg-iF8rGIEEizJ7QMbL .cluster-label span{color:#333;}#mermaid-svg-iF8rGIEEizJ7QMbL .cluster-label span p{background-color:transparent;}#mermaid-svg-iF8rGIEEizJ7QMbL .label text,#mermaid-svg-iF8rGIEEizJ7QMbL span{fill:#333;color:#333;}#mermaid-svg-iF8rGIEEizJ7QMbL .node rect,#mermaid-svg-iF8rGIEEizJ7QMbL .node circle,#mermaid-svg-iF8rGIEEizJ7QMbL .node ellipse,#mermaid-svg-iF8rGIEEizJ7QMbL .node polygon,#mermaid-svg-iF8rGIEEizJ7QMbL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-iF8rGIEEizJ7QMbL .rough-node .label text,#mermaid-svg-iF8rGIEEizJ7QMbL .node .label text,#mermaid-svg-iF8rGIEEizJ7QMbL .image-shape .label,#mermaid-svg-iF8rGIEEizJ7QMbL .icon-shape .label{text-anchor:middle;}#mermaid-svg-iF8rGIEEizJ7QMbL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-iF8rGIEEizJ7QMbL .rough-node .label,#mermaid-svg-iF8rGIEEizJ7QMbL .node .label,#mermaid-svg-iF8rGIEEizJ7QMbL .image-shape .label,#mermaid-svg-iF8rGIEEizJ7QMbL .icon-shape .label{text-align:center;}#mermaid-svg-iF8rGIEEizJ7QMbL .node.clickable{cursor:pointer;}#mermaid-svg-iF8rGIEEizJ7QMbL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-iF8rGIEEizJ7QMbL .arrowheadPath{fill:#333333;}#mermaid-svg-iF8rGIEEizJ7QMbL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-iF8rGIEEizJ7QMbL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-iF8rGIEEizJ7QMbL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iF8rGIEEizJ7QMbL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-iF8rGIEEizJ7QMbL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iF8rGIEEizJ7QMbL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-iF8rGIEEizJ7QMbL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-iF8rGIEEizJ7QMbL .cluster text{fill:#333;}#mermaid-svg-iF8rGIEEizJ7QMbL .cluster span{color:#333;}#mermaid-svg-iF8rGIEEizJ7QMbL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-iF8rGIEEizJ7QMbL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-iF8rGIEEizJ7QMbL rect.text{fill:none;stroke-width:0;}#mermaid-svg-iF8rGIEEizJ7QMbL .icon-shape,#mermaid-svg-iF8rGIEEizJ7QMbL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iF8rGIEEizJ7QMbL .icon-shape p,#mermaid-svg-iF8rGIEEizJ7QMbL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-iF8rGIEEizJ7QMbL .icon-shape .label rect,#mermaid-svg-iF8rGIEEizJ7QMbL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iF8rGIEEizJ7QMbL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-iF8rGIEEizJ7QMbL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-iF8rGIEEizJ7QMbL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 频繁重建
容忍过期
💻 代码仓库持续变更
索引策略选择
计算开销大

大型代码库成本高
索引与代码漂移

模型基于过时信息回答
⚡ Grep 实时搜索
永远拿到最新状态

零同步开销

  • 频繁重建索引:计算开销大,尤其对大型代码库;
  • 容忍过期索引:检索结果与实际代码产生"漂移",模型基于过时信息给出错误答案。

Grep 每次实时搜索,拿到的永远是当前磁盘上的最新状态,不存在同步问题。对于代码这种高频变更的资产,这是一个结构性优势。

2.3 代码场景的特殊性:精确匹配天然占主导

还有一个场景层面的原因。代码检索的大部分需求是精确匹配

  • 查找函数名、变量名、类名
  • 定位错误码、异常日志中的关键字
  • 追踪某个 API 的调用点

这些场景中,符号本身就是最好的检索关键词。grep -rn "PaymentService" 比任何语义检索都更直接、更准确。

小结 :Claude Code 放弃 RAG,不是因为 RAG 技术本身不行,而是因为代码场景的三个特性------需要可诊断性、环节要少、数据要实时------恰好与传统 RAG 的架构假设冲突。


第三章 场景分界:什么时候该用什么

理解了"为什么不用",更重要的是知道"什么时候该用"。这里有一条清晰的分界线。

3.1 适合精确检索(Grep / 终端命令)的场景

特征 例子
有明确的标识符 函数名、变量名、错误码、配置项
需要精确匹配 "找到所有调用 processRefund 的地方"
数据高频变更 代码仓库、配置文件
需要可追溯性 必须知道确切位置和上下文

3.2 适合语义检索(知识库 / 向量检索)的场景

特征 例子
意图模糊,无法用精确关键词表达 "我们的权限校验是怎么做的?"
知识分散在多份文档中 员工手册、技术规范、架构决策记录
概念性探索 "系统中有哪些地方涉及支付风控?"
数据相对稳定 规章制度、产品文档、历史案例

3.3 核心判断标准:一个简单的决策树

#mermaid-svg-nS0hqj3s41txpI30{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nS0hqj3s41txpI30 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nS0hqj3s41txpI30 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nS0hqj3s41txpI30 .error-icon{fill:#552222;}#mermaid-svg-nS0hqj3s41txpI30 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nS0hqj3s41txpI30 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nS0hqj3s41txpI30 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nS0hqj3s41txpI30 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nS0hqj3s41txpI30 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nS0hqj3s41txpI30 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nS0hqj3s41txpI30 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nS0hqj3s41txpI30 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nS0hqj3s41txpI30 .marker.cross{stroke:#333333;}#mermaid-svg-nS0hqj3s41txpI30 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nS0hqj3s41txpI30 p{margin:0;}#mermaid-svg-nS0hqj3s41txpI30 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-nS0hqj3s41txpI30 .cluster-label text{fill:#333;}#mermaid-svg-nS0hqj3s41txpI30 .cluster-label span{color:#333;}#mermaid-svg-nS0hqj3s41txpI30 .cluster-label span p{background-color:transparent;}#mermaid-svg-nS0hqj3s41txpI30 .label text,#mermaid-svg-nS0hqj3s41txpI30 span{fill:#333;color:#333;}#mermaid-svg-nS0hqj3s41txpI30 .node rect,#mermaid-svg-nS0hqj3s41txpI30 .node circle,#mermaid-svg-nS0hqj3s41txpI30 .node ellipse,#mermaid-svg-nS0hqj3s41txpI30 .node polygon,#mermaid-svg-nS0hqj3s41txpI30 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nS0hqj3s41txpI30 .rough-node .label text,#mermaid-svg-nS0hqj3s41txpI30 .node .label text,#mermaid-svg-nS0hqj3s41txpI30 .image-shape .label,#mermaid-svg-nS0hqj3s41txpI30 .icon-shape .label{text-anchor:middle;}#mermaid-svg-nS0hqj3s41txpI30 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nS0hqj3s41txpI30 .rough-node .label,#mermaid-svg-nS0hqj3s41txpI30 .node .label,#mermaid-svg-nS0hqj3s41txpI30 .image-shape .label,#mermaid-svg-nS0hqj3s41txpI30 .icon-shape .label{text-align:center;}#mermaid-svg-nS0hqj3s41txpI30 .node.clickable{cursor:pointer;}#mermaid-svg-nS0hqj3s41txpI30 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nS0hqj3s41txpI30 .arrowheadPath{fill:#333333;}#mermaid-svg-nS0hqj3s41txpI30 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nS0hqj3s41txpI30 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nS0hqj3s41txpI30 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nS0hqj3s41txpI30 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nS0hqj3s41txpI30 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nS0hqj3s41txpI30 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nS0hqj3s41txpI30 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nS0hqj3s41txpI30 .cluster text{fill:#333;}#mermaid-svg-nS0hqj3s41txpI30 .cluster span{color:#333;}#mermaid-svg-nS0hqj3s41txpI30 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nS0hqj3s41txpI30 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nS0hqj3s41txpI30 rect.text{fill:none;stroke-width:0;}#mermaid-svg-nS0hqj3s41txpI30 .icon-shape,#mermaid-svg-nS0hqj3s41txpI30 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nS0hqj3s41txpI30 .icon-shape p,#mermaid-svg-nS0hqj3s41txpI30 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nS0hqj3s41txpI30 .icon-shape .label rect,#mermaid-svg-nS0hqj3s41txpI30 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nS0hqj3s41txpI30 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nS0hqj3s41txpI30 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nS0hqj3s41txpI30 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 能
不能
高(如代码)
低(如文档)




🎯 你的检索需求是什么?
能用精确

关键词描述吗?
数据变更

频率高吗?
需要跨文档

关联推理吗?
✅ Grep / 全文搜索
需要语义

理解吗?
🔍 语义检索 + 模型整合
✅ Grep / 全文搜索
🔍 向量检索
✅ Grep / 全文搜索

记住 :这不是非此即彼的选择。很多真实项目同时需要两种能力,关键在于让模型自己判断该用哪种------这正是下一章的主题。


第四章 核心思想转变:让模型驱动检索

4.1 传统 RAG 的问题:把模型当"傻子"

传统 RAG 的流程是固定的:
#mermaid-svg-O0jGKmZwSHICJMVN{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-O0jGKmZwSHICJMVN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-O0jGKmZwSHICJMVN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-O0jGKmZwSHICJMVN .error-icon{fill:#552222;}#mermaid-svg-O0jGKmZwSHICJMVN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-O0jGKmZwSHICJMVN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-O0jGKmZwSHICJMVN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-O0jGKmZwSHICJMVN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-O0jGKmZwSHICJMVN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-O0jGKmZwSHICJMVN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-O0jGKmZwSHICJMVN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-O0jGKmZwSHICJMVN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-O0jGKmZwSHICJMVN .marker.cross{stroke:#333333;}#mermaid-svg-O0jGKmZwSHICJMVN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-O0jGKmZwSHICJMVN p{margin:0;}#mermaid-svg-O0jGKmZwSHICJMVN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-O0jGKmZwSHICJMVN .cluster-label text{fill:#333;}#mermaid-svg-O0jGKmZwSHICJMVN .cluster-label span{color:#333;}#mermaid-svg-O0jGKmZwSHICJMVN .cluster-label span p{background-color:transparent;}#mermaid-svg-O0jGKmZwSHICJMVN .label text,#mermaid-svg-O0jGKmZwSHICJMVN span{fill:#333;color:#333;}#mermaid-svg-O0jGKmZwSHICJMVN .node rect,#mermaid-svg-O0jGKmZwSHICJMVN .node circle,#mermaid-svg-O0jGKmZwSHICJMVN .node ellipse,#mermaid-svg-O0jGKmZwSHICJMVN .node polygon,#mermaid-svg-O0jGKmZwSHICJMVN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-O0jGKmZwSHICJMVN .rough-node .label text,#mermaid-svg-O0jGKmZwSHICJMVN .node .label text,#mermaid-svg-O0jGKmZwSHICJMVN .image-shape .label,#mermaid-svg-O0jGKmZwSHICJMVN .icon-shape .label{text-anchor:middle;}#mermaid-svg-O0jGKmZwSHICJMVN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-O0jGKmZwSHICJMVN .rough-node .label,#mermaid-svg-O0jGKmZwSHICJMVN .node .label,#mermaid-svg-O0jGKmZwSHICJMVN .image-shape .label,#mermaid-svg-O0jGKmZwSHICJMVN .icon-shape .label{text-align:center;}#mermaid-svg-O0jGKmZwSHICJMVN .node.clickable{cursor:pointer;}#mermaid-svg-O0jGKmZwSHICJMVN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-O0jGKmZwSHICJMVN .arrowheadPath{fill:#333333;}#mermaid-svg-O0jGKmZwSHICJMVN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-O0jGKmZwSHICJMVN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-O0jGKmZwSHICJMVN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-O0jGKmZwSHICJMVN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-O0jGKmZwSHICJMVN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-O0jGKmZwSHICJMVN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-O0jGKmZwSHICJMVN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-O0jGKmZwSHICJMVN .cluster text{fill:#333;}#mermaid-svg-O0jGKmZwSHICJMVN .cluster span{color:#333;}#mermaid-svg-O0jGKmZwSHICJMVN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-O0jGKmZwSHICJMVN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-O0jGKmZwSHICJMVN rect.text{fill:none;stroke-width:0;}#mermaid-svg-O0jGKmZwSHICJMVN .icon-shape,#mermaid-svg-O0jGKmZwSHICJMVN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-O0jGKmZwSHICJMVN .icon-shape p,#mermaid-svg-O0jGKmZwSHICJMVN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-O0jGKmZwSHICJMVN .icon-shape .label rect,#mermaid-svg-O0jGKmZwSHICJMVN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-O0jGKmZwSHICJMVN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-O0jGKmZwSHICJMVN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-O0jGKmZwSHICJMVN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 👤 用户提问
🔍 系统检索

(固定管线)
📝 拼接 Prompt
🤖 模型回答

(被动接收)
💬 最终回答

这条管线在模型回答之前就决定了模型能看到什么。模型没有选择权------它只能基于检索系统喂给它的片段来回答。如果检索结果不好,模型也无能为力。

这本质上是把大模型当成一个"只负责最后一步生成"的被动组件,没有利用模型自身的判断力。

Anthropic 在《Building Effective Agents》中明确区分了两种架构\^3

维度 Workflow(工作流) Agent(智能体)
流程控制 预定义代码路径 模型动态决定
灵活性 低,路径固定 高,按需调整
适用场景 步骤可预测的任务 开放式探索任务
检索方式 固定管线检索 模型自主选择工具

Agentic Search 的核心思路是:把检索的主动权交给模型
#mermaid-svg-3vLP88GvCSiLLcJv{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-3vLP88GvCSiLLcJv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-3vLP88GvCSiLLcJv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-3vLP88GvCSiLLcJv .error-icon{fill:#552222;}#mermaid-svg-3vLP88GvCSiLLcJv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3vLP88GvCSiLLcJv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-3vLP88GvCSiLLcJv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3vLP88GvCSiLLcJv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3vLP88GvCSiLLcJv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-3vLP88GvCSiLLcJv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3vLP88GvCSiLLcJv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3vLP88GvCSiLLcJv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3vLP88GvCSiLLcJv .marker.cross{stroke:#333333;}#mermaid-svg-3vLP88GvCSiLLcJv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3vLP88GvCSiLLcJv p{margin:0;}#mermaid-svg-3vLP88GvCSiLLcJv .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3vLP88GvCSiLLcJv .cluster-label text{fill:#333;}#mermaid-svg-3vLP88GvCSiLLcJv .cluster-label span{color:#333;}#mermaid-svg-3vLP88GvCSiLLcJv .cluster-label span p{background-color:transparent;}#mermaid-svg-3vLP88GvCSiLLcJv .label text,#mermaid-svg-3vLP88GvCSiLLcJv span{fill:#333;color:#333;}#mermaid-svg-3vLP88GvCSiLLcJv .node rect,#mermaid-svg-3vLP88GvCSiLLcJv .node circle,#mermaid-svg-3vLP88GvCSiLLcJv .node ellipse,#mermaid-svg-3vLP88GvCSiLLcJv .node polygon,#mermaid-svg-3vLP88GvCSiLLcJv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3vLP88GvCSiLLcJv .rough-node .label text,#mermaid-svg-3vLP88GvCSiLLcJv .node .label text,#mermaid-svg-3vLP88GvCSiLLcJv .image-shape .label,#mermaid-svg-3vLP88GvCSiLLcJv .icon-shape .label{text-anchor:middle;}#mermaid-svg-3vLP88GvCSiLLcJv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-3vLP88GvCSiLLcJv .rough-node .label,#mermaid-svg-3vLP88GvCSiLLcJv .node .label,#mermaid-svg-3vLP88GvCSiLLcJv .image-shape .label,#mermaid-svg-3vLP88GvCSiLLcJv .icon-shape .label{text-align:center;}#mermaid-svg-3vLP88GvCSiLLcJv .node.clickable{cursor:pointer;}#mermaid-svg-3vLP88GvCSiLLcJv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-3vLP88GvCSiLLcJv .arrowheadPath{fill:#333333;}#mermaid-svg-3vLP88GvCSiLLcJv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3vLP88GvCSiLLcJv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3vLP88GvCSiLLcJv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3vLP88GvCSiLLcJv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-3vLP88GvCSiLLcJv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3vLP88GvCSiLLcJv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-3vLP88GvCSiLLcJv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3vLP88GvCSiLLcJv .cluster text{fill:#333;}#mermaid-svg-3vLP88GvCSiLLcJv .cluster span{color:#333;}#mermaid-svg-3vLP88GvCSiLLcJv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3vLP88GvCSiLLcJv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-3vLP88GvCSiLLcJv rect.text{fill:none;stroke-width:0;}#mermaid-svg-3vLP88GvCSiLLcJv .icon-shape,#mermaid-svg-3vLP88GvCSiLLcJv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3vLP88GvCSiLLcJv .icon-shape p,#mermaid-svg-3vLP88GvCSiLLcJv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-3vLP88GvCSiLLcJv .icon-shape .label rect,#mermaid-svg-3vLP88GvCSiLLcJv .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3vLP88GvCSiLLcJv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-3vLP88GvCSiLLcJv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-3vLP88GvCSiLLcJv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 需要查代码?
需要查文档?
需要查数据?
不需要查
不够,换个角度
够了
👤 用户提问
🤖 模型自主决策
⚡ grep / glob / find
🔍 向量库检索
📊 API / SQL 查询
💬 直接回答
结果够吗?
💬 综合回答

模型自己判断:

  • 需要查什么?(生成搜索查询)
  • 什么时候查?(决定何时调用工具)
  • 查完之后怎么用?(评估结果,决定是否需要再查)
  • 用什么工具查?(Grep?向量库?API?)

知识库可以挂在那里,但不是在模型外面预设一条固定的检索管线,而是让模型按需调用

4.3 一个类比

把传统 RAG 想象成:你给一个新员工一本厚厚的手册,告诉他"每次遇到问题,先翻到第 X 页,照着做"。

Agentic Search 则是:你给这个员工一个工具箱(里面有搜索引擎、文件浏览器、命令行),告诉他"你自己判断需要用什么工具、什么时候用"。

后者显然更灵活------前提是这个员工足够聪明。今天的强模型已经具备了这个能力。
#mermaid-svg-xnjGjAWUZNKWfcxe{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-xnjGjAWUZNKWfcxe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xnjGjAWUZNKWfcxe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xnjGjAWUZNKWfcxe .error-icon{fill:#552222;}#mermaid-svg-xnjGjAWUZNKWfcxe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xnjGjAWUZNKWfcxe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xnjGjAWUZNKWfcxe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xnjGjAWUZNKWfcxe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xnjGjAWUZNKWfcxe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xnjGjAWUZNKWfcxe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xnjGjAWUZNKWfcxe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xnjGjAWUZNKWfcxe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xnjGjAWUZNKWfcxe .marker.cross{stroke:#333333;}#mermaid-svg-xnjGjAWUZNKWfcxe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xnjGjAWUZNKWfcxe p{margin:0;}#mermaid-svg-xnjGjAWUZNKWfcxe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xnjGjAWUZNKWfcxe .cluster-label text{fill:#333;}#mermaid-svg-xnjGjAWUZNKWfcxe .cluster-label span{color:#333;}#mermaid-svg-xnjGjAWUZNKWfcxe .cluster-label span p{background-color:transparent;}#mermaid-svg-xnjGjAWUZNKWfcxe .label text,#mermaid-svg-xnjGjAWUZNKWfcxe span{fill:#333;color:#333;}#mermaid-svg-xnjGjAWUZNKWfcxe .node rect,#mermaid-svg-xnjGjAWUZNKWfcxe .node circle,#mermaid-svg-xnjGjAWUZNKWfcxe .node ellipse,#mermaid-svg-xnjGjAWUZNKWfcxe .node polygon,#mermaid-svg-xnjGjAWUZNKWfcxe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xnjGjAWUZNKWfcxe .rough-node .label text,#mermaid-svg-xnjGjAWUZNKWfcxe .node .label text,#mermaid-svg-xnjGjAWUZNKWfcxe .image-shape .label,#mermaid-svg-xnjGjAWUZNKWfcxe .icon-shape .label{text-anchor:middle;}#mermaid-svg-xnjGjAWUZNKWfcxe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xnjGjAWUZNKWfcxe .rough-node .label,#mermaid-svg-xnjGjAWUZNKWfcxe .node .label,#mermaid-svg-xnjGjAWUZNKWfcxe .image-shape .label,#mermaid-svg-xnjGjAWUZNKWfcxe .icon-shape .label{text-align:center;}#mermaid-svg-xnjGjAWUZNKWfcxe .node.clickable{cursor:pointer;}#mermaid-svg-xnjGjAWUZNKWfcxe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xnjGjAWUZNKWfcxe .arrowheadPath{fill:#333333;}#mermaid-svg-xnjGjAWUZNKWfcxe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xnjGjAWUZNKWfcxe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xnjGjAWUZNKWfcxe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xnjGjAWUZNKWfcxe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xnjGjAWUZNKWfcxe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xnjGjAWUZNKWfcxe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xnjGjAWUZNKWfcxe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xnjGjAWUZNKWfcxe .cluster text{fill:#333;}#mermaid-svg-xnjGjAWUZNKWfcxe .cluster span{color:#333;}#mermaid-svg-xnjGjAWUZNKWfcxe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xnjGjAWUZNKWfcxe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xnjGjAWUZNKWfcxe rect.text{fill:none;stroke-width:0;}#mermaid-svg-xnjGjAWUZNKWfcxe .icon-shape,#mermaid-svg-xnjGjAWUZNKWfcxe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xnjGjAWUZNKWfcxe .icon-shape p,#mermaid-svg-xnjGjAWUZNKWfcxe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xnjGjAWUZNKWfcxe .icon-shape .label rect,#mermaid-svg-xnjGjAWUZNKWfcxe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xnjGjAWUZNKWfcxe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xnjGjAWUZNKWfcxe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xnjGjAWUZNKWfcxe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 🧰 Agentic Search:给员工一个工具箱
查手册
搜代码
问同事
直接知道
遇到问题
自己判断
📖 翻手册
💻 搜代码
💬 问同事
✅ 直接回答
📋 传统 RAG:给员工一本手册
遇到问题
翻到指定页码
照着做


第五章 落到实处:实际项目中如何合理创建知识库

前面四章是"为什么",这一章是"怎么做"。以下建议综合了 Anthropic 官方工程实践^2^3 和业界经验,面向的是"你决定要建知识库"的场景。

整体建设路线图:
#mermaid-svg-T5S7KjJP7mG2CTI3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-T5S7KjJP7mG2CTI3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-T5S7KjJP7mG2CTI3 .error-icon{fill:#552222;}#mermaid-svg-T5S7KjJP7mG2CTI3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-T5S7KjJP7mG2CTI3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-T5S7KjJP7mG2CTI3 .marker.cross{stroke:#333333;}#mermaid-svg-T5S7KjJP7mG2CTI3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-T5S7KjJP7mG2CTI3 p{margin:0;}#mermaid-svg-T5S7KjJP7mG2CTI3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-T5S7KjJP7mG2CTI3 .cluster-label text{fill:#333;}#mermaid-svg-T5S7KjJP7mG2CTI3 .cluster-label span{color:#333;}#mermaid-svg-T5S7KjJP7mG2CTI3 .cluster-label span p{background-color:transparent;}#mermaid-svg-T5S7KjJP7mG2CTI3 .label text,#mermaid-svg-T5S7KjJP7mG2CTI3 span{fill:#333;color:#333;}#mermaid-svg-T5S7KjJP7mG2CTI3 .node rect,#mermaid-svg-T5S7KjJP7mG2CTI3 .node circle,#mermaid-svg-T5S7KjJP7mG2CTI3 .node ellipse,#mermaid-svg-T5S7KjJP7mG2CTI3 .node polygon,#mermaid-svg-T5S7KjJP7mG2CTI3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-T5S7KjJP7mG2CTI3 .rough-node .label text,#mermaid-svg-T5S7KjJP7mG2CTI3 .node .label text,#mermaid-svg-T5S7KjJP7mG2CTI3 .image-shape .label,#mermaid-svg-T5S7KjJP7mG2CTI3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-T5S7KjJP7mG2CTI3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-T5S7KjJP7mG2CTI3 .rough-node .label,#mermaid-svg-T5S7KjJP7mG2CTI3 .node .label,#mermaid-svg-T5S7KjJP7mG2CTI3 .image-shape .label,#mermaid-svg-T5S7KjJP7mG2CTI3 .icon-shape .label{text-align:center;}#mermaid-svg-T5S7KjJP7mG2CTI3 .node.clickable{cursor:pointer;}#mermaid-svg-T5S7KjJP7mG2CTI3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-T5S7KjJP7mG2CTI3 .arrowheadPath{fill:#333333;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-T5S7KjJP7mG2CTI3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-T5S7KjJP7mG2CTI3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-T5S7KjJP7mG2CTI3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-T5S7KjJP7mG2CTI3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-T5S7KjJP7mG2CTI3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-T5S7KjJP7mG2CTI3 .cluster text{fill:#333;}#mermaid-svg-T5S7KjJP7mG2CTI3 .cluster span{color:#333;}#mermaid-svg-T5S7KjJP7mG2CTI3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-T5S7KjJP7mG2CTI3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-T5S7KjJP7mG2CTI3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-T5S7KjJP7mG2CTI3 .icon-shape,#mermaid-svg-T5S7KjJP7mG2CTI3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-T5S7KjJP7mG2CTI3 .icon-shape p,#mermaid-svg-T5S7KjJP7mG2CTI3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-T5S7KjJP7mG2CTI3 .icon-shape .label rect,#mermaid-svg-T5S7KjJP7mG2CTI3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-T5S7KjJP7mG2CTI3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-T5S7KjJP7mG2CTI3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-T5S7KjJP7mG2CTI3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1️⃣ 决策

真的需要吗?
2️⃣ 切分

Chunk + 上下文
3️⃣ 检索

Embedding + BM25
4️⃣ 排序

Reranking
5️⃣ 调用

封装为 Tool
6️⃣ 同步

增量更新
7️⃣ 评估

持续迭代

5.1 第一步:先问自己------真的需要知识库吗?

在动手建向量数据库之前,先回答三个问题:
#mermaid-svg-wgy8y2RPSvx23h2A{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wgy8y2RPSvx23h2A .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wgy8y2RPSvx23h2A .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wgy8y2RPSvx23h2A .error-icon{fill:#552222;}#mermaid-svg-wgy8y2RPSvx23h2A .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wgy8y2RPSvx23h2A .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wgy8y2RPSvx23h2A .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wgy8y2RPSvx23h2A .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wgy8y2RPSvx23h2A .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wgy8y2RPSvx23h2A .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wgy8y2RPSvx23h2A .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wgy8y2RPSvx23h2A .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wgy8y2RPSvx23h2A .marker.cross{stroke:#333333;}#mermaid-svg-wgy8y2RPSvx23h2A svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wgy8y2RPSvx23h2A p{margin:0;}#mermaid-svg-wgy8y2RPSvx23h2A .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wgy8y2RPSvx23h2A .cluster-label text{fill:#333;}#mermaid-svg-wgy8y2RPSvx23h2A .cluster-label span{color:#333;}#mermaid-svg-wgy8y2RPSvx23h2A .cluster-label span p{background-color:transparent;}#mermaid-svg-wgy8y2RPSvx23h2A .label text,#mermaid-svg-wgy8y2RPSvx23h2A span{fill:#333;color:#333;}#mermaid-svg-wgy8y2RPSvx23h2A .node rect,#mermaid-svg-wgy8y2RPSvx23h2A .node circle,#mermaid-svg-wgy8y2RPSvx23h2A .node ellipse,#mermaid-svg-wgy8y2RPSvx23h2A .node polygon,#mermaid-svg-wgy8y2RPSvx23h2A .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wgy8y2RPSvx23h2A .rough-node .label text,#mermaid-svg-wgy8y2RPSvx23h2A .node .label text,#mermaid-svg-wgy8y2RPSvx23h2A .image-shape .label,#mermaid-svg-wgy8y2RPSvx23h2A .icon-shape .label{text-anchor:middle;}#mermaid-svg-wgy8y2RPSvx23h2A .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wgy8y2RPSvx23h2A .rough-node .label,#mermaid-svg-wgy8y2RPSvx23h2A .node .label,#mermaid-svg-wgy8y2RPSvx23h2A .image-shape .label,#mermaid-svg-wgy8y2RPSvx23h2A .icon-shape .label{text-align:center;}#mermaid-svg-wgy8y2RPSvx23h2A .node.clickable{cursor:pointer;}#mermaid-svg-wgy8y2RPSvx23h2A .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wgy8y2RPSvx23h2A .arrowheadPath{fill:#333333;}#mermaid-svg-wgy8y2RPSvx23h2A .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wgy8y2RPSvx23h2A .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wgy8y2RPSvx23h2A .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wgy8y2RPSvx23h2A .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wgy8y2RPSvx23h2A .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wgy8y2RPSvx23h2A .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wgy8y2RPSvx23h2A .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wgy8y2RPSvx23h2A .cluster text{fill:#333;}#mermaid-svg-wgy8y2RPSvx23h2A .cluster span{color:#333;}#mermaid-svg-wgy8y2RPSvx23h2A div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wgy8y2RPSvx23h2A .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wgy8y2RPSvx23h2A rect.text{fill:none;stroke-width:0;}#mermaid-svg-wgy8y2RPSvx23h2A .icon-shape,#mermaid-svg-wgy8y2RPSvx23h2A .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wgy8y2RPSvx23h2A .icon-shape p,#mermaid-svg-wgy8y2RPSvx23h2A .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wgy8y2RPSvx23h2A .icon-shape .label rect,#mermaid-svg-wgy8y2RPSvx23h2A .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wgy8y2RPSvx23h2A .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wgy8y2RPSvx23h2A .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wgy8y2RPSvx23h2A :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} < 20万 Token

(约500页)
> 20万 Token
结构化数据
半结构化文档
非结构化文档
精确匹配为主
语义匹配为主

不能
🤔 真的需要知识库吗?
知识库多大?
✅ 直接塞进 Prompt

  • Prompt 缓存
    数据类型?
    ✅ SQL / API 查询
    检索需求?
    能用关键词

满足吗?
✅ 全文搜索

(Elasticsearch / BM25)
🔍 需要 RAG

① 你的知识库有多大?

Anthropic 在 Contextual Retrieval 文章中给出了一个实用的基准\^2

如果你的知识库小于 200,000 Token(约 500 页材料),你可以直接把整个知识库放进 Prompt,不需要 RAG。

随着上下文窗口的增大(当前模型已支持 100 万+ Token)和 Prompt 缓存技术(可降低 90% 成本、2 倍以上延迟改善),"直接塞进 Prompt"在很多场景下是更简单、更可靠的选择。

② 你的数据是结构化的还是非结构化的?

  • 如果是结构化数据(如产品目录、用户信息),用 SQL 或 API 查询比向量检索更准确。
  • 如果是半结构化文档,先考虑全文搜索(如 Elasticsearch、BM25),它对精确匹配更可靠。

③ 你的检索需求能被关键词满足吗?

回到第三章的决策树。如果大部分需求是精确匹配,你不需要向量库。

原则:用最简单的方案解决问题。Anthropic 反复强调\^3:"先找到最简单的解决方案,只在需要时才增加复杂度。"

5.2 第二步:如果确实需要知识库,怎么建?

当你确认需要语义检索能力时,以下是经过验证的实践要点。

要点一:Chunk 切分是成败关键

传统 RAG 把文档切成小块(通常几百 Token),然后分别 Embedding。问题在于:切分后的小块往往丢失了上下文

Anthropic 给了一个经典例子\^2

一个 Chunk 内容是"The company's revenue grew by 3% over the previous quarter."

但这个 Chunk 没有说明是哪家公司、哪个季度。检索时无法正确匹配。

Anthropic 的解法------Contextual Retrieval:在 Embedding 之前,先用 LLM 为每个 Chunk 生成一段简短的上下文说明(50-100 Token),前置到 Chunk 中。
#mermaid-svg-tj4hKskvwaFZSSW0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-tj4hKskvwaFZSSW0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-tj4hKskvwaFZSSW0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-tj4hKskvwaFZSSW0 .error-icon{fill:#552222;}#mermaid-svg-tj4hKskvwaFZSSW0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tj4hKskvwaFZSSW0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-tj4hKskvwaFZSSW0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tj4hKskvwaFZSSW0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tj4hKskvwaFZSSW0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-tj4hKskvwaFZSSW0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tj4hKskvwaFZSSW0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tj4hKskvwaFZSSW0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tj4hKskvwaFZSSW0 .marker.cross{stroke:#333333;}#mermaid-svg-tj4hKskvwaFZSSW0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tj4hKskvwaFZSSW0 p{margin:0;}#mermaid-svg-tj4hKskvwaFZSSW0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tj4hKskvwaFZSSW0 .cluster-label text{fill:#333;}#mermaid-svg-tj4hKskvwaFZSSW0 .cluster-label span{color:#333;}#mermaid-svg-tj4hKskvwaFZSSW0 .cluster-label span p{background-color:transparent;}#mermaid-svg-tj4hKskvwaFZSSW0 .label text,#mermaid-svg-tj4hKskvwaFZSSW0 span{fill:#333;color:#333;}#mermaid-svg-tj4hKskvwaFZSSW0 .node rect,#mermaid-svg-tj4hKskvwaFZSSW0 .node circle,#mermaid-svg-tj4hKskvwaFZSSW0 .node ellipse,#mermaid-svg-tj4hKskvwaFZSSW0 .node polygon,#mermaid-svg-tj4hKskvwaFZSSW0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tj4hKskvwaFZSSW0 .rough-node .label text,#mermaid-svg-tj4hKskvwaFZSSW0 .node .label text,#mermaid-svg-tj4hKskvwaFZSSW0 .image-shape .label,#mermaid-svg-tj4hKskvwaFZSSW0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-tj4hKskvwaFZSSW0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-tj4hKskvwaFZSSW0 .rough-node .label,#mermaid-svg-tj4hKskvwaFZSSW0 .node .label,#mermaid-svg-tj4hKskvwaFZSSW0 .image-shape .label,#mermaid-svg-tj4hKskvwaFZSSW0 .icon-shape .label{text-align:center;}#mermaid-svg-tj4hKskvwaFZSSW0 .node.clickable{cursor:pointer;}#mermaid-svg-tj4hKskvwaFZSSW0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-tj4hKskvwaFZSSW0 .arrowheadPath{fill:#333333;}#mermaid-svg-tj4hKskvwaFZSSW0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tj4hKskvwaFZSSW0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tj4hKskvwaFZSSW0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tj4hKskvwaFZSSW0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-tj4hKskvwaFZSSW0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tj4hKskvwaFZSSW0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-tj4hKskvwaFZSSW0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tj4hKskvwaFZSSW0 .cluster text{fill:#333;}#mermaid-svg-tj4hKskvwaFZSSW0 .cluster span{color:#333;}#mermaid-svg-tj4hKskvwaFZSSW0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tj4hKskvwaFZSSW0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-tj4hKskvwaFZSSW0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-tj4hKskvwaFZSSW0 .icon-shape,#mermaid-svg-tj4hKskvwaFZSSW0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tj4hKskvwaFZSSW0 .icon-shape p,#mermaid-svg-tj4hKskvwaFZSSW0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-tj4hKskvwaFZSSW0 .icon-shape .label rect,#mermaid-svg-tj4hKskvwaFZSSW0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tj4hKskvwaFZSSW0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-tj4hKskvwaFZSSW0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-tj4hKskvwaFZSSW0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 📄 原始文档
✂️ 切分为 Chunks
Chunk: revenue grew by 3%
🤖 LLM 生成上下文
增强 Chunk:

来自 ACME 公司 2023 Q2 SEC 文件

  • revenue grew by 3%
    🔢 Embedding
    📚 向量索引

    原始 Chunk: "The company's revenue grew by 3% over the previous quarter."

    增强后 Chunk: "本片段来自 ACME 公司 2023 年 Q2 的 SEC 文件;上一季度营收为 3.14 亿美元。
    The company's revenue grew by 3% over the previous quarter."

这个方法将检索失败率降低了 35%\^2

启发:切分不是简单的"按字数截断"。要考虑语义边界(段落、章节),并为每个 Chunk 保留足够的上下文信息。

要点二:Embedding + BM25 混合检索

纯向量检索会漏掉精确匹配。Anthropic 的实验表明\^2
Embedding 擅长语义匹配,但会漏掉精确的关键词匹配。BM25(一种基于词频的全文检索算法)恰好互补。
#mermaid-svg-UWEghyD0VJ6gNVHd{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UWEghyD0VJ6gNVHd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UWEghyD0VJ6gNVHd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UWEghyD0VJ6gNVHd .error-icon{fill:#552222;}#mermaid-svg-UWEghyD0VJ6gNVHd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UWEghyD0VJ6gNVHd .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UWEghyD0VJ6gNVHd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UWEghyD0VJ6gNVHd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UWEghyD0VJ6gNVHd .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UWEghyD0VJ6gNVHd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UWEghyD0VJ6gNVHd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UWEghyD0VJ6gNVHd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UWEghyD0VJ6gNVHd .marker.cross{stroke:#333333;}#mermaid-svg-UWEghyD0VJ6gNVHd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UWEghyD0VJ6gNVHd p{margin:0;}#mermaid-svg-UWEghyD0VJ6gNVHd .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UWEghyD0VJ6gNVHd .cluster-label text{fill:#333;}#mermaid-svg-UWEghyD0VJ6gNVHd .cluster-label span{color:#333;}#mermaid-svg-UWEghyD0VJ6gNVHd .cluster-label span p{background-color:transparent;}#mermaid-svg-UWEghyD0VJ6gNVHd .label text,#mermaid-svg-UWEghyD0VJ6gNVHd span{fill:#333;color:#333;}#mermaid-svg-UWEghyD0VJ6gNVHd .node rect,#mermaid-svg-UWEghyD0VJ6gNVHd .node circle,#mermaid-svg-UWEghyD0VJ6gNVHd .node ellipse,#mermaid-svg-UWEghyD0VJ6gNVHd .node polygon,#mermaid-svg-UWEghyD0VJ6gNVHd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UWEghyD0VJ6gNVHd .rough-node .label text,#mermaid-svg-UWEghyD0VJ6gNVHd .node .label text,#mermaid-svg-UWEghyD0VJ6gNVHd .image-shape .label,#mermaid-svg-UWEghyD0VJ6gNVHd .icon-shape .label{text-anchor:middle;}#mermaid-svg-UWEghyD0VJ6gNVHd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UWEghyD0VJ6gNVHd .rough-node .label,#mermaid-svg-UWEghyD0VJ6gNVHd .node .label,#mermaid-svg-UWEghyD0VJ6gNVHd .image-shape .label,#mermaid-svg-UWEghyD0VJ6gNVHd .icon-shape .label{text-align:center;}#mermaid-svg-UWEghyD0VJ6gNVHd .node.clickable{cursor:pointer;}#mermaid-svg-UWEghyD0VJ6gNVHd .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UWEghyD0VJ6gNVHd .arrowheadPath{fill:#333333;}#mermaid-svg-UWEghyD0VJ6gNVHd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UWEghyD0VJ6gNVHd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UWEghyD0VJ6gNVHd .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UWEghyD0VJ6gNVHd .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UWEghyD0VJ6gNVHd .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UWEghyD0VJ6gNVHd .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UWEghyD0VJ6gNVHd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UWEghyD0VJ6gNVHd .cluster text{fill:#333;}#mermaid-svg-UWEghyD0VJ6gNVHd .cluster span{color:#333;}#mermaid-svg-UWEghyD0VJ6gNVHd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UWEghyD0VJ6gNVHd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UWEghyD0VJ6gNVHd rect.text{fill:none;stroke-width:0;}#mermaid-svg-UWEghyD0VJ6gNVHd .icon-shape,#mermaid-svg-UWEghyD0VJ6gNVHd .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UWEghyD0VJ6gNVHd .icon-shape p,#mermaid-svg-UWEghyD0VJ6gNVHd .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UWEghyD0VJ6gNVHd .icon-shape .label rect,#mermaid-svg-UWEghyD0VJ6gNVHd .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UWEghyD0VJ6gNVHd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UWEghyD0VJ6gNVHd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UWEghyD0VJ6gNVHd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 🔍 用户查询
向量检索

(语义匹配)
BM25 检索

(精确匹配)
🔀 合并去重

(Rank Fusion)
📋 Top-K 候选片段

推荐做法 :同时使用 Embedding 和 BM25 检索,然后合并去重结果。这在 Anthropic 的测试中将检索失败率降低了 49%\^2

启发:不要只依赖向量检索。混合检索(向量 + 关键词)是当前最佳实践。

要点三:重排序(Reranking)值得加

初始检索会返回大量候选片段(可能上百个),但质量参差不齐。重排序模型可以对候选片段按相关性重新打分,只保留最相关的 Top-K。
#mermaid-svg-NgZFvjcudopG1VCu{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NgZFvjcudopG1VCu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NgZFvjcudopG1VCu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NgZFvjcudopG1VCu .error-icon{fill:#552222;}#mermaid-svg-NgZFvjcudopG1VCu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NgZFvjcudopG1VCu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NgZFvjcudopG1VCu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NgZFvjcudopG1VCu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NgZFvjcudopG1VCu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NgZFvjcudopG1VCu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NgZFvjcudopG1VCu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NgZFvjcudopG1VCu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NgZFvjcudopG1VCu .marker.cross{stroke:#333333;}#mermaid-svg-NgZFvjcudopG1VCu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NgZFvjcudopG1VCu p{margin:0;}#mermaid-svg-NgZFvjcudopG1VCu .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NgZFvjcudopG1VCu .cluster-label text{fill:#333;}#mermaid-svg-NgZFvjcudopG1VCu .cluster-label span{color:#333;}#mermaid-svg-NgZFvjcudopG1VCu .cluster-label span p{background-color:transparent;}#mermaid-svg-NgZFvjcudopG1VCu .label text,#mermaid-svg-NgZFvjcudopG1VCu span{fill:#333;color:#333;}#mermaid-svg-NgZFvjcudopG1VCu .node rect,#mermaid-svg-NgZFvjcudopG1VCu .node circle,#mermaid-svg-NgZFvjcudopG1VCu .node ellipse,#mermaid-svg-NgZFvjcudopG1VCu .node polygon,#mermaid-svg-NgZFvjcudopG1VCu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NgZFvjcudopG1VCu .rough-node .label text,#mermaid-svg-NgZFvjcudopG1VCu .node .label text,#mermaid-svg-NgZFvjcudopG1VCu .image-shape .label,#mermaid-svg-NgZFvjcudopG1VCu .icon-shape .label{text-anchor:middle;}#mermaid-svg-NgZFvjcudopG1VCu .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-NgZFvjcudopG1VCu .rough-node .label,#mermaid-svg-NgZFvjcudopG1VCu .node .label,#mermaid-svg-NgZFvjcudopG1VCu .image-shape .label,#mermaid-svg-NgZFvjcudopG1VCu .icon-shape .label{text-align:center;}#mermaid-svg-NgZFvjcudopG1VCu .node.clickable{cursor:pointer;}#mermaid-svg-NgZFvjcudopG1VCu .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-NgZFvjcudopG1VCu .arrowheadPath{fill:#333333;}#mermaid-svg-NgZFvjcudopG1VCu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NgZFvjcudopG1VCu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NgZFvjcudopG1VCu .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NgZFvjcudopG1VCu .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-NgZFvjcudopG1VCu .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NgZFvjcudopG1VCu .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-NgZFvjcudopG1VCu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NgZFvjcudopG1VCu .cluster text{fill:#333;}#mermaid-svg-NgZFvjcudopG1VCu .cluster span{color:#333;}#mermaid-svg-NgZFvjcudopG1VCu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NgZFvjcudopG1VCu .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-NgZFvjcudopG1VCu rect.text{fill:none;stroke-width:0;}#mermaid-svg-NgZFvjcudopG1VCu .icon-shape,#mermaid-svg-NgZFvjcudopG1VCu .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NgZFvjcudopG1VCu .icon-shape p,#mermaid-svg-NgZFvjcudopG1VCu .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-NgZFvjcudopG1VCu .icon-shape .label rect,#mermaid-svg-NgZFvjcudopG1VCu .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NgZFvjcudopG1VCu .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-NgZFvjcudopG1VCu .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-NgZFvjcudopG1VCu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 🔍 初始检索

Top-150 候选
📊 重排序模型

按相关性打分
📋 Top-20

最相关片段
🤖 送入模型生成

Anthropic 的数据显示\^2:Contextual Embedding + Contextual BM25 + Reranking,将检索失败率降低了 67%(从 5.7% 降到 1.9%)。

各技术组合的检索失败率改善效果(Anthropic 官方数据\^2):
#mermaid-svg-FiG5s3WpvUfDxO89{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-FiG5s3WpvUfDxO89 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-FiG5s3WpvUfDxO89 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-FiG5s3WpvUfDxO89 .error-icon{fill:#552222;}#mermaid-svg-FiG5s3WpvUfDxO89 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-FiG5s3WpvUfDxO89 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-FiG5s3WpvUfDxO89 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-FiG5s3WpvUfDxO89 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-FiG5s3WpvUfDxO89 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-FiG5s3WpvUfDxO89 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-FiG5s3WpvUfDxO89 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-FiG5s3WpvUfDxO89 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-FiG5s3WpvUfDxO89 .marker.cross{stroke:#333333;}#mermaid-svg-FiG5s3WpvUfDxO89 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-FiG5s3WpvUfDxO89 p{margin:0;}#mermaid-svg-FiG5s3WpvUfDxO89 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 检索失败率逐步降低(越低越好) 基线 +Embedding +BM25 +Reranking 7 6.5 6 5.5 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 检索失败率 (%)

启发:重排序是"花小钱办大事"的环节。它增加了一点延迟,但显著提升了送入模型的内容质量。

要点四:让模型决定何时查、查什么

这是最核心的理念转变。不要把知识库检索写死成一条固定管线,而是把知识库暴露为模型可以调用的工具

具体做法:

  • 将知识库检索封装为一个 Tool(函数),模型可以按需调用;
  • 在系统提示中告诉模型:"你可以使用知识库搜索工具来查找相关信息";
  • 让模型自己判断:这个问题需要查知识库吗?用什么关键词查?查到的结果够不够?要不要换个角度再查?

这比"每次提问都先检索 Top-K 片段塞进 Prompt"灵活得多,也更符合 Agentic Search 的理念。

要点五:保持索引与数据同步

如果你的知识库会更新(比如内部文档会修订),需要建立同步机制:

  • 增量更新:只对变更的文档重新生成 Embedding,而不是全量重建;
  • 版本管理:记录每个 Chunk 的来源文档版本,便于追溯;
  • 定期评估:用一组标准测试问题定期检查检索质量,发现退化及时处理。

5.3 第三步:评估你的知识库效果

建好知识库不等于万事大吉。你需要持续评估它的效果。

Anthropic 的建议\^4

  • 从小规模开始:20 个有代表性的测试问题就能发现大部分问题。早期改动效果显著(比如从 30% 提升到 80%),不需要几百个测试用例。
  • 用 LLM 做评审:让一个 LLM 按照评分标准(事实准确性、引用准确性、完整性、来源质量、工具效率)给检索结果打分。
  • 人工测试不可少:自动化评估会漏掉边缘情况,比如模型倾向于选择 SEO 优化的内容农场而非权威来源\^4

启发:评估不是一次性工作,而是持续迭代的闭环。先跑起来,再优化。

5.4 一张总结表:知识库建设检查清单

阶段 关键问题 推荐做法 复杂度
决策 真的需要知识库吗? 小于 20 万 Token 直接塞 Prompt;精确匹配用全文搜索 🟢 低
切分 Chunk 丢失上下文怎么办? 用 LLM 为每个 Chunk 生成上下文说明(Contextual Retrieval) 🟡 中
检索 纯向量检索漏精确匹配? Embedding + BM25 混合检索 🟡 中
排序 候选片段太多质量参差? 加 Reranking 步骤,只保留 Top-K 🟡 中
调用 检索写死还是模型驱动? 封装为 Tool,让模型按需调用 🔴 高
同步 数据更新了怎么办? 增量更新 + 版本管理 + 定期评估 🟡 中
评估 怎么知道效果好不好? 20 个测试问题起步 + LLM 评审 + 人工抽查 🟢 低

实施建议:从左到右逐步推进,每完成一个阶段都做一次效果验证。不要试图一步到位------先跑起来,再迭代优化。


第六章 架构哲学:把复杂性交给模型,而非管线

6.1 "Everything is the Model"

Anthropic 内部有一个工程原则:尽量让模型本身驱动决策,而不是在模型外面搭一套复杂的工程管线。

这不是教条,而是一个成本权衡
#mermaid-svg-WmwwzNvB65q0kZjc{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-WmwwzNvB65q0kZjc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-WmwwzNvB65q0kZjc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-WmwwzNvB65q0kZjc .error-icon{fill:#552222;}#mermaid-svg-WmwwzNvB65q0kZjc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WmwwzNvB65q0kZjc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-WmwwzNvB65q0kZjc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WmwwzNvB65q0kZjc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WmwwzNvB65q0kZjc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-WmwwzNvB65q0kZjc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WmwwzNvB65q0kZjc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WmwwzNvB65q0kZjc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WmwwzNvB65q0kZjc .marker.cross{stroke:#333333;}#mermaid-svg-WmwwzNvB65q0kZjc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WmwwzNvB65q0kZjc p{margin:0;}#mermaid-svg-WmwwzNvB65q0kZjc .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-WmwwzNvB65q0kZjc .cluster-label text{fill:#333;}#mermaid-svg-WmwwzNvB65q0kZjc .cluster-label span{color:#333;}#mermaid-svg-WmwwzNvB65q0kZjc .cluster-label span p{background-color:transparent;}#mermaid-svg-WmwwzNvB65q0kZjc .label text,#mermaid-svg-WmwwzNvB65q0kZjc span{fill:#333;color:#333;}#mermaid-svg-WmwwzNvB65q0kZjc .node rect,#mermaid-svg-WmwwzNvB65q0kZjc .node circle,#mermaid-svg-WmwwzNvB65q0kZjc .node ellipse,#mermaid-svg-WmwwzNvB65q0kZjc .node polygon,#mermaid-svg-WmwwzNvB65q0kZjc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WmwwzNvB65q0kZjc .rough-node .label text,#mermaid-svg-WmwwzNvB65q0kZjc .node .label text,#mermaid-svg-WmwwzNvB65q0kZjc .image-shape .label,#mermaid-svg-WmwwzNvB65q0kZjc .icon-shape .label{text-anchor:middle;}#mermaid-svg-WmwwzNvB65q0kZjc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-WmwwzNvB65q0kZjc .rough-node .label,#mermaid-svg-WmwwzNvB65q0kZjc .node .label,#mermaid-svg-WmwwzNvB65q0kZjc .image-shape .label,#mermaid-svg-WmwwzNvB65q0kZjc .icon-shape .label{text-align:center;}#mermaid-svg-WmwwzNvB65q0kZjc .node.clickable{cursor:pointer;}#mermaid-svg-WmwwzNvB65q0kZjc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-WmwwzNvB65q0kZjc .arrowheadPath{fill:#333333;}#mermaid-svg-WmwwzNvB65q0kZjc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-WmwwzNvB65q0kZjc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-WmwwzNvB65q0kZjc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WmwwzNvB65q0kZjc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-WmwwzNvB65q0kZjc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WmwwzNvB65q0kZjc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-WmwwzNvB65q0kZjc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WmwwzNvB65q0kZjc .cluster text{fill:#333;}#mermaid-svg-WmwwzNvB65q0kZjc .cluster span{color:#333;}#mermaid-svg-WmwwzNvB65q0kZjc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-WmwwzNvB65q0kZjc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-WmwwzNvB65q0kZjc rect.text{fill:none;stroke-width:0;}#mermaid-svg-WmwwzNvB65q0kZjc .icon-shape,#mermaid-svg-WmwwzNvB65q0kZjc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WmwwzNvB65q0kZjc .icon-shape p,#mermaid-svg-WmwwzNvB65q0kZjc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-WmwwzNvB65q0kZjc .icon-shape .label rect,#mermaid-svg-WmwwzNvB65q0kZjc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WmwwzNvB65q0kZjc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-WmwwzNvB65q0kZjc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-WmwwzNvB65q0kZjc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 🤖 模型驱动路线
模型 + 工具
模型自主决策
按需调用工具
🏗️ 管线复杂度路线
文档切分
Embedding 服务
向量数据库
重排序服务
缓存管理
索引同步
监控告警
...更多运维

  • 管线复杂度:每多一个环节,就多一个可能的故障点、多一份运维负担。索引卡住、缓存损坏、数据过时------这些问题全部落在工程团队身上。
  • 模型能力:随着模型变强,很多原来需要工程管线做的事(比如判断该检索什么),模型自己就能做好。

把复杂性从管线转移到模型,本质上是用模型的智能换工程的简单性

6.2 无状态设计的价值

Grep 之所以在代码场景中胜出,一个被低估的优势是无状态

维度 传统 RAG Grep / Agentic Search
配置 需要部署索引服务 零配置,Clone 即用
运维 需监控、重启、扩容 零运维
数据安全 代码需发送到 Embedding 服务 本地执行,零泄露风险
状态依赖 索引状态需与数据同步 无状态,实时读取

对于知识库场景,虽然无法完全无状态(需要维护索引),但可以尽量减少状态依赖:用模型驱动检索而非固定管线,就是一种减少状态复杂度的方式。

6.3 代价是真实的

需要诚实地说明 Agentic Search 的代价:

Token 消耗对比(Anthropic 官方数据\^4):
#mermaid-svg-E5tQJvE0j2Y7LTCa{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-E5tQJvE0j2Y7LTCa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E5tQJvE0j2Y7LTCa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E5tQJvE0j2Y7LTCa .error-icon{fill:#552222;}#mermaid-svg-E5tQJvE0j2Y7LTCa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E5tQJvE0j2Y7LTCa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E5tQJvE0j2Y7LTCa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E5tQJvE0j2Y7LTCa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E5tQJvE0j2Y7LTCa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E5tQJvE0j2Y7LTCa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E5tQJvE0j2Y7LTCa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E5tQJvE0j2Y7LTCa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E5tQJvE0j2Y7LTCa .marker.cross{stroke:#333333;}#mermaid-svg-E5tQJvE0j2Y7LTCa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E5tQJvE0j2Y7LTCa p{margin:0;}#mermaid-svg-E5tQJvE0j2Y7LTCa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 不同模式的 Token 消耗倍数(相对 Chat 模式) Chat Agent Multi-Agent 16 14 12 10 8 6 4 2 0 Token 消耗倍数

  • Token 消耗大:模型自己探索需要多轮工具调用,Token 用量远高于一次向量检索。Anthropic 的数据显示,Agent 模式比 Chat 模式消耗约 4 倍 Token,多 Agent 系统约 15 倍\^4
  • 延迟更高:多轮探索意味着更长的等待时间。
  • 概念覆盖短板:对于超大型代码库的概念级搜索(比如"找出所有权限校验的变体写法"),Grep 存在盲区------这也是为什么知识库在概念探索场景中仍有价值。

两种方案的权衡对比:
#mermaid-svg-DIeLSnDnX354SASO{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DIeLSnDnX354SASO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DIeLSnDnX354SASO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DIeLSnDnX354SASO .error-icon{fill:#552222;}#mermaid-svg-DIeLSnDnX354SASO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DIeLSnDnX354SASO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DIeLSnDnX354SASO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DIeLSnDnX354SASO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DIeLSnDnX354SASO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DIeLSnDnX354SASO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DIeLSnDnX354SASO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DIeLSnDnX354SASO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DIeLSnDnX354SASO .marker.cross{stroke:#333333;}#mermaid-svg-DIeLSnDnX354SASO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DIeLSnDnX354SASO p{margin:0;}#mermaid-svg-DIeLSnDnX354SASO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 高灵活性 + 高成本 高灵活性 + 低成本 低灵活性 + 低成本 低灵活性 + 高成本 直接塞 Prompt 纯 Grep 传统 RAG Agentic Search 低成本 高成本 低灵活性 高灵活性 检索方案权衡象限图

结论:没有银弹。Agentic Search 用 Token 换灵活性和可诊断性,RAG 用工程复杂度换成本效率。选择取决于你的场景约束。


第七章 总结与行动建议

7.1 三个层次的认知

#mermaid-svg-A61EYLniq9xSfh5m{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-A61EYLniq9xSfh5m .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-A61EYLniq9xSfh5m .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-A61EYLniq9xSfh5m .error-icon{fill:#552222;}#mermaid-svg-A61EYLniq9xSfh5m .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-A61EYLniq9xSfh5m .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-A61EYLniq9xSfh5m .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-A61EYLniq9xSfh5m .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-A61EYLniq9xSfh5m .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-A61EYLniq9xSfh5m .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-A61EYLniq9xSfh5m .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-A61EYLniq9xSfh5m .marker{fill:#333333;stroke:#333333;}#mermaid-svg-A61EYLniq9xSfh5m .marker.cross{stroke:#333333;}#mermaid-svg-A61EYLniq9xSfh5m svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-A61EYLniq9xSfh5m p{margin:0;}#mermaid-svg-A61EYLniq9xSfh5m .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-A61EYLniq9xSfh5m .cluster-label text{fill:#333;}#mermaid-svg-A61EYLniq9xSfh5m .cluster-label span{color:#333;}#mermaid-svg-A61EYLniq9xSfh5m .cluster-label span p{background-color:transparent;}#mermaid-svg-A61EYLniq9xSfh5m .label text,#mermaid-svg-A61EYLniq9xSfh5m span{fill:#333;color:#333;}#mermaid-svg-A61EYLniq9xSfh5m .node rect,#mermaid-svg-A61EYLniq9xSfh5m .node circle,#mermaid-svg-A61EYLniq9xSfh5m .node ellipse,#mermaid-svg-A61EYLniq9xSfh5m .node polygon,#mermaid-svg-A61EYLniq9xSfh5m .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-A61EYLniq9xSfh5m .rough-node .label text,#mermaid-svg-A61EYLniq9xSfh5m .node .label text,#mermaid-svg-A61EYLniq9xSfh5m .image-shape .label,#mermaid-svg-A61EYLniq9xSfh5m .icon-shape .label{text-anchor:middle;}#mermaid-svg-A61EYLniq9xSfh5m .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-A61EYLniq9xSfh5m .rough-node .label,#mermaid-svg-A61EYLniq9xSfh5m .node .label,#mermaid-svg-A61EYLniq9xSfh5m .image-shape .label,#mermaid-svg-A61EYLniq9xSfh5m .icon-shape .label{text-align:center;}#mermaid-svg-A61EYLniq9xSfh5m .node.clickable{cursor:pointer;}#mermaid-svg-A61EYLniq9xSfh5m .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-A61EYLniq9xSfh5m .arrowheadPath{fill:#333333;}#mermaid-svg-A61EYLniq9xSfh5m .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-A61EYLniq9xSfh5m .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-A61EYLniq9xSfh5m .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-A61EYLniq9xSfh5m .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-A61EYLniq9xSfh5m .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-A61EYLniq9xSfh5m .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-A61EYLniq9xSfh5m .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-A61EYLniq9xSfh5m .cluster text{fill:#333;}#mermaid-svg-A61EYLniq9xSfh5m .cluster span{color:#333;}#mermaid-svg-A61EYLniq9xSfh5m div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-A61EYLniq9xSfh5m .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-A61EYLniq9xSfh5m rect.text{fill:none;stroke-width:0;}#mermaid-svg-A61EYLniq9xSfh5m .icon-shape,#mermaid-svg-A61EYLniq9xSfh5m .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-A61EYLniq9xSfh5m .icon-shape p,#mermaid-svg-A61EYLniq9xSfh5m .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-A61EYLniq9xSfh5m .icon-shape .label rect,#mermaid-svg-A61EYLniq9xSfh5m .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-A61EYLniq9xSfh5m .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-A61EYLniq9xSfh5m .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-A61EYLniq9xSfh5m :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 🏛️ 架构层
让模型驱动检索

(Agentic Search)
而非让检索管线驱动模型
⚖️ 场景层
精确匹配 → Grep / 全文搜索
概念探索 → 向量检索
两者不是对立,而是互补
🔧 技术层
RAG 在代码场景的问题

不是 Embedding 失效
而是:不可诊断性 +

环节乘法效应 + 索引时效性

层次 核心观点
技术层 RAG 在代码场景的问题不是 Embedding 失效,而是不可诊断性、环节乘法效应和索引时效性
场景层 精确匹配走 Grep / 全文搜索,概念探索走向量检索,两者不是对立而是互补
架构层 让模型驱动检索(Agentic Search),而非让检索管线驱动模型

7.2 给你的行动建议

#mermaid-svg-z740MJQ18t7oCKB6{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-z740MJQ18t7oCKB6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-z740MJQ18t7oCKB6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-z740MJQ18t7oCKB6 .error-icon{fill:#552222;}#mermaid-svg-z740MJQ18t7oCKB6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-z740MJQ18t7oCKB6 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-z740MJQ18t7oCKB6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-z740MJQ18t7oCKB6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-z740MJQ18t7oCKB6 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-z740MJQ18t7oCKB6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-z740MJQ18t7oCKB6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-z740MJQ18t7oCKB6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-z740MJQ18t7oCKB6 .marker.cross{stroke:#333333;}#mermaid-svg-z740MJQ18t7oCKB6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-z740MJQ18t7oCKB6 p{margin:0;}#mermaid-svg-z740MJQ18t7oCKB6 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-z740MJQ18t7oCKB6 .cluster-label text{fill:#333;}#mermaid-svg-z740MJQ18t7oCKB6 .cluster-label span{color:#333;}#mermaid-svg-z740MJQ18t7oCKB6 .cluster-label span p{background-color:transparent;}#mermaid-svg-z740MJQ18t7oCKB6 .label text,#mermaid-svg-z740MJQ18t7oCKB6 span{fill:#333;color:#333;}#mermaid-svg-z740MJQ18t7oCKB6 .node rect,#mermaid-svg-z740MJQ18t7oCKB6 .node circle,#mermaid-svg-z740MJQ18t7oCKB6 .node ellipse,#mermaid-svg-z740MJQ18t7oCKB6 .node polygon,#mermaid-svg-z740MJQ18t7oCKB6 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-z740MJQ18t7oCKB6 .rough-node .label text,#mermaid-svg-z740MJQ18t7oCKB6 .node .label text,#mermaid-svg-z740MJQ18t7oCKB6 .image-shape .label,#mermaid-svg-z740MJQ18t7oCKB6 .icon-shape .label{text-anchor:middle;}#mermaid-svg-z740MJQ18t7oCKB6 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-z740MJQ18t7oCKB6 .rough-node .label,#mermaid-svg-z740MJQ18t7oCKB6 .node .label,#mermaid-svg-z740MJQ18t7oCKB6 .image-shape .label,#mermaid-svg-z740MJQ18t7oCKB6 .icon-shape .label{text-align:center;}#mermaid-svg-z740MJQ18t7oCKB6 .node.clickable{cursor:pointer;}#mermaid-svg-z740MJQ18t7oCKB6 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-z740MJQ18t7oCKB6 .arrowheadPath{fill:#333333;}#mermaid-svg-z740MJQ18t7oCKB6 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-z740MJQ18t7oCKB6 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-z740MJQ18t7oCKB6 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-z740MJQ18t7oCKB6 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-z740MJQ18t7oCKB6 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-z740MJQ18t7oCKB6 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-z740MJQ18t7oCKB6 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-z740MJQ18t7oCKB6 .cluster text{fill:#333;}#mermaid-svg-z740MJQ18t7oCKB6 .cluster span{color:#333;}#mermaid-svg-z740MJQ18t7oCKB6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-z740MJQ18t7oCKB6 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-z740MJQ18t7oCKB6 rect.text{fill:none;stroke-width:0;}#mermaid-svg-z740MJQ18t7oCKB6 .icon-shape,#mermaid-svg-z740MJQ18t7oCKB6 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-z740MJQ18t7oCKB6 .icon-shape p,#mermaid-svg-z740MJQ18t7oCKB6 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-z740MJQ18t7oCKB6 .icon-shape .label rect,#mermaid-svg-z740MJQ18t7oCKB6 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-z740MJQ18t7oCKB6 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-z740MJQ18t7oCKB6 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-z740MJQ18t7oCKB6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1️⃣ 审视需求

用检查清单走一遍
2️⃣ 小数据量

优先用 Prompt
3️⃣ 建知识库

用混合检索
4️⃣ 交给模型

封装为 Tool
5️⃣ 持续评估

20个问题起步

  1. 审视你当前的知识库需求:用第五章的检查清单走一遍,确认是否真的需要向量检索。
  2. 小数据量优先用 Prompt:如果你的知识库不到 20 万 Token,直接放进 Prompt + Prompt 缓存,比任何 RAG 方案都简单可靠。
  3. 如果建知识库,用混合检索:Embedding + BM25 + Reranking,这是当前经过验证的最佳组合。
  4. 把检索能力交给模型:不要写死检索管线,把知识库封装为模型可调用的工具。
  5. 从 20 个测试问题开始评估:先跑起来,再迭代优化。

7.3 一句话总结

不是 RAG 被淘汰了,而是场景分开了。知识库可以建,但怎么用------让模型自己决定。


思考题

💡 以下问题没有标准答案,目的是引导你将本文的理念与自己的项目结合。建议带着这些问题回到工作中实践。

1. 📊 场景盘点

你的项目中,有哪些数据适合精确检索,哪些适合语义检索?试着列一张表,看看比例如何。

数据类型 检索方式 理由
示例:代码仓库 Grep 高频变更,精确匹配为主
示例:技术规范文档 语义检索 概念性查询,数据稳定

2. 🛣️ 路由设计

如果你的业务既需要精确匹配又需要语义搜索,你会怎么设计检索路由?提示:考虑让模型自己选择工具,而不是用规则引擎做路由。

3. 📏 规模评估

你的知识库有多大?如果小于 20 万 Token,你是否真的需要 RAG?尝试直接放进 Prompt 对比效果。

4. ✂️ 切分审查

Contextual Retrieval 的思路------"为每个 Chunk 补充上下文说明"------能否应用到你的文档切分中?你的 Chunk 切分是否丢失了上下文?


参考资料

📚 以下资料均为 Anthropic 官方一手来源,本文中的数据引用均可追溯。

# 来源 时间 核心内容
\^1 Latent Space Podcast 2025.05 Claude Code 的检索策略,Agentic Search
\^2 Introducing Contextual Retrieval 2024.09 检索失败率降低 49%-67%,混合检索最佳实践
\^3 Building Effective Agents 2024.12 Workflow vs Agent 架构,"从最简单方案开始"
\^4 Multi-Agent Research System 2025.06 Token 消耗数据(4x/15x),评估方法论
\^5 Claude Code Best Practices 持续更新 CLAUDE.md、Skills、Subagents 上下文管理

📝 文档版本 :v2.0 | 最后更新 :2026年6月 | 字数:约 6000 字

本文档基于 Anthropic 官方工程博客和公开分享整理,所有数据引用均标注来源。如需深入某个主题,建议阅读对应的原始资料。

相关推荐
元岳数字人小元1 小时前
如何依托数字人源码做好私有化部署选型
人工智能·开源·人机交互·交互
Turbo正则1 小时前
群论在AI中的应用概述
人工智能·算法·抽象代数
Fibocom广和通1 小时前
让机器人动作更流畅!广和通实现VLA端侧推理2.6倍加速
大数据·人工智能·机器人
TanYYF2 小时前
spring ai入门教程二
java·人工智能·spring
动恰客流统计2 小时前
客流统计如何结合AI分析?从传统计数到智能决策的技术升级路径
数据库·人工智能·边缘计算
世界很奇妙塔2 小时前
基因编辑产业化:从科研探索到临床应用,重构生命健康产业底层逻辑
大数据·人工智能·机器学习
试剂界的爱马仕2 小时前
Anti-mouse PD-1 mAb (Clone RMP1-14) 与 Axitinib 小鼠实验使用方案整理汇总
大数据·人工智能·深度学习·学习
dreamread2 小时前
2026带详细解读的八字排盘App怎么选:看解释层级、AI边界和复盘价值
人工智能·软件工具·传统文化
每天三杯咖啡2 小时前
【无标题】
人工智能·技术选型·deepseek