Back to "解释的RAG:起源和基本要素"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

AI AI-Article LLM Machine Learning RAG Semantic Search

解释的RAG:起源和基本要素

Saturday, 22 November 2025

曾经搜索过“ 部署指南 ” , 却一无所获, 即使有一篇关于“ 出版到生产” 的文章。 RAG(检索到启动的一代)通过理解意义解决了这个问题, 而不仅仅是关键词。 这个系列展示了RAG是如何形成的, 它是如何在引擎盖下运行的, 以及如何建立生产系统。 从语义搜索到 AI-hower {A 和引文-所有C# 工作代码示例 。

一. 导言 导言 导言 导言 导言 导言 一,导言 导言 导言 导言 导言 导言

系列导航: 这是RAG(回收-提款一代)系列的第一部分:

RAG(检索-启动一代)的开发是为了让AI更聪明、更聪明的LLMs获得他们没有接受过培训的信息。但有趣的是:这种技术开辟的机会远远超出AI聊天室。它授权在网站、内容建议、写作协助和知识管理上进行语义搜索。

双重性质: RAG可以帮助客户(更好地搜索,准确的引用回答)或利用这些工具(操纵性建议,掩埋负面评论,浮出水面的上层内容 ) 。 区别不是技术 — — 它的用意。 有助于用户找到他们真正需要的东西的语义搜索? 很好。 一个在显示帮助的同时优先关注什么能让你最有钱的人? 这是一个黑暗的图案范围,它为什么理解这如何起作用。

以下是关于RAG的真相: 这听起来很吓人。 病媒嵌入器? 变异模型? 变异模型? KV 缓存? 但是和软件中的其他所有东西一样, 它只是理解它是如何运作的。 你不需要了解变异器结构背后的数学, 而不是你需要理解组装来写 C# 。

RAG分三个步骤:

  1. 将文字转换为数字(编组)
  2. 查找相似的数字( 矢量搜索)
  3. 使用您找到的( 播放结果或向 LLM 反馈)

就是这样 剩下的是执行细节

这个系列展示您如何建立使用 C# 代码的 RAG 系统 。 没有手动跳动, 没有假设, 只有碎片和它们是如何组合的 。

你会在这系列中学到什么:

  • 第1部分(本条):RAG是如何来的 以及它为什么重要
  • 第二部分 第二部分:完整的技术架构和LLLM内部
  • 第三部分 第三部分:用代码示例建立实际系统

稍后,我还将教你如何建立完整的RAG系统,包括:

什么是RAG? (RAG)? (RAG)? (RAG)什么是RAG? (RAG)

回收- 提款一代 : 查找相关信息,然后使用这些信息。

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 *% LLM 答案

// 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

关键洞察力: 从推理( LLM) 中分离知识存储( 搜索) 。 更新您的文档, 搜索时长 。 不需要再培训 。

RAG从哪里来的?

RAG以数十年的搜索和NLP研究为基础,了解这一历史有助于理解为什么RAG是设计成这样,以及它解决了哪些问题。

传统搜索(2010年代前)

基于关键字的搜索 :

  • TF-IDF: 定期频率 x 倒数文档频率 - 通用词数少重要
  • BM25 BM25:概率排序 - 仍然是关键词搜索的基准
  • 模糊匹配:
    • 声音音效算法 ("Smith"和"Smyth"匹配)
    • Leveshtein 距离:编辑距离(有多少插入/删除/替代)
    • N-grams N-grams:部分匹配的字符/字序列

问题: 相匹配的 字符字符字符字符,而不是 意思。 搜索“ 集装箱管弦” , 除非有准确的字眼, 否则您找不到“ 鸟鼠摇篮 ” 。 它们可以处理打字, 但不能处理语义学 。

早期回答问题(2010s)

华生(IBM,2011年):

  • 与基于规则的推理合并检索
  • 危险! 但需要大规模手工制作的知识工程
  • 仍然严重依赖关键字匹配

阅读理解模型:

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

深学习革命(2017+)

变形器(2017年): ""只要你关注" "只要你需要关注""

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

BERT(2018年):

  • 语言背景理解
  • "银行"在"河银行"和"储蓄银行"中 意指不同的东西
  • 能够生成包含含义的嵌入

GPT-2/3(2019/2020):

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

高浓度病媒代表:

  • 高维空间中文本有意义的数字
  • 类似的意思 附近矢量
  • 这使语义搜索成为可能

BART(脸书AI,2019年10月):

  • 《双向和自动递减变异器》,Mike Lewis等人著。
  • 与 GPT 类似 GPT 的混合 BERT 编码器
  • 接受腐败文本培训的disoising 自动编码器,然后重建文本
  • 极适合文本生成和理解任务
  • 成为RAG的基础

M2M-100(AI,2020年10月,脸书):

  • 首批多语多语多语种翻译模式
  • 直接翻译:100种没有英语支线的语种之间的100种语言直接翻译
  • 2 200语言方向(比以往模式多10倍)
  • 显示的变压器可处理大规模跨语言任务

真实世界实例: 我的 神经机器翻译工具 在没有初级服务时,作为后备翻译模式使用BART, 说明这些以变压器为基础的模型如何成为生产系统的实际构件。

现代RAG的诞生(2020年5月)

开创性文件 "知识密集 NLP 任务检索支持生成" Patrick Lewis等人(脸书AI Research)正式推出RAG,

两者的结合:

  • 密集通道检索(DPR) - 了解的矢量代表,而非关键字
  • BART发电机 -- -- 2019年的后继2Seq模型
  • 端端到端差异式建筑 - 联合检索和生成

结果: RAG系统的业绩远远超过了知识密集型任务方面更大的模型,同时提高了效率,更新了最新数据。 你可以更新知识库,而不对模型进行再培训。

为什么RAG被爆(2023年至今)

查特、GPT-4、GPT-4和Claude使RAG成为关键:

  1. 幻幻觉问题 - LLM女士自信地编造事实 RAG在真实文件中提出答复
  2. 知识关闭 - 受过2021年数据培训的LLM公司不知道2024年的活动,RAG公司使用现有文件。
  3. 私人数据 -LLMS不能进入你公司的内部医生室 RAG可以
  4. 成本成本成本成本成本 - 微调LMS价格昂贵(10K-100K+),RAG价格低廉(储存+嵌入)。
  5. 可解释性 - 区域咨询组可以列举资料来源,使其可审计和可信赖。

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

RAG是如何运作的:大图

在深入探讨技术细节(我们将在第二部分中讨论)之前, 让我们先了解高层次的工作流程。

三阶段

区域咨询组系统分三个不同阶段运作:

第1阶段:指数化(一次性设置)

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、博客文章、手册)
  2. 分割成可控块块(段落、区域)
  3. 将每个块转换成矢量嵌入(数数数组)
  4. 将矢量存储在为相似搜索而优化的数据库中

关键概念: 类似的含义产生类似的矢量, 所以“ 笼子容器” 和“ 集装箱平台” 最终在矢量空间 紧密相连。

第2阶段:检索(每个查询)

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. 将问题转换为矢量(与索引使用的模式相同)
  3. 在数据库中查找最相似的矢量
  4. 返回上方 K K 最相关的块( 通常为 3- 10)

为什么它起作用: “我如何部署集装箱?” (query)在语义上与关于Docker部署的块块相似,

第3阶段:产生(每个查询)

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. 接受用户的问题
  2. 取回的上下文块
  3. 构造一个提示 : "鉴于这个背景... , 回答这个问题..."
  4. 发送到 LLM 生成
  5. 法学硕士根据所提供的背景提供答案

魔法: LLM无法想象与上下文无关的事实。 它只能合成和解释所提供的内容。

简单示例

让我们通过系统追踪查询 :

用户询问 : "我如何使用多克作曲?"

步骤1 - 检索:

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 相对于其他方法

了解何时(和何时不)使用限制令需要将其与替代品进行比较。

RAG对 Fine-Turning

|--------|-----|-------------| | 知识更新 需要再培训 | 成本成本成本成本成本 低(存储+嵌入) 高(GPU培训时间) | 准确性 来源来源 致幻 | 自定义 * 限于检索 * 深度模型适应 * * * * 仅限于检索 * * 深度模型适应 * * * 仅限于检索 * * 深度模型适应 * * * 仅限于检索 * * 深度模型适应 * * * 仅限检索 * * 仅限检索 * * 深度模型适应 * * * * 仅限检索 * * 深度模型适应 * * * * 仅限检索 * * 深度模型适应 * * * * * * 仅限检索 * * * 深度模型适应 * * * * * * * * 仅限检索 * * * 深度模型适应 * * * * * * * * * 仅限检索 * * * * * * 深度模型适应 * * * * * * * * | 可解释性 高(可以引用来源) 低(黑盒) | 最佳 * 知识密集型任务 * * 风格/形式适应 *

何时使用 Fine- Turning :

  • 您需要模型来学习 样式样式样式样式样式样式格式格式
  • 你有一个大而干净的数据集
  • 您需要模型内部化 模式模式而不是事实
  • 例如:让GPT像莎士比亚一样写作

何时使用 RAG :

  • 你需要 事实准确性 有引号的引号
  • 您的知识基础变化频繁
  • 您拥有私人/专有数据
  • 成本和简单问题
  • 实例:客户支持聊天室(我公司每周更换文件)

你能把两者结合起来吗? 是的 时尚优雅 事实优雅

RAG 相对于长内框窗口

现代LLMs拥有巨大的上下文窗口( GPT-4: 128K 表示牌, Claude: 200K 表示牌 ) 。 为什么不把您的文档全部丢入上下文?

长期问题:

  1. 成本成本成本成本成本:配有象征物的定价比例尺 - 每个查询10-100美元加在一起速度快
  2. 时间间隔:处理 100K 符号需要时间
  3. 迷失在中间:LLMM公司为在长期环境中使用信息而奋斗
  4. 稀释:相关信息被埋在噪音中
  5. 实际限制:你无法将整个公司的文件 与上下文相匹配

当长的上下文有意义时 :

  • 单大单文件(例如,分析合同)
  • 每件事都相关(无需过滤)
  • 成本与成本无关
  • 低查询量

当RAG有意义时:

  • 大型知识库(百万份文件)
  • 需要找到相关的子集
  • 高查询量(费用事项)
  • 实时更新知识

最佳做法: 使用 RAG 选择最相关的内容, 然后对该子集使用长上下文 。

RAG与RAG对RAG对RAG与RAG对RAG对RAG与RAG对RAG对RAG对RAG与RAG对RAG对RAG对RAG对RA对RAG对RA对RAG对RAG对RAG对RAA对RAG对RAG对RAG对RRA对RA对RAG对RA对RAG对RRA对RAG(以实例催促)

微小的提示(举例来说,提示)是一个简单的基线。

示例提示:

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是"自动发号施令"

混合搜索:RAG+传统搜索

您可以使用相互排名合并(RRF),将RAG与传统的全文搜索结合起来。

为什么是混血儿?

  • 语义搜索: 在概念匹配方面( “ 错误处理” 发现“ 例外管理 ” )
  • 关键词搜索: 精确的术语( “ 嵌入式合成 ” 、 “ 实体框架 ” )
  • 混合混合物:两个世界中最好的
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,从哪里来的, 以及它与替代品的对比, 这就是为什么它很重要的原因:

1. 大赦国际的民主化

  • 你不需要一万K的微调预算
  • 你不需要一个ML工程师团队
  • 任何开发者都可利用现有工具建立区域咨询组系统

2. 实际准确性

  • 幻觉是生产中LLMs的 #1问题
  • RAG 以真实文件作为回复依据解决它
  • 引文使它具有可审计性和可信赖性

3. 总是自上而下

  • 传统AI:培训一次,知识冻结
  • RAG: 立即更新文件, 更新知识
  • 快速移动领域(技术、新闻、条例)的关键

4. 隐私与控制

  • 数据保存在您的基础设施中
  • 可完全本地运行( 本地嵌入 + 本地 LLM + 本地矢量 DB)
  • 没有向 OpenAI 或其他云源提供者发送数据

5. 具有成本效益

  • 储存费用低廉(每英镑私人)
  • 内嵌是廉价的(违反每1 000份文件百分之一)
  • 比微调或长背景窗口便宜得多

6. 易变性应用

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

结论:从历史到实施

我们追踪了RAG的进化过程

  • 2010年之前:关键字搜索(字符,非意思)
  • 2010年s:阅读理解(需要正确通过)
  • 2017-2020:变形器和嵌入器(意指矢量)
  • 2020: 现代RAG(检索+生成)
  • 2023年至今: 生产标准(演练+成本+隐私)

第1部分的主要见解:

  • RAG 分离 知识储存 (矢量 DB) from 理由说明 (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM) (LLM)
  • 它解决幻觉的问题 通过在真实的文档中找到回应 解决幻觉问题
  • 比微调更便宜,更灵活
  • 对于大型知识库而言,它比长期知识库更管用
  • 基本上就是"在规模上自动发射几发信号"

三步心理模式:

  1. 将文字转换为数字(编组)
  2. 查找相似的数字( 矢量搜索)
  3. 使用您找到的( 向 LLM 播放或种子)

其它一切都是优化。

继续第2部分:建筑和内部

你现在明白了 什么什么是 RAG是, 为什么 它很重要,而且 何 地 但是它是如何在引擎盖下工作的呢?

内 **第2部分:RAG建筑和内部**我们深入探究技术细节:

完成的RAG输油管:

  • 第1阶段:指数化(文本提取、散列战略、嵌入生成、矢量储存)
  • 第2阶段:回收(挖掘嵌入、相似度指标、重新排位)
  • 第3阶段:产生(即期建造、LLM参数、后处理)

LLM 内部:

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

技术深潜:

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

继续第2部分:建筑和内部

在第二部分之后,你将准备参加第三部分, 在那里,我们建立真正的系统, 解决共同的挑战, 并探索先进的技术,如 HYDE, 多要求RAG, 和背景压缩。

资源资源资源 资源资源资源 资源资源 资源资源

基础文件:

进一步阅读:

本系列的下一个 :

继续到第2部分

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.