# RAG 解释来源和基本

曾经搜索过“"”部署指南@"}(即使有)'}关于 “"”的一篇文章 有关“MS K4”和“生产”的文章 *"?“RAG @(Retrieval-“Auglied Pagement Generation+)”通过理解“,”来解决这个问题,而不只是关键字 •.}这一系列展示了RAG是如何在“hangle",}下如何工作的?

<datetime class="hidden">2025-11-22T09:00</datetime>

<!-- category -- AI, RAG, Machine Learning, Semantic Search, LLM, AI-Article -->
# 一. 导言导言 导言 导言 导言

**📖系列导航** 这是RAG ( -Retreival\- -Auged Generation的“I)”系列中的“:”部分。

- **RAG 起源和基本要点** @( @ this article\ )}#- @什么嵌入是@, @为什么它们重要?
- [RAG 建筑和内部](/blog/rag-architecture) @ -_ Chunking,}代号@,}矢量数据库
- [内容:3:](/blog/rag-practical-applications) 建立完整的RAG系统
- [“4a :ONNX”“& Qdrant 履行”](/blog/semantic-search-with-onnx-and-qdrant) - CPU-友好语义搜索基金会
- [操作中的语义搜索](/blog/semantic-search-in-action) -typeahead,混合搜索@,和UI组件
- [@ 5:_ 混合搜索@ MS K1\ 自动 @ MASK2 @ Indexing](/blog/rag-hybrid-search-and-indexing) 生产一体化模式
- [6: 图表集](/blog/graphrag-knowledge-graphs-for-rag) - 用于 proposal_- 水平理解的知识图表

RAG '*}但这里的'* *这技术开启了远不止于 AI talkbots.*的机遇。 它授权网站进行语义搜索 ,}内容建议=,}写作援助\,}和知识管理{.}

**双重性** RAG 可以帮助客户 @(#Better search@,}准确解答 ) 或利用它们 {(} manipulate recommendation_,}埋藏负面评论 *, 浮现高端内容*). 区别在于 <'>\}t the Technology—Qit's intá.}一个语义搜索来帮助用户找到他们真正需要的东西}MS K11 great}. 一个优先选择什么最能让你赚到钱,同时显示有助的<?《'》暗色版域=,}和它为什么理解这个方法如何管用

**以下是RAGZ:的真相。** 它听起来吓人 . 矢量嵌入?变异模型MS K2KPassesMSMK3,但和软件中的其他所有东西一样...

**RAG分三步**

1. 将文字转换为数字 @ (\ embeddings@ MS K1\ {}
2. 查找相似的编号 @ ( vctor search@ MS K1
3. 使用您找到的 & M(display 结果或种子到 LLM@ )}

剩下的是执行细节

本系列展示您如何建立使用 C# code@ .}无手动跳 *. 没有假设*. 只有碎片和它们是如何组合起来的\ .

**你在这个系列中将学到什么?**

- **本篇文章=)**@: RAG是如何来的,为什么重要?
- **部分#2**完整的技术架构和LLM内部
- **部分#3**建立有代码示例的实时系统

后来的, I'L会教你如何建立完整的RAG系统,包括#:

- [CPU-}使用 ONNX 嵌入器进行方便的语义搜索](/blog/semantic-search-with-onnx-and-qdrant) (*Part *4) 部分内容
- [自定义Qdrant 托管的矢量数据库](/blog/semantic-search-with-onnx-and-qdrant) (*Part *4) 部分内容
- [混合查找和自动索引](/blog/rag-hybrid-search-and-indexing) (*Part *5) 部分内容

[TOC]

# 什么是RAG?

**检索@- @ 推荐的一代 @ :** 查找相关信息@,}然后使用它 @.

```mermaid
flowchart LR
    A[User Question] --> B[Retrieve Relevant Info]
    B --> C[Retrieved Documents/Context]
    C --> D[Generate Response]
    A --> D
    D --> E[Grounded, Accurate Answer]

    style B stroke:#f9f,stroke-width:2px
    style D stroke:#bbf,stroke-width:2px
```

**没有RAG:** 用户询问% → @% LLM 内存的猜想@→# 可能有幻觉

**与RAG:** 用户使用这些基于现实的 docs @ →}来查询相关文件@ MS K1LLM 答案

```csharp
// Without RAG: Hope the LLM knows
var answer = await llm.GenerateAsync("How do I deploy Docker?");
// Risk: Might make up outdated or wrong steps

// With RAG: Give it the docs
var relevantDocs = await vectorSearch.FindSimilar("How do I deploy Docker?");
var context = string.Join("\n", relevantDocs.Select(d => d.Text));
var answer = await llm.GenerateAsync($"Context: {context}\n\nQuestion: How do I deploy Docker?");
// Result: Answer based on YOUR actual Docker deployment docs
```

**关键洞察力:** 单独知识存储@(search)来自推理 @(LILMMS K3}更新您的文档{,搜索停留当前=.不需要再培训\.

# RAG从哪里来的?

RAG以数十年的搜索和NLP研究为基础 了解这个历史有助于理解为什么RAG被设计成这样

## 传统搜索@(pre-2010s)

**关键字“-”基于搜索@:**

- **TF-IDF**: 定期频率 @× 逆向文档频度 @MS K2 普通单词不重要
- **BM25**“: 概率排序”“-”仍然是关键词搜索的基准
- **模糊匹配**:
  - **声音**: 语音算法 @("#Smith @MS K2}匹配的@"_Smythe%")
  - **Leveshtein 距离**@:_编辑距离@(}有多少插件?
  - **N-草丛**用于部分匹配的 M:字符@ /}字序列

**问题是什么?** 相匹配 *字符字符字符*# , # 不是# *意思*.搜尋"container controducation"你找到MS K3t MSSK4Docker Swarm}"除非有這些字

## 早期问题解答@(2010 @s)}

**华生・(~IBM_, _2011):**

- 与基于规则的推理合并检索
- 但需要大量手力 - 创制知识工程
- 仍然严重依赖关键字匹配

**阅读理解模型@: @%**

- 可以从提供的段落中提取答案
- 但你必须先给他们正确的通道
- 没有语义搜索可找到该段落

## 深层学习革命

**变换器 @ (2017): @%** "["只要你关注"](https://arxiv.org/abs/1706.03762)"

- 能够理解背景的神经网络
- 其后的一切基础

**{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}BERT(2018):**

- 语言背景理解
- "_BARBank_"}("Bank@MSK11)意指不同事物 在 @MSK 2Birver Bank_"}对#"}储蓄银行="}
- 能够生成包含含义的嵌入

**GPT-2/3 □(2019/2020):**

- 能够产生一致案文的大语言模式
- 但仅限于培训数据
- 出现了幻觉问题

**高密度矢量表解@:**

- 文本 @ →}在高空中有意义的数字@ MS K1维空间
- 类似的意思@→附近的矢量
- 这使语义搜索成为可能

**10月#2019):**

- 麦克·刘易斯等人的双向和自动=-回归式变形器
- 混合 BERT- 和 GPT- 的类似编码器
- 接受过腐败文本培训的disoising 自动编码器,然后重建它
- 极适合文本生成和理解任务
- 成为RAG的基础

**M2M-100 (纸本A{,}10月_2020):**

- 最初的多语种翻译模式@- @to @-}#many 多语言翻译模式
- @100语直接翻译,
- 2,200 语言方向 @(10#x 比先前的型号更多@)}
- 显示的变压器可以处理大横交叉@ - @ 双语任务

**真实的--世界性例子 @:_#** 我的 [神经机器翻译工具](https://github.com/scottgal/mostlyucid-nmt) 当无法提供初级服务时,BART作为后备翻译模式用于初级服务@, 演示这些基于变压器的模型如何成为生产系统的实际构件_.

## 现代RAG的诞生

开创性纸"[重新获取@ - @ 启动生成知识 < NLP 强化NLP任务 >](https://arxiv.org/abs/2005.11401)由Patrick Lewis及Al-al-. (脸书AI Research=)正式推出,

**他们结合了什么 :**

- ensense Passage retreserval @( @DPR)}\ -}学习的矢量表达式@,}不是关键字
- BART 生成器 @-}(后继的2seq 模型) 来自 @MS K2
- End - @to @- @end differentiable 建筑 #% MS K2# recreat and production 一起获取并生成

**结果#:** RAG系统的业绩远远超过了知识的更大模型 - 密集任务 同时效率更高 并更新了-

## 为什么RAG 爆破@(2023- @present_)#

ChatGPT, GPT}-4,和Claude 使RAG成为关键

1. **幻觉问题** RAG在真实的文档中做出回应 . *
2. **知识关闭** “-”LMS 培训了有关“2021”数据的培训。“MS K2”T知道关于“2024”事件的情况;“MSC4”RAG使用当前文件=“MSKO5”
3. **私人数据** @-@LMs can'}可以访问您的公司 *'* 内部 docs=.* RAG canMPK4*
4. **费用成本** -+Fine-+ZA调整LMs是昂贵的 @($10QQQK-100+KQ+).+RAG是便宜的#(+存储@++嵌入=).}
5. **可解释性** @-_RAG可以引证来源@,}使其可审计和可信

**今天 (2024-2025):** RAG是生产AI系统的实际标准,需要准确性和可审计性 *.* 每一大AI公司都提供RAG工具*.}

# RAG如何工作 : *大图片

在深入探究技术细节前,

## 三阶段

RAG系统分三个不同阶段运行

### 阶段=1: 索引=+(One_-时间设置@)

```mermaid
flowchart LR
    A[Your Documents] --> B[Split into Chunks]
    B --> C[Generate Embeddings]
    C --> D[Store in Vector DB]

    style C stroke:#f9f,stroke-width:2px
    style D stroke:#bbf,stroke-width:2px
```

**发生什么事了?**

1. 使用您的知识库@(docs,博客posts @,手册_)
2. 分割成可控块 * @ (_ politices\ MS K1}区域@ )*
3. 将每个块转换为矢量嵌入的“% (” 数数中的矢量@)
4. 将矢量存储在为相似搜索而优化的数据库中

**密钥概念@: @%** 类似的含义产生相似的矢量@,,所以 @"#docker contracting\"和{"acontainerization popolitium_"最终在矢量空间*.中紧密相连。

### 阶段“2:检索” “(每个查询”“MSSK2”

```mermaid
flowchart LR
    A[User Question] --> B[Generate Query Embedding]
    B --> C[Search Vector DB]
    C --> D[Top K Most Similar Chunks]

    style B stroke:#f9f,stroke-width:2px
    style C stroke:#bbf,stroke-width:2px
```

**发生什么事了?**

1. 用户问问题
2. 将问题转换为用于索引的矢量 {(}%same 模式
3. 在数据库中查找最相似的矢量
4. 返回上方 K 最相关的块@ ( @ 通常为\ 3-10)} *

**为什么它的工作原理":** “"”“我如何部署集装箱? ”“?"”“ @(Qquery)”在语义上类似于多克部署的块块?”“,”“即使字词不尽相同,“MS K5”也是一样的。

### 阶段: 3: 一代: I( 每个问题:

```mermaid
flowchart TB
    A[User Question] --> B[Build Prompt]
    C[Retrieved Context] --> B
    B --> D[LLM]
    D --> E[Generated Answer with Citations]

    style B stroke:#f9f,stroke-width:2px
    style D stroke:#bbf,stroke-width:2px
```

**发生什么事了?**

1. 选择用户@' @%s 问题
2. 取回的上下文块
3. 构造一个即时Q: @ "_ profilen this con上下文@ MS K2 回答这个问题 @ MPK3}
4. 发送到 LLM 生成
5. 法学硕士根据所提供的背景提供答案

**神奇的魔力** 它只能合成和解释 '提供的东西

## 简单示例

让'通过系统追踪查询@:

**用户询问@: @%** “"”我如何使用多克作曲“?"”?

**步骤 @1 @ @ - @ retreival@: @**

```
Query embedding: [0.234, -0.891, 0.567, ...]

Search vector DB for similar embeddings...

Retrieved chunks:
1. "Docker Compose is a tool for defining multi-container applications..." (similarity: 0.92)
2. "To use Docker Compose, create a docker-compose.yml file..." (similarity: 0.87)
3. "The docker-compose up command starts all services..." (similarity: 0.83)
```

**步骤2 - "一代" :**

```
Prompt to LLM:
"Context:
[1] Docker Compose is a tool for defining multi-container applications...
[2] To use Docker Compose, create a docker-compose.yml file...
[3] The docker-compose up command starts all services...

Question: How do I use Docker Compose?

Answer (use the context above):"

LLM Response:
"To use Docker Compose [1], start by creating a docker-compose.yml file [2] that
defines your services. Then run 'docker-compose up' to start all services [3]..."
```

**结果#:** 准确回答,从您的文档中隐含引用@. @%

# RAG vs {.} 其他方法

了解何时使用RAG {(}和不使用})}要求将其与替代品比较=.}

## RAG vs . Fine-Tuning

|+Asspect@|+RAG#|+Fine @-+Tining#|}(《星际迷航》)
|--------|-----|-------------|
| **知识更新** @| @ instant@(}只是更新知识库 #)# |#需要再培训$|#
| **费用成本** @| 低 ( 储存 I+ 嵌入) *#| 高 GPU 训练时间*
| **准确性** @| 以来源为基地 *| 能产生幻觉*|
| **自定义** “|”限量检索“| 深度模型适应”
| **可解释性** @(_black box@)}{|} 引用来源: ) MS K3低 MSk4黑盒#MSK5
| **最佳** @|_Oknown_-}集约任务#|_Style_/Final适应@|

**何时使用 Fine@ - @ Tuning @ MS K1**

- 您需要模型来学习 **样式风格样式样式** 或 **格式格式**
- 您有一个大@ , @ 干净的数据集
- 您需要模型内部化 **模式型式**不是事实
- 让GPT像莎士比亚一样写作

**何时使用 RAG: @ {}**

- 你需要 **事实准确性** 引号
- 您的知识基础变化频繁
- 您拥有私人数据@ / @ 专有数据
- 成本和简单问题
- 例如:: 客户支持聊天室@( @my company @'_%s docs changes change

**可以将两者结合起来吗? ?** 是! Fine-Tune 用于样式},RAG 用于事实=.

## RAG vs@ . @ 长内框窗口

现代LLMs夸耀着巨大的上下文窗口@( @GPT-4:} @128K massigns{,}{克劳德•:}#200}♪Kmatters_).}为何不把你的文档全部丢入上下文□?

**长期问题**

1. **费用成本**@ : 标语尺的标定比例, 每个查询加起来都快
2. **时间间隔**@ :_ 正在处理 *\ MPK1} K 神令需要时间
3. **迷失在中间**:LMs在长期环境中努力使用信息。
4. **稀释**相关信息被埋在噪音中
5. **实际限制**: 您可以在上下文中适合您的整个公司@'}♪ docs Docs in context

**当长上下文有意义时 @ : @ @**

- 单大文档 @ ( @ e @ MPK1} g.,} 分析合同@ MS K3
- 所有的东西都是相关的 @ ( @ no 需要过滤@ MS K1} @
- 成本是否值得关注?
- 低查询量

**当RAG说得通时 : ***

- 大型知识库
- 需要找到相关的子集
- 高查询量 * @(}成本事项=%)
- 实时更新知识

**最佳做法*:** 使用 RAG 选择最相关的内容@,}然后对子集使用长上下文\ .

## RAG vs @ . 以示例提示

微小的- @ shot 提示@ ( pregnition 示例在快速的\ )} 是简单的基准 {.}

**实例提示@: @%**

```
Examples:
Q: What is Docker?
A: Docker is a containerization platform...

Q: How does Kubernetes work?
A: Kubernetes orchestrates containers...

Q: What is my new question?
A: [LLM generates answer]
```

**限制**

- 限于上下文窗口中适合的内容
- 实例的手工整理
- 向大型知识库推广
- 没有语义搜索@ - @% 您手动选择示例

**RAG 改进 *:***

- 自动找到最佳示例@ ( @ 通过相似性搜索\ )
- 缩放至无限制示例@( @% 只有上方 K 被发送到 LLM @ @ )}
- 查询“ (” 的适应性

您可以将RAG 视为“ "” 自动数@ MS K1 @ shot 在比例尺上提示的 RAG+."

## 混合搜索@:RAG @+传统搜索

您可以将RAG与传统的全@ - @ text 搜索结合起来, 使用对等列队合并 {(} _RRF).}

**为何杂交?**

- **语义搜索**@:_Great 用于概念匹配@("error profession *\ "}找到#"}例外管理 <")}{
- **关键词搜索**@:_Great 用精确的术语表示 # ("_ Dockercompomee MS K2} _"_Enity Frameworl=")#
- **混合混合物**最好的两个世界

```csharp
public async Task<List<SearchResult>> HybridSearchAsync(string query)
{
    // Run both searches in parallel
    var semanticTask = SemanticSearchAsync(query, limit: 20);
    var keywordTask = KeywordSearchAsync(query, limit: 20);

    await Task.WhenAll(semanticTask, keywordTask);

    var semanticResults = await semanticTask;
    var keywordResults = await keywordTask;

    // Combine using Reciprocal Rank Fusion
    return ApplyRRF(semanticResults, keywordResults);
}

private List<SearchResult> ApplyRRF(
    List<SearchResult> list1,
    List<SearchResult> list2,
    int k = 60)
{
    var scores = new Dictionary<string, double>();

    // Score from first list
    for (int i = 0; i < list1.Count; i++)
    {
        var id = list1[i].Id;
        scores[id] = scores.GetValueOrDefault(id, 0) + 1.0 / (k + i + 1);
    }

    // Score from second list
    for (int i = 0; i < list2.Count; i++)
    {
        var id = list2[i].Id;
        scores[id] = scores.GetValueOrDefault(id, 0) + 1.0 / (k + i + 1);
    }

    // Merge and sort by combined score
    var allResults = list1.Concat(list2)
        .GroupBy(r => r.Id)
        .Select(g => g.First())
        .OrderByDescending(r => scores[r.Id])
        .ToList();

    return allResults;
}
```

# 为什么RAG关系重大

现在,你明白什么是RAG=,}它来自哪里了吗? 与其它选择的比较如何?

**大赦国际的民主化**

- 您不需要一个“ $100” K fine “ -” 调整预算
- 你不需要一个ML工程师团队
- 任何开发者都可利用现有工具建立区域咨询组系统

**实际精确度**

- 幻觉是生产中LLMs的问题
- RAG通过以真实文件作为回复依据来解决它
- 引文使其可审计和可信

**@ 3. @ 总是上传@ MS K1 @to @ MPK2#Date**

- 传统AI:培训,一旦□,知识被冻结
- RAG: 更新您的文档@ , 知识即时更新
- 快速关节关键关头@- @ 移动域名 @ (_ tech, @ news=,{ 规章} @)}

**隐私与控制**

- 数据保存在您的基础设施中
- 能够完全本地运行 @ ( @ 当地嵌入@ MS K1 @ 本地 LLM @ I+ 本地矢量 DBQ)}
- 没有向 OpenAI 或其他云源提供者发送数据

**-=YTET -伊甸园字幕组=- 翻译:**

- 储量是便宜的, 每GB=)
- 嵌入式是廉价的( 折中法,折中率为 1000 文档MS K2
- 比精细@-}调制或长上下文窗口便宜得多

**6.-Versatile 应用程序**

- 语义搜索@(no LLM 需要 @!)
- &A系统,引文
- 内容建议
- 书写助理
- 知识管理 知识管理
- 文件帮助者
- 研究助理

# 从历史到实施

我们追踪到RAG' 进化

- **Pre-2010 @%s**: 关键字搜索 @(字符@,}不是意指)
- **# 2010#**@:#阅读理解@(}需要右路 #)#
- **2017-2020**: 变换器和嵌入器 @(}意指#→ 矢量@)
- **2020**现代RAG (retriev *+产生=)
- **2023-_现在**-=YTET -伊甸园字幕组=- 翻译:

**从 MPK0 部件中的关键洞见@ info: tooltip**

- ROAG分离 **知识储存** (Victor DB)來自 **理由说明** (LLM)
- 它解决幻觉问题, 以真实文件为基础回应
- 它比精细更便宜 灵活 比微小
- 对于大型知识库而言,它比长长的环境范围更管用
- 它基本上在“"” 自动数@-}发号施令

**三个-精神模式 :**

1. 将文字转换为数字 @ (\ embeddings@ MS K1\ {}
2. 查找相似的编号 @ ( vctor search@ MS K1
3. 使用您找到的“ (” display 或 feed to LLM @ MS K1 ” 的内容

其它一切都是优化... .......

# 继续分割 & 2: @ 建筑和内部

你现在明白了 **什么什么是** RAG 是, **为什么** 这很重要 ,和 **何处** 它来自. 但是它是如何实际工作 在HANZ?}

内 **[RAG 建筑和内部](/blog/rag-architecture)**我们深入探究技术细节 :

**完整RAG输油管:**

- 集成策略 @,}嵌入生成器,矢量存储@)
- 阶段 2: retregevval @(Qquery 嵌入@,}相似的度量=%,重新排位=)
- 阶段性 3: 新一代 ( 快速建筑 MS K2 LLM参数 MSKO3 后期- product)

**内部LLM=:**

- 什么是象征物,它们为什么对RAG很重要?
- KV 缓存:}LLMs如何记住上下文
- 上下文窗口和象征性管理战略
- 优化区域咨询组的象征性效率和成本

**技术深层潜水 *:***

- 矢量数据库和相似性搜索算法
- 嵌入模式和正常化
- 保持环境的启动战略
- C#中实用代码示例

**[继续分割 & 2: @ 建筑与内部](/blog/rag-architecture)**

在“2,”部分之后,您% '将准备加入“ I3,”部分。 我们在此构建真正的系统@,解决共同的挑战 @,并探索诸如 HyDE},多-Qquery RAGMS K7和上下文压缩.等先进技术

## 资源资源资源 资源和资源资源资源

**基础文件**

- [重新获取@ - @ 启动生成知识 < NLP 强化NLP任务 >](https://arxiv.org/abs/2005.11401) 原始的RAG文件
- [用于 OpenQ- @Domay 问答的高级通道检索器](https://arxiv.org/abs/2004.04906) -DPR(retrieval基础
- [你们需要的注意力](https://arxiv.org/abs/1706.03762) -+#变换器 @(_加入基金会@)}

**继续读取@: @%**

- [神经机器翻译如何工作](/blog/how-neural-machine-translation-works) 理解嵌入后的AI模式

**此序列中的下一集 @ : @**

- [RAG 建筑和内部](/blog/rag-architecture) 技术深潜
- [内容:3:](/blog/rag-practical-applications) 建立真正的系统

**[继续到 & M2 @ →](/blog/rag-architecture)**