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
RAG 解释来源和基本
Saturday, 22 November 2025
曾经搜索过“"”部署指南@"}(即使有)'}关于 “"”的一篇文章 有关“MS K4”和“生产”的文章 *"?“RAG @(Retrieval-“Auglied Pagement Generation+)”通过理解“,”来解决这个问题,而不只是关键字 •.}这一系列展示了RAG是如何在“hangle",}下如何工作的?
一. 导言导言 导言 导言 导言
📖系列导航 这是RAG ( -Retreival- -Auged Generation的“I)”系列中的“:”部分。
- RAG 起源和基本要点 @( @ this article\ )}#- @什么嵌入是@, @为什么它们重要?
- RAG 建筑和内部 @ -_ Chunking,}代号@,}矢量数据库
- 内容:3: 建立完整的RAG系统
- “4a :ONNX”“& Qdrant 履行” - CPU-友好语义搜索基金会
- 操作中的语义搜索 -typeahead,混合搜索@,和UI组件
- @ 5:_ 混合搜索@ MS K1\ 自动 @ MASK2 @ Indexing 生产一体化模式
- 6: 图表集 - 用于 proposal_- 水平理解的知识图表
RAG '}但这里的' *这技术开启了远不止于 AI talkbots.*的机遇。 它授权网站进行语义搜索 ,}内容建议=,}写作援助,}和知识管理
双重性 RAG 可以帮助客户 @(#Better search@,}准确解答 ) 或利用它们 {(} manipulate recommendation_,}埋藏负面评论 , 浮现高端内容). 区别在于 <'>}t the Technology—Qit's intá.}一个语义搜索来帮助用户找到他们真正需要的东西}MS K11 great}. 一个优先选择什么最能让你赚到钱,同时显示有助的<?《'》暗色版域=,}和它为什么理解这个方法如何管用
以下是RAGZ:的真相。 它听起来吓人 . 矢量嵌入?变异模型MS K2KPassesMSMK3,但和软件中的其他所有东西一样...
RAG分三步
- 将文字转换为数字 @ (\ embeddings@ MS K1\
- 查找相似的编号 @ ( vctor search@ MS K1
- 使用您找到的 & M(display 结果或种子到 LLM@ )}
剩下的是执行细节
本系列展示您如何建立使用 C# code@ .}无手动跳 . 没有假设. 只有碎片和它们是如何组合起来的\ .
你在这个系列中将学到什么?
- 本篇文章=)@: RAG是如何来的,为什么重要?
- 部分#2完整的技术架构和LLM内部
- 部分#3建立有代码示例的实时系统
后来的, I'L会教你如何建立完整的RAG系统,包括#:
- CPU-}使用 ONNX 嵌入器进行方便的语义搜索 (*Part *4) 部分内容
- 自定义Qdrant 托管的矢量数据库 (*Part *4) 部分内容
- 混合查找和自动索引 (*Part *5) 部分内容
什么是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 @ →}来查询相关文件@ MS K1LLM 答案
// 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): @% ""只要你关注""
- 能够理解背景的神经网络
- 其后的一切基础
{\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 比先前的型号更多@)}
- 显示的变压器可以处理大横交叉@ - @ 双语任务
真实的--世界性例子 @:_# 我的 神经机器翻译工具 当无法提供初级服务时,BART作为后备翻译模式用于初级服务@, 演示这些基于变压器的模型如何成为生产系统的实际构件_.
现代RAG的诞生
开创性纸"重新获取@ - @ 启动生成知识 < NLP 强化NLP任务 >由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成为关键
- 幻觉问题 RAG在真实的文档中做出回应 . *
- 知识关闭 “-”LMS 培训了有关“2021”数据的培训。“MS K2”T知道关于“2024”事件的情况;“MSC4”RAG使用当前文件=“MSKO5”
- 私人数据 @-@LMs can'}可以访问您的公司 ' 内部 docs=.* RAG canMPK4*
- 费用成本 -+Fine-+ZA调整LMs是昂贵的 @($10QQQK-100+KQ+).+RAG是便宜的#(+存储@++嵌入=).}
- 可解释性 @-_RAG可以引证来源@,}使其可审计和可信
今天 (2024-2025): RAG是生产AI系统的实际标准,需要准确性和可审计性 . 每一大AI公司都提供RAG工具*.}
RAG如何工作 : *大图片
在深入探究技术细节前,
三阶段
RAG系统分三个不同阶段运行
阶段=1: 索引=+(One_-时间设置@)
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
发生什么事了?
- 使用您的知识库@(docs,博客posts @,手册_)
- 分割成可控块 * @ (_ politices\ MS K1}区域@ )*
- 将每个块转换为矢量嵌入的“% (” 数数中的矢量@)
- 将矢量存储在为相似搜索而优化的数据库中
密钥概念@: @% 类似的含义产生相似的矢量@,,所以 @"#docker contracting"和{"acontainerization popolitium_"最终在矢量空间*.中紧密相连。
阶段“2:检索” “(每个查询”“MSSK2”
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
发生什么事了?
- 用户问问题
- 将问题转换为用于索引的矢量 {(}%same 模式
- 在数据库中查找最相似的矢量
- 返回上方 K 最相关的块@ ( @ 通常为\ 3-10)} *
为什么它的工作原理": “"”“我如何部署集装箱? ”“?"”“ @(Qquery)”在语义上类似于多克部署的块块?”“,”“即使字词不尽相同,“MS K5”也是一样的。
阶段: 3: 一代: I( 每个问题:
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
发生什么事了?
- 选择用户@' @%s 问题
- 取回的上下文块
- 构造一个即时Q: @ "_ profilen this con上下文@ MS K2 回答这个问题 @ MPK3}
- 发送到 LLM 生成
- 法学硕士根据所提供的背景提供答案
神奇的魔力 它只能合成和解释 '提供的东西
简单示例
让'通过系统追踪查询@:
用户询问@: @% “"”我如何使用多克作曲“?"”?
步骤 @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_).}为何不把你的文档全部丢入上下文□?
长期问题
- 费用成本@ : 标语尺的标定比例, 每个查询加起来都快
- 时间间隔@ :_ 正在处理 *\ MPK1} K 神令需要时间
- 迷失在中间:LMs在长期环境中努力使用信息。
- 稀释相关信息被埋在噪音中
- 实际限制: 您可以在上下文中适合您的整个公司@'}♪ 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=")#
- 混合混合物最好的两个世界
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)
- 它解决幻觉问题, 以真实文件为基础回应
- 它比精细更便宜 灵活 比微小
- 对于大型知识库而言,它比长长的环境范围更管用
- 它基本上在“"” 自动数@-}发号施令
三个-精神模式 :
- 将文字转换为数字 @ (\ embeddings@ MS K1\
- 查找相似的编号 @ ( vctor search@ MS K1
- 使用您找到的“ (” display 或 feed to LLM @ MS K1 ” 的内容
其它一切都是优化... .......
继续分割 & 2: @ 建筑和内部
你现在明白了 什么什么是 RAG 是, 为什么 这很重要 ,和 何处 它来自. 但是它是如何实际工作 在HANZ?}
内 **RAG 建筑和内部**我们深入探究技术细节 :
完整RAG输油管:
- 集成策略 @,}嵌入生成器,矢量存储@)
- 阶段 2: retregevval @(Qquery 嵌入@,}相似的度量=%,重新排位=)
- 阶段性 3: 新一代 ( 快速建筑 MS K2 LLM参数 MSKO3 后期- product)
内部LLM=:
- 什么是象征物,它们为什么对RAG很重要?
- KV 缓存:}LLMs如何记住上下文
- 上下文窗口和象征性管理战略
- 优化区域咨询组的象征性效率和成本
技术深层潜水 :
- 矢量数据库和相似性搜索算法
- 嵌入模式和正常化
- 保持环境的启动战略
- C#中实用代码示例
在“2,”部分之后,您% '将准备加入“ I3,”部分。 我们在此构建真正的系统@,解决共同的挑战 @,并探索诸如 HyDE},多-Qquery RAGMS K7和上下文压缩.等先进技术
资源资源资源 资源和资源资源资源
基础文件
- 重新获取@ - @ 启动生成知识 < NLP 强化NLP任务 > 原始的RAG文件
- 用于 OpenQ- @Domay 问答的高级通道检索器 -DPR(retrieval基础
- 你们需要的注意力 -+#变换器 @(_加入基金会@)}
继续读取@: @%
- 神经机器翻译如何工作 理解嵌入后的AI模式
此序列中的下一集 @ : @