阅读路线图:
#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 方案,而是让模型自己调用 grep、glob、find 等工具,实时搜索代码库。
这种做法被称为 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_id 和 delete_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
🤖 模型回答
(被动接收)
💬 最终回答
这条管线在模型回答之前就决定了模型能看到什么。模型没有选择权------它只能基于检索系统喂给它的片段来回答。如果检索结果不好,模型也无能为力。
这本质上是把大模型当成一个"只负责最后一步生成"的被动组件,没有利用模型自身的判断力。
4.2 更好的做法:Agentic Search
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个问题起步
- 审视你当前的知识库需求:用第五章的检查清单走一遍,确认是否真的需要向量检索。
- 小数据量优先用 Prompt:如果你的知识库不到 20 万 Token,直接放进 Prompt + Prompt 缓存,比任何 RAG 方案都简单可靠。
- 如果建知识库,用混合检索:Embedding + BM25 + Reranking,这是当前经过验证的最佳组合。
- 把检索能力交给模型:不要写死检索管线,把知识库封装为模型可调用的工具。
- 从 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 官方工程博客和公开分享整理,所有数据引用均标注来源。如需深入某个主题,建议阅读对应的原始资料。