从文档到答案:RAG 工作原理
Source: Dev.to
RAG 索引
索引阶段将原始文档转换为结构化的向量表示,以便后续使用相似度搜索高效检索。

1) 文档摄取与预处理
第一步从摄取、清洗并将数据转换为合适的格式开始。这涉及将原始数据从 Bronze 层转化到 Gold 层。
RAW DATA
INTRODUCTION TO DATA SCIENCE!!!
• DATA is everywhere in today's world
• MACHINE learning helps in prediction
• tools like PYTHON , R , SQL are used
AFTER PREPROCESSING AND NORMALISATION
Section: Introduction to Data Science
Content: Data is everywhere in today's world. Machine learning helps in prediction. Tools like Python, R, and SQL are used.
2) 切块(Chunking)
切块指将大段文本拆分为更小的片段,以便计算机更有效地理解和搜索。
常见的切块策略包括按以下方式拆分:
- 主题
- 标题
- 段落
- 使用分隔符(如
\n\n和.)的递归模式
查看更多关于 chunking strategies 的信息。
每个块会附带元数据,如 chunk_id、chunk_index 等。对于大规模数据,元数据可以保存为 JSON 或 Parquet 文件。
示例 chunk.json
[
{
"chunk_id": "ml_intro_chunk_0001",
"chunk_index": 0,
"doc_id": "machine_learning_basics",
"section": "Introduction to Machine Learning",
"content": "What is AI, Types of Algorithms",
"page_start": 1,
"page_end": 1,
"char_start": 0,
"word_count": 6,
"language": "en"
}
]
3) 向量化(Embeddings)
真正的核心在这里:所有数据都会被转换为数字,以便计算机理解其含义。
举例来说,将句子 “The dog and cat are friends” 嵌入到 3 维空间:

在实际应用中,向量拥有数千个维度。嵌入完成后,每个文档块都会成为存储在 向量数据库 中的 向量嵌入,从而完成索引阶段。
RAG 查询
当用户提交查询时,首先使用与索引时相同的模型将其转换为嵌入。检索到的结果随后传递给 LLM 进行输出生成和推理。

步骤 1:将用户查询转换为嵌入
用户查询使用创建文档嵌入的同一模型转换为向量嵌入。
步骤 2:相似度搜索
查询向量与向量数据库中所有存储的文档向量进行比较。使用余弦相似度,系统选取相似度最高的前 k 个块并将它们转发给 LLM。
示例
用户提问:“算法有哪些类型?”
系统将查询向量与存储的块进行比较,例如:
- 什么是 AI
- 算法的类型
- 计算机历史
块 算法的类型 获得最高相似度分数,并被传递给 LLM。
步骤 3:LLM 响应生成
LLM 接收:
- 原始用户查询
- 检索到的文档块(如果有)
它将检索到的内容附加到查询上下文中,并生成最终答案。
我正在一步步学习 RAG 和 Agentic AI。如果这帮助你更好地理解了整个流程,欢迎点赞或关注,我会继续分享我的学习之旅。