[{"data":1,"prerenderedAt":631},["ShallowReactive",2],{"note:\u002Frag\u002F01_rag基础_核心概念":3},{"id":4,"title":5,"body":6,"date":611,"description":612,"draft":613,"extension":614,"featured":613,"kind":615,"lastmod":611,"meta":616,"navigation":155,"path":620,"planned":621,"section":622,"seo":623,"source":624,"stem":625,"tags":626,"toc":155,"weight":629,"__hash__":630},"notes\u002Frag\u002F01_RAG基础_核心概念.md","RAG 核心概念",{"type":7,"value":8,"toc":606},"minimark",[9,14,22,28,35,38,50,56,67,70,75,98,102,105,232,241,246,322,329,334,360,365,397,402,406,409,414,417,425,428,433,444,504,509,512,580,583,594,599,602],[10,11,13],"h2",{"id":12},"_1-什么是-rag检索增强生成","1. 什么是 RAG（检索增强生成）",[15,16,17,21],"p",{},[18,19,20],"strong",{},"RAG = Retrieval-Augmented Generation","，即“检索增强生成”。",[15,23,24,27],{},[18,25,26],{},"核心思想","：",[29,30,31],"ul",{},[32,33,34],"li",{},"在让大模型回答问题之前，先让它去一个外部知识库里“查资料”，然后把查到的资料和问题一起交给模型，让它基于这些资料来生成答案。",[15,36,37],{},"在没有 RAG 之前，大语言模型（LLM）存在几个核心问题：",[39,40,41,44,47],"ol",{},[32,42,43],{},"知识截止日期：模型训练完成后，无法获取训练数据之后的新信息。例如早期 GPT-4 的知识截止到 2023 年某月，之后发生的事情它不知道。不同模型、不同版本的截止时间并不相同。",[32,45,46],{},"幻觉问题：当模型不确定某个答案时，它可能会\"编造\"一个看起来很合理但实际上是错误的内容。这在企业场景中是不可接受的。",[32,48,49],{},"私有知识无法覆盖：企业内部的制度、流程、业务文档是私有数据，从未进入过公开训练集，模型自然无法回答。",[15,51,52,55],{},[18,53,54],{},"RAG 的解决思路","非常简单：",[57,58,64],"pre",{"className":59,"code":61,"language":62,"meta":63},[60],"language-text","用户提问 → 先从知识库中检索相关文档 → 把检索到的文档和问题一起发给 LLM → LLM 基于文档生成答案\n","text","",[65,66,61],"code",{"__ignoreMap":63},[15,68,69],{},"可以把 RAG 理解成\"开卷考试\"：LLM 不再只靠记忆回答，而是可以查阅我们提供的资料后再作答。",[15,71,72,27],{},[18,73,74],{},"RAG 的核心价值",[29,76,77,84,91],{},[32,78,79,80,83],{},"答案是",[18,81,82],{},"可溯源","的（每个回答都能追溯到具体的文档片段）",[32,85,86,87,90],{},"知识可以",[18,88,89],{},"实时更新","（更新知识库不需要重新训练模型）",[32,92,93,94,97],{},"幻觉大幅",[18,95,96],{},"减少","（模型被约束在提供的文档范围内回答）",[10,99,101],{"id":100},"_2-rag-系统的基本组成","2. RAG 系统的基本组成",[15,103,104],{},"一个完整的 RAG 系统包含两条核心链路：",[57,106,110],{"className":107,"code":108,"language":109,"meta":63,"style":63},"language-mermaid shiki shiki-themes github-light github-dark","flowchart LR\n    subgraph Offline[\"离线链路（入库）\"]\n        A1[\"📄 文档加载\u003Cbr\u002F>PDF\u002FMD\u002FWord\u002FExcel\"] --> A2[\"✂️ 文档切分\u003Cbr\u002F>父子块策略\"]\n        A2 --> A3[\"🧮 向量化\u003Cbr\u002F>BGE-M3 Embedding\"]\n        A3 --> A4[\"💾 向量存储\u003Cbr\u002F>Milvus Collection\"]\n    end\n\n    subgraph Online[\"在线链路（问答）\"]\n        B1[\"❓ 用户提问\"] --> B2[\"🎯 意图识别\"]\n        B2 --> B3[\"🔍 语义检索\u003Cbr\u002F>Dense + Sparse Hybrid\"]\n        B3 --> B4[\"📊 重排序\u003Cbr\u002F>BGE Reranker\"]\n        B4 --> B5[\"📝 上下文构建\"]\n        B5 --> B6[\"🤖 LLM 生成\u003Cbr\u002F>DashScope 流式输出\"]\n    end\n\n    A4 -.->|\"检索\"| B3\n    B6 --> C[\"✅ 可溯源答案\"]\n\n    style Offline fill:#EFF6FF,stroke:#3B82F6,stroke-width:2px\n    style Online fill:#ECFDF5,stroke:#059669,stroke-width:2px\n","mermaid",[65,111,112,120,126,132,138,144,150,157,163,169,175,181,187,193,198,203,209,215,220,226],{"__ignoreMap":63},[113,114,117],"span",{"class":115,"line":116},"line",1,[113,118,119],{},"flowchart LR\n",[113,121,123],{"class":115,"line":122},2,[113,124,125],{},"    subgraph Offline[\"离线链路（入库）\"]\n",[113,127,129],{"class":115,"line":128},3,[113,130,131],{},"        A1[\"📄 文档加载\u003Cbr\u002F>PDF\u002FMD\u002FWord\u002FExcel\"] --> A2[\"✂️ 文档切分\u003Cbr\u002F>父子块策略\"]\n",[113,133,135],{"class":115,"line":134},4,[113,136,137],{},"        A2 --> A3[\"🧮 向量化\u003Cbr\u002F>BGE-M3 Embedding\"]\n",[113,139,141],{"class":115,"line":140},5,[113,142,143],{},"        A3 --> A4[\"💾 向量存储\u003Cbr\u002F>Milvus Collection\"]\n",[113,145,147],{"class":115,"line":146},6,[113,148,149],{},"    end\n",[113,151,153],{"class":115,"line":152},7,[113,154,156],{"emptyLinePlaceholder":155},true,"\n",[113,158,160],{"class":115,"line":159},8,[113,161,162],{},"    subgraph Online[\"在线链路（问答）\"]\n",[113,164,166],{"class":115,"line":165},9,[113,167,168],{},"        B1[\"❓ 用户提问\"] --> B2[\"🎯 意图识别\"]\n",[113,170,172],{"class":115,"line":171},10,[113,173,174],{},"        B2 --> B3[\"🔍 语义检索\u003Cbr\u002F>Dense + Sparse Hybrid\"]\n",[113,176,178],{"class":115,"line":177},11,[113,179,180],{},"        B3 --> B4[\"📊 重排序\u003Cbr\u002F>BGE Reranker\"]\n",[113,182,184],{"class":115,"line":183},12,[113,185,186],{},"        B4 --> B5[\"📝 上下文构建\"]\n",[113,188,190],{"class":115,"line":189},13,[113,191,192],{},"        B5 --> B6[\"🤖 LLM 生成\u003Cbr\u002F>DashScope 流式输出\"]\n",[113,194,196],{"class":115,"line":195},14,[113,197,149],{},[113,199,201],{"class":115,"line":200},15,[113,202,156],{"emptyLinePlaceholder":155},[113,204,206],{"class":115,"line":205},16,[113,207,208],{},"    A4 -.->|\"检索\"| B3\n",[113,210,212],{"class":115,"line":211},17,[113,213,214],{},"    B6 --> C[\"✅ 可溯源答案\"]\n",[113,216,218],{"class":115,"line":217},18,[113,219,156],{"emptyLinePlaceholder":155},[113,221,223],{"class":115,"line":222},19,[113,224,225],{},"    style Offline fill:#EFF6FF,stroke:#3B82F6,stroke-width:2px\n",[113,227,229],{"class":115,"line":228},20,[113,230,231],{},"    style Online fill:#ECFDF5,stroke:#059669,stroke-width:2px\n",[233,234,235],"blockquote",{},[15,236,237,240],{},[18,238,239],{},"图示解读："," RAG 平台由两条核心链路组成——离线链路负责入库：文档加载 → 文档切分（父子块策略）→ 向量化（BGE-M3 Embedding）→ 存入 Milvus Collection；在线链路负责问答：用户提问 → 意图识别 → 语义检索（Dense + Sparse Hybrid）→ 重排序（BGE Reranker）→ 上下文构建 → LLM 生成（DashScope 流式输出）。在线检索时反向读取索引，最终输出可溯源答案。",[15,242,243],{},[18,244,245],{},"对比：传统 LLM vs RAG",[57,247,249],{"className":107,"code":248,"language":109,"meta":63,"style":63},"flowchart TD\n    subgraph Traditional[\"传统 LLM（仅靠记忆）\"]\n        T1[\"❓ 用户提问\"] --> T2[\"🧠 LLM 回忆训练数据\"]\n        T2 --> T3[\"⚠️ 可能幻觉\u003Cbr\u002F>知识有截止日期\u003Cbr\u002F>无法回答私有知识\"]\n    end\n\n    subgraph RAG[\"RAG（开卷考试）\"]\n        R1[\"❓ 用户提问\"] --> R2[\"🔍 检索知识库\"]\n        R2 --> R3[\"📋 获取相关文档片段\"]\n        R3 --> R4[\"🧠 LLM 基于资料回答\"]\n        R4 --> R5[\"✅ 有据可查的答案\"]\n    end\n\n    style Traditional fill:#FEF2F2,stroke:#DC2626,stroke-width:2px\n    style RAG fill:#EFF6FF,stroke:#2563EB,stroke-width:2px\n",[65,250,251,256,261,266,271,275,279,284,289,294,299,304,308,312,317],{"__ignoreMap":63},[113,252,253],{"class":115,"line":116},[113,254,255],{},"flowchart TD\n",[113,257,258],{"class":115,"line":122},[113,259,260],{},"    subgraph Traditional[\"传统 LLM（仅靠记忆）\"]\n",[113,262,263],{"class":115,"line":128},[113,264,265],{},"        T1[\"❓ 用户提问\"] --> T2[\"🧠 LLM 回忆训练数据\"]\n",[113,267,268],{"class":115,"line":134},[113,269,270],{},"        T2 --> T3[\"⚠️ 可能幻觉\u003Cbr\u002F>知识有截止日期\u003Cbr\u002F>无法回答私有知识\"]\n",[113,272,273],{"class":115,"line":140},[113,274,149],{},[113,276,277],{"class":115,"line":146},[113,278,156],{"emptyLinePlaceholder":155},[113,280,281],{"class":115,"line":152},[113,282,283],{},"    subgraph RAG[\"RAG（开卷考试）\"]\n",[113,285,286],{"class":115,"line":159},[113,287,288],{},"        R1[\"❓ 用户提问\"] --> R2[\"🔍 检索知识库\"]\n",[113,290,291],{"class":115,"line":165},[113,292,293],{},"        R2 --> R3[\"📋 获取相关文档片段\"]\n",[113,295,296],{"class":115,"line":171},[113,297,298],{},"        R3 --> R4[\"🧠 LLM 基于资料回答\"]\n",[113,300,301],{"class":115,"line":177},[113,302,303],{},"        R4 --> R5[\"✅ 有据可查的答案\"]\n",[113,305,306],{"class":115,"line":183},[113,307,149],{},[113,309,310],{"class":115,"line":189},[113,311,156],{"emptyLinePlaceholder":155},[113,313,314],{"class":115,"line":195},[113,315,316],{},"    style Traditional fill:#FEF2F2,stroke:#DC2626,stroke-width:2px\n",[113,318,319],{"class":115,"line":200},[113,320,321],{},"    style RAG fill:#EFF6FF,stroke:#2563EB,stroke-width:2px\n",[233,323,324],{},[15,325,326,328],{},[18,327,239],{}," 传统 LLM 仅靠记忆回答，存在可能幻觉、知识有截止日期、无法回答私有知识等问题；RAG 如同“开卷考试”，先检索知识库、拿到相关文档片段，再基于资料回答，答案有据可查。",[15,330,331,27],{},[18,332,333],{},"离线链路（入库）",[39,335,336,342,348,354],{},[32,337,338,341],{},[18,339,340],{},"文档加载","：读取 PDF、Markdown、Word 等各种格式的文档",[32,343,344,347],{},[18,345,346],{},"文档切分","：把长文档按语义边界切成小块（chunk），每块通常是几百到一千字",[32,349,350,353],{},[18,351,352],{},"向量化","：用 Embedding 模型把每个 chunk 转成一串数字（向量），表达其语义",[32,355,356,359],{},[18,357,358],{},"存储","：把向量和原文一起存入向量数据库",[15,361,362,27],{},[18,363,364],{},"在线链路（问答）",[39,366,367,373,379,385,391],{},[32,368,369,372],{},[18,370,371],{},"意图识别","：判断用户问的是什么类型的问题",[32,374,375,378],{},[18,376,377],{},"查询向量化","：把用户问题转成向量",[32,380,381,384],{},[18,382,383],{},"语义检索","：在向量数据库中找最相似的文档片段",[32,386,387,390],{},[18,388,389],{},"上下文构建","：把检索到的片段整理成 LLM 的参考资料",[32,392,393,396],{},[18,394,395],{},"答案生成","：LLM 基于资料生成回答",[233,398,399],{},[15,400,401],{},"说明：简单的知识库问答可以省略“意图识别”这一步；当系统里同时存在 FAQ、制度文档、业务报表等多种数据源时，再用意图识别做路由。",[10,403,405],{"id":404},"_3-向量和向量检索是什么","3. 向量和向量检索是什么",[15,407,408],{},"这是理解 RAG 最关键的概念。我们通过一个类比来理解：",[15,410,411],{},[18,412,413],{},"类比：图书馆找书",[15,415,416],{},"传统关键词搜索（比如 MySQL LIKE 查询）就像你告诉图书管理员\"我要找书名里有'Python'的书\"。问题在于：",[29,418,419,422],{},[32,420,421],{},"一本叫《Python 机器学习实战》的书会被找到",[32,423,424],{},"但一本叫《用编程语言做数据分析》的书不会被找到，虽然它也讲 Python",[15,426,427],{},"向量检索就像你告诉图书管理员\"我要找一本关于'用代码分析数据'的书\"。图书管理员理解了这个概念的\"语义\"，然后去书架上找到《Python 机器学习实战》、《R 语言统计分析》、《数据科学入门》等语义相近的书。",[15,429,430,27],{},[18,431,432],{},"技术层面",[29,434,435,438,441],{},[32,436,437],{},"Embedding 模型把一段文本（比如一句话、一个段落）转换成一个固定长度的浮点数数组，例如 1024 维的向量",[32,439,440],{},"语义相近的文本，它们的向量在数学空间中的\"距离\"也近",[32,442,443],{},"向量数据库就是专门存储和检索这些向量的系统",[57,445,449],{"className":446,"code":447,"language":448,"meta":63,"style":63},"language-python shiki shiki-themes github-light github-dark","# 伪代码示例\n文本1 = \"Python 是一门编程语言\"\n文本2 = \"Java 也是一门编程语言\"\n文本3 = \"今天天气很好\"\n\n向量1 = embedding(文本1)  # [0.12, 0.34, -0.56, ...] (1024个数字)\n向量2 = embedding(文本2)  # [0.11, 0.33, -0.54, ...] (与向量1很接近)\n向量3 = embedding(文本3)  # [0.89, -0.21, 0.67, ...] (与向量1差异很大)\n\n# 向量1和向量2的余弦相似度 ≈ 0.95（很高）\n# 向量1和向量3的余弦相似度 ≈ 0.12（很低）\n","python",[65,450,451,456,461,466,471,475,480,485,490,494,499],{"__ignoreMap":63},[113,452,453],{"class":115,"line":116},[113,454,455],{},"# 伪代码示例\n",[113,457,458],{"class":115,"line":122},[113,459,460],{},"文本1 = \"Python 是一门编程语言\"\n",[113,462,463],{"class":115,"line":128},[113,464,465],{},"文本2 = \"Java 也是一门编程语言\"\n",[113,467,468],{"class":115,"line":134},[113,469,470],{},"文本3 = \"今天天气很好\"\n",[113,472,473],{"class":115,"line":140},[113,474,156],{"emptyLinePlaceholder":155},[113,476,477],{"class":115,"line":146},[113,478,479],{},"向量1 = embedding(文本1)  # [0.12, 0.34, -0.56, ...] (1024个数字)\n",[113,481,482],{"class":115,"line":152},[113,483,484],{},"向量2 = embedding(文本2)  # [0.11, 0.33, -0.54, ...] (与向量1很接近)\n",[113,486,487],{"class":115,"line":159},[113,488,489],{},"向量3 = embedding(文本3)  # [0.89, -0.21, 0.67, ...] (与向量1差异很大)\n",[113,491,492],{"class":115,"line":165},[113,493,156],{"emptyLinePlaceholder":155},[113,495,496],{"class":115,"line":171},[113,497,498],{},"# 向量1和向量2的余弦相似度 ≈ 0.95（很高）\n",[113,500,501],{"class":115,"line":177},[113,502,503],{},"# 向量1和向量3的余弦相似度 ≈ 0.12（很低）\n",[15,505,506],{},[18,507,508],{},"Dense、Sparse 与 Hybrid 检索",[15,510,511],{},"BGE-M3 是当前最常用的多语种 Embedding 模型之一，它同时支持三种检索能力：",[513,514,515,534],"table",{},[516,517,518],"thead",{},[519,520,521,525,528,531],"tr",{},[522,523,524],"th",{},"方式",[522,526,527],{},"原理",[522,529,530],{},"优点",[522,532,533],{},"弱点",[535,536,537,552,566],"tbody",{},[519,538,539,543,546,549],{},[540,541,542],"td",{},"Dense（稠密检索）",[540,544,545],{},"把整段文本编码成一个语义向量，用余弦相似度或内积计算相关度",[540,547,548],{},"理解同义词、改写、上下文语义",[540,550,551],{},"对精确术语、编号、英文缩写不敏感",[519,553,554,557,560,563],{},[540,555,556],{},"Sparse（稀疏检索）",[540,558,559],{},"给文本里的词计算权重，类似 BM25，只保留少数高权重词",[540,561,562],{},"精确匹配关键词、型号、编号、专业名词",[540,564,565],{},"不理解语义，容易漏掉“换一种说法”的查询",[519,567,568,571,574,577],{},[540,569,570],{},"Hybrid（混合检索）",[540,572,573],{},"同时跑 Dense 和 Sparse，再把两路结果融合",[540,575,576],{},"兼顾语义和关键词，召回更稳",[540,578,579],{},"需要额外融合排序，成本略高",[15,581,582],{},"BGE-M3 的特点：",[29,584,585,588,591],{},[32,586,587],{},"多语言：支持 100+ 语言，中文和英文效果都很好",[32,589,590],{},"多粒度：最长可处理 8192 token 的长文本",[32,592,593],{},"多功能：一次推理可以同时输出稠密向量、稀疏词权重和用于精排的多向量",[15,595,596],{},[18,597,598],{},"检索之后还要重排序",[15,600,601],{},"向量检索得到的是“粗排候选”，一般召回 20 到 50 个片段；随后用 BGE Reranker 这类交叉编码器对“问题 + 片段”逐对打分，挑出最相关的 3 到 5 个片段。Reranker 精度更高但速度更慢，所以只对少量候选做精排。",[603,604,605],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":63,"searchDepth":122,"depth":122,"links":607},[608,609,610],{"id":12,"depth":122,"text":13},{"id":100,"depth":122,"text":101},{"id":404,"depth":122,"text":405},"2026-04-07","从检索增强生成的核心思想出发，梳理 RAG 系统的两条关键链路，理解它如何缓解幻觉、让答案可溯源。",false,"md","article",{"migration":617},{"generator":618,"sourceSha256":619},"nuxt-site\u002Fscripts\u002Fmigrate-content.mjs","954550308d30a8c7765a5c49ec3faa83f54c2f5ecc521c9d7f8179b9153f3d3d","\u002Frag\u002F01_rag基础_核心概念",null,"rag",{"title":5,"description":612},"content\u002Frag\u002F01_RAG基础_核心概念.md","rag\u002F01_RAG基础_核心概念",[627,628],"RAG","Embedding",21,"SJJzBnmDaJneYYxJdJk_MUg32L0m2akyPjPVKRIoXzA",1791279145467]