曾经搜索过“ 部署指南 ” , 却一无所获, 即使有一篇关于“ 出版到生产” 的文章。 RAG(检索到启动的一代)通过理解意义解决了这个问题, 而不仅仅是关键词。 这个系列展示了RAG是如何形成的, 它是如何在引擎盖下运行的, 以及如何建立生产系统。 从语义搜索到 AI-hower {A 和引文-所有C# 工作代码示例 。
系列导航: 这是RAG(回收-提款一代)系列的第一部分:
RAG(检索-启动一代)的开发是为了让AI更聪明、更聪明的LLMs获得他们没有接受过培训的信息。但有趣的是:这种技术开辟的机会远远超出AI聊天室。它授权在网站、内容建议、写作协助和知识管理上进行语义搜索。
双重性质: RAG可以帮助客户(更好地搜索,准确的引用回答)或利用这些工具(操纵性建议,掩埋负面评论,浮出水面的上层内容 ) 。 区别不是技术 — — 它的用意。 有助于用户找到他们真正需要的东西的语义搜索? 很好。 一个在显示帮助的同时优先关注什么能让你最有钱的人? 这是一个黑暗的图案范围,它为什么理解这如何起作用。
以下是关于RAG的真相: 这听起来很吓人。 病媒嵌入器? 变异模型? 变异模型? KV 缓存? 但是和软件中的其他所有东西一样, 它只是理解它是如何运作的。 你不需要了解变异器结构背后的数学, 而不是你需要理解组装来写 C# 。
RAG分三个步骤:
就是这样 剩下的是执行细节
这个系列展示您如何建立使用 C# 代码的 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以数十年的搜索和NLP研究为基础,了解这一历史有助于理解为什么RAG是设计成这样,以及它解决了哪些问题。
基于关键字的搜索 :
问题: 相匹配的 字符字符字符字符,而不是 意思。 搜索“ 集装箱管弦” , 除非有准确的字眼, 否则您找不到“ 鸟鼠摇篮 ” 。 它们可以处理打字, 但不能处理语义学 。
华生(IBM,2011年):
阅读理解模型:
变形器(2017年): ""只要你关注" "只要你需要关注""
BERT(2018年):
GPT-2/3(2019/2020):
高浓度病媒代表:
BART(脸书AI,2019年10月):
M2M-100(AI,2020年10月,脸书):
真实世界实例: 我的 神经机器翻译工具 在没有初级服务时,作为后备翻译模式使用BART, 说明这些以变压器为基础的模型如何成为生产系统的实际构件。
开创性文件 "知识密集 NLP 任务检索支持生成" Patrick Lewis等人(脸书AI Research)正式推出RAG,
两者的结合:
结果: RAG系统的业绩远远超过了知识密集型任务方面更大的模型,同时提高了效率,更新了最新数据。 你可以更新知识库,而不对模型进行再培训。
查特、GPT-4、GPT-4和Claude使RAG成为关键:
今日(2024-2025年): ARG是生产AI系统需要准确性和可审计性的实际标准,每一大AI公司都提供RAG工具。
在深入探讨技术细节(我们将在第二部分中讨论)之前, 让我们先了解高层次的工作流程。
区域咨询组系统分三个不同阶段运作:
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
会发生什么:
关键概念: 类似的含义产生类似的矢量, 所以“ 笼子容器” 和“ 集装箱平台” 最终在矢量空间 紧密相连。
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
会发生什么:
为什么它起作用: “我如何部署集装箱?” (query)在语义上与关于Docker部署的块块相似,
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
会发生什么:
魔法: 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]..."
结果: 准确答复,暗含引用文件。
了解何时(和何时不)使用限制令需要将其与替代品进行比较。
|--------|-----|-------------| | 知识更新 需要再培训 | 成本成本成本成本成本 低(存储+嵌入) 高(GPU培训时间) | 准确性 来源来源 致幻 | 自定义 * 限于检索 * 深度模型适应 * * * * 仅限于检索 * * 深度模型适应 * * * 仅限于检索 * * 深度模型适应 * * * 仅限于检索 * * 深度模型适应 * * * 仅限检索 * * 仅限检索 * * 深度模型适应 * * * * 仅限检索 * * 深度模型适应 * * * * 仅限检索 * * 深度模型适应 * * * * * * 仅限检索 * * * 深度模型适应 * * * * * * * * 仅限检索 * * * 深度模型适应 * * * * * * * * * 仅限检索 * * * * * * 深度模型适应 * * * * * * * * | 可解释性 高(可以引用来源) 低(黑盒) | 最佳 * 知识密集型任务 * * 风格/形式适应 *
何时使用 Fine- Turning :
何时使用 RAG :
你能把两者结合起来吗? 是的 时尚优雅 事实优雅
现代LLMs拥有巨大的上下文窗口( GPT-4: 128K 表示牌, Claude: 200K 表示牌 ) 。 为什么不把您的文档全部丢入上下文?
长期问题:
当长的上下文有意义时 :
当RAG有意义时:
最佳做法: 使用 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 改进 :
你可以认为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,从哪里来的, 以及它与替代品的对比, 这就是为什么它很重要的原因:
1. 大赦国际的民主化
2. 实际准确性
3. 总是自上而下
4. 隐私与控制
5. 具有成本效益
6. 易变性应用
我们追踪了RAG的进化过程
第1部分的主要见解:
三步心理模式:
其它一切都是优化。
你现在明白了 什么什么是 RAG是, 为什么 它很重要,而且 何 地 但是它是如何在引擎盖下工作的呢?
内 **第2部分:RAG建筑和内部**我们深入探究技术细节:
完成的RAG输油管:
LLM 内部:
技术深潜:
在第二部分之后,你将准备参加第三部分, 在那里,我们建立真正的系统, 解决共同的挑战, 并探索先进的技术,如 HYDE, 多要求RAG, 和背景压缩。
基础文件:
进一步阅读:
本系列的下一个 :
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.