ai-11-RAG 知识库工作原理、工作流程

在线工具Online FlowChart & Diagrams Editor - Mermaid Live Editor
来源:CherryStudio 知识库搭建保姆级教程与api接入_cherry studio 知识库-CSDN博客

💡 关键点

  • EmbeddingModel 是"翻译"角色:同一个模型必须同时用于文档和问题的向量化,否则向量不在同一语义空间,无法比较。
  • VectorDB 是"检索"角色:不只是存,还要能快速查。普通数据库做不了高维向量的相似度搜索(计算量太大),所以需要专门的向量数据库。
  • 存储的是"向量+元数据":VectorDB 不仅存向量数组,还存对应的原始文本、文档来源、页码等信息,便于后续展示引用来源。
RAG 知识库工作原理
ai-检索增强生成RAG知识库工作原理与数据流转过程
ai-检索增强生成RAG 的数据流转过程
ai_RAG数据存储-数据流转关系图
知识库搭建执行流程2

向量库(VectorDB)与传统数据库的对比

这是个很好的问题!VectorDB 不完全像 MySQL 或 MongoDB,但在某些层面又有相似之处。我用一个表格帮你快速看清:

📊 核心对比

维度 MySQL MongoDB VectorDB(如 Milvus)
数据模型 结构化表格(行+列) JSON 文档(BSON) 向量数组 + 标量字段
存储内容 数字、字符串、日期等 嵌套 JSON 对象 高维向量(如 [0.12, -0.34, ...])+ 元数据
查询方式 SQL(精确匹配、范围查询) MongoDB Query API 向量相似度搜索(ANN 检索)
核心能力 精确查询、事务、关联查询 灵活 Schema、水平扩展 语义搜索、推荐、RAG
索引类型 B-Tree、Hash、全文索引 B-Tree、地理空间索引 HNSW、IVF、PQ(专为向量设计)
距离计算 不支持 不支持 余弦相似度、欧氏距离、内积

🔍 更直观的对比示例

MySQL 的查询

-- 精确查询:找到 age=25 的用户
SELECT * FROM users WHERE age = 25;

MongoDB 的查询

// 精确查询:找到 name="张三" 的文档
db.users.find({ name: "张三" });

VectorDB 的查询

# 语义搜索:找到与 "什么是RAG" 最相似的文本块
results = vector_db.search(
    query_vector=[0.12, -0.34, 0.56, ...],  # 问题向量
    top_k=5,                                  # 返回最相似的5个
    metric="cosine"                           # 用余弦相似度计算
)
# 返回:最相关的文档块(不是完全匹配,而是语义相近)

💡 关键区别

对比维度 传统 DB(MySQL/MongoDB) VectorDB
匹配逻辑 精确匹配(=、LIKE、范围) 模糊匹配(按相似度排序)
查询条件 "年龄 = 25" "和'什么是RAG'语义最像的"
返回结果 精确命中(有或无) Top-K 最相似(永远有返回)
数据结构 固定 Schema / 灵活 Schema 固定维度向量 + 可变元数据

🏗️ 实际存储示例

// MySQL 的一条记录
{
  "id": 1,
  "title": "RAG介绍",
  "content": "RAG是检索增强生成...",
  "create_time": "2026-08-14"
}

// MongoDB 的一条文档
{
  "_id": ObjectId("..."),
  "title": "RAG介绍",
  "content": "RAG是检索增强生成...",
  "tags": ["AI", "LLM"]
}

// VectorDB 的一条记录
{
  "id": "vec_001",
  "vector": [0.12, -0.34, 0.56, 0.78, -0.21, ...], // 768维向量
  "metadata": {
    "text": "RAG是检索增强生成...",
    "source": "rag_guide.pdf",
    "page": 3
  }
}

🎯 用一句话总结

数据库 一句话类比
MySQL 像 Excel 表格,擅长精确查询和关系管理
MongoDB 像 JSON 文件夹,擅长存储灵活结构的文档
VectorDB 图书馆按语义找书,你描述一个概念,它给你最相关的书

🔗 实际应用中的组合

在实际 RAG 系统中,这三者不是互斥的,而是配合使用

┌────────────────────────────────────────────────────────┐
│  MySQL / MongoDB                                      │
│  ├── 存储用户信息、文档元数据(标题、作者、上传时间)   │
│  └── 管理业务逻辑(权限、计费、日志)                  │
└────────────────────────────────────────────────────────┘
                          ↓ 关联
┌────────────────────────────────────────────────────────┐
│  VectorDB                                             │
│  ├── 存储文档的向量 + 元数据引用(如 document_id)    │
│  └── 执行相似度搜索,返回最相关的文档块               │
└────────────────────────────────────────────────────────┘

举例:用户问"RAG是什么" → VectorDB 返回 top-5 相关文本块 → Application 用这些块 + 用户问题组装 Prompt → LLM 生成答案 → 同时从 MySQL 查出这些文档的原始信息(作者、来源),标注引用。


如果还想了解 VectorDB 的索引原理(HNSW 为什么快)如何选择适合的 VectorDB 产品,随时告诉我!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容