当前位置: 首页 > news >正文

向量数据库基础入门:RAG 与向量检索基础认知构建

向量数据库基础入门:RAG 与向量检索基础认知构建

📌 一、什么是 RAG?

**RAG(Retrieval-Augmented Generation)**是一种结合“信息检索”和“文本生成”的技术机制,核心目标是:

🔎 检索外部知识来增强大语言模型(LLM)的生成质量、上下文关联性与事实准确性。

换句话说,就是让 ChatGPT 这类大模型“不再闭门造车”,而是“先查资料,再回答问题”。

📍 传统大模型的局限:

问题描述
✅ 信息闭塞训练数据静态,无法获取最新内容
❌ 容易幻觉编出不存在的内容(hallucination)
🧱 私有知识注入难企业/个人文档无法嵌入模型权重
💰 模型训练成本高想更新知识只能再训练/微调

✅ RAG 的优势:

模块功能
检索模块(Retriever)从知识库找出与提问最相关的信息
生成模块(LLM)利用检索结果 + 问题生成答案
整体效果保留 LLM 语言能力 + 增加知识精度与更新能力

🧱 二、RAG 的结构框架与标准工作流程

向量数据库的结构

如图所示
在这里插入图片描述
这张图展示的是:

如何将经过深度学习模型编码的向量(向量化后的 chunk)写入 Qdrant,并如何支持多种查询方式(点积、欧几里得距离、余弦相似度)进行高效语义检索。

用户输入
Embedding模型
Qdrant向量库
向量相似度检索
拼接上下文 + PromptTemplate
生成回答

🧱 图中模块分解讲解
我们来按结构顺序,从左至右、从下至上拆解讲解:

  1. 底部:深度学习模型 + 数据来源
    数据来源:

.py files 表示 ML 工程师使用 Python 写的嵌入模型代码
Data 表示用来训练或推理的文本、图像、标签等

深度学习模型:

模型可以是嵌入模型(如 BERT、bge、E5)
输入的是文字或图像(如猫图、狗图)
输出的是一个固定长度的向量(比如 768维)

💡你可以理解为:这是将 chunk 转为向量的过程。

🟢 2. 中间:Points + Payload 存储结构
这一块是整个图的核心结构,构成了 Qdrant 中的“点集存储结构”(Points)。

每个向量点由三部分组成:

成员含义示例
idx向量的唯一索引"doc_001_chunk_01"
vector实际的嵌入向量[0.012, -0.293, ..., 0.087]
p / Payload该向量的元信息(非向量内容){"url":..., "color":"white"}

📘 Payload 是什么?
Payload 是非向量数据,但与向量关联:
类似于“标签 / 源信息 / 分类属性”
在 RAG 中经常用于:
来源文档 URL
文档类型(pdf/markdown)
主题类别(如“金融” / “医疗”)

🟢 3. 上方:多种相似度计算方式
Qdrant 支持三种检索方式:

距离计算方式含义应用场景
Euclidean Distance(欧几里得距离)基于直线距离距离越小越相似
Dot Product(点积)两个向量方向一致性高阶匹配任务
Cosine Similarity(余弦相似度)✅看向量夹角是否接近最常用于文本匹配

🟩 4. 右上角:Collections
Qdrant 允许你创建多个“集合”(collections):

每个 collection 可以理解为一个独立的向量表

比如:

collection_1: 产品知识库
collection_2: 技术手册库
collection_3: 用户反馈数据
你可以在 RAG 系统中根据业务拆分多个知识集合,提高检索效率。

🧑‍💻 5. 左侧:客户端调用方式
开发者可以用多种语言来操作 Qdrant 接口:

Python:最常见,用于 RAG 项目中配合 LangChain/LlamaIndex
Rust:Qdrant 原生语言
Go、TypeScript:也可用于服务端/前端集成
→ 在 RAG 系统中,通常是用 Python SDK 操作 Qdrant。

🧠 总结:这张图在 RAG 系统中的意义

功能对应图中内容作用
文档嵌入Deep Learning Model 输出 vector将 chunk 向量化
知识存储Qdrant 的 Points存储向量 + metadata
检索能力Cosine / Dot / Euclidean支持多方式相似度计算
数据管理Collections + Payload多集合 + 精细过滤
开发集成Python 等客户端用于构建 RAG 应用接口

RAG的工作流程

RAG 的核心目标是:

让大语言模型(LLM)具备“查资料再回答”的能力。

它结构上是两大部分协同:

模块功能常见工具
用户输入提供查询意图输入界面 / API
嵌入模型(Embedder)将用户输入转为向量(语义表示)OpenAI、bge、E5
向量数据库(Vector Store)存储所有文档向量,支持相似度检索FAISS、Qdrant
检索器(Retriever)从向量库中取 Top-k 最相关内容LangChain Retriever / LlamaIndex Retriever
Prompt 构建器把用户问题 + 检索内容拼成 LLM 的输入PromptTemplate
LLM(生成器)用 LLM 生成文本回答GPT-4、Claude、Moonshot
答案输出传给用户,支持附带来源UI、API 响应

📌 小提示:
有时候 RAG 也会加入一个 Reranker:对 Top-K 检索结果进行再排序,以提升精准度。

Chunk(文档切块)大小、检索 Top-K 个数、拼接上下文长度,这些都会影响最终效果。

三、向量检索机制详解(RAG 的底层引擎)

1️⃣ 什么是文本向量化(Embedding)?

嵌入模型将一段文本变成一个固定长度的高维向量:
“图神经网络是一种处理图结构数据的模型”-> [1,2,3]
🛠 常用嵌入模型:

模型优势是否开源
text-embedding-ada-002OpenAI 出品,泛用性强
bge-base-zh, bge-m3中文效果非常好
E5, GTE, Cohere-embed英文任务性能优

文本是如何被向量化的?(向量检索底层机制)

文本嵌入就是:将自然语言文本编码为一个向量(向量表示其语义特征)。

举例说明:
输入句子:“图神经网络可以用于社交网络分析”
输出向量:一个 768 维的浮点数组,比如:
[0.0231, -0.0452, 0.3164, …, -0.0017] # len = 768 or 1536

是句子还是词?——取决于模型类型

嵌入模型输入粒度输出向量代表
OpenAI text-embedding-ada-002整段文本(几句话也行)整体句向量
bge-base支持句子级句向量
E5支持问答分开训练(Query/Passage)Query 向量 + 文档向量匹配
Word2Vec、GloVe词级嵌入(token)每个词一个向量(过时)

💡 在 RAG 中:

一般是 对一个段落 / chunk 进行整体嵌入,输出一个句向量或段落向量,用来做语义检索匹配。

嵌入模型内部是如何做的?
虽然不同模型实现不同,但基本结构如下

文本 → 分词(Tokenizer)→ 转ID → 送入 Transformer → Pooling(平均/首位)→ 得到整体向量

详细流程(以 BERT 为例):
文本分词(tokenize):

“图神经网络可以用于社交网络分析”

→ [“图”, “神经”, “网络”, “可以”, “用于”, “社交”, “网络”, “分析”]

编码为 token ids,输入模型

输出多个 token 向量 → 做 Pooling:

[CLS] 向量(句首代表)或平均所有 token 向量

得到整句的语义向量:用于表示整个 chunk 的“意思”

RAG 中 embedding 应该如何做?

Chunk嵌入粒度推荐做法
一句话可以嵌入,但语义太少,不稳定
一段话(300~600字)✅ 最佳嵌入单元
一个页面太大,丢失重点,模型输入也受限

→ 所以常见做法是:

文档 → 按段切分成 chunk → 每个 chunk 嵌入 → 存入向量库

🔍 一个完整例子:embedding 到检索
文档片段(chunk):
“图神经网络是一种对图结构数据建模的方法,能用于社交网络中用户关系的表示与预测。”

用 bge-m3 模型对它做 embedding → 得到一个 1024维向量

用户输入问题:“怎么用 GNN 分析用户关系?”

把问题也做 embedding → 得一个 query 向量

然后计算 query 向量与所有 chunk 向量的相似度 → 取最相似的 Top-K 段作为 LLM 输入上下文

2️⃣ 什么是 Chunk?为什么要切分文档?

一个 100 页的 PDF 不能直接嵌入 → 要拆成小块(chunk)
每个 chunk 生成一个向量,存进向量数据库
检索时才好比对语义相似度

📐 Chunk 切分的关键点:

策略说明
固定长度切分每 500 字分一块,容易实现但有时割裂语义
滑动窗口有重叠区域,避免信息割裂(例如 500 长度 + 100 overlap)
按标题/段落切分更智能,适合结构化文本,如 Markdown、PDF

3️⃣ 什么是向量数据库?有什么用?

向量数据库(Vector Database)是用来存储所有向量化的 chunk,并能快速返回“与某个查询向量最相近的几个结果”。

📦 常见向量数据库:

名称优点部署方式
FAISS本地运行、轻量级、无依赖
Qdrant支持 Metadata 检索、API 友好
Milvus海量向量支持、企业级
Weaviate多模态扩展性好
PineconeSaaS 服务,免部署❌(收费)

4️⃣ 如何检索 Top-K 相似内容?
核心方法是:相似度计算(通常是余弦相似度
vec(q): 用户问题的向量
vec(v): 向量库中每个 chunk 的向量
Top-K:选出最相似的前 K 个 chunk 作为“候选知识”

四、从输入到输出:一次完整的 RAG 流程拆解(举例)

用户输入:“请解释图神经网络在社交网络分析中的作用”

✅ 系统执行过程:

🔍 嵌入模型将问题转为向量 q

📚 检索向量库,找到如下几个 chunk(知识段):

“图神经网络能在节点之间建模信息传播”

“在社交网络中,GNN 可用于推荐好友关系”

🧩 Prompt 拼接(简化示意):

【知识支持】

  1. 图神经网络能在节点之间建模信息传播。
  2. 在社交网络中,GNN 可用于推荐好友关系。

【用户问题】
请解释图神经网络在社交网络分析中的作用。

🤖 LLM 根据内容生成答案:

图神经网络(GNN)在社交网络分析中可建模用户之间的关系并进行推荐,如好友预测、群组划分等…

特征传统 IR + QA纯LLM✅ RAG
精度高,但模板化语言自然,但常幻觉高精度 + 高语言自然度
更新能力强,可换文档差,需要重训强,可更新文档库
灵活性较差
应用难度中高(但最值得)
http://www.dtcms.com/a/317846.html

相关文章:

  • 《C语言程序设计》笔记p9
  • LLM——浅谈 LangGraph 中断式工作流:构建一个可交互的问答流程
  • 4、docker数据卷管理命令 | docker volume
  • 【关于Java的对象】
  • vue3 el-dialog自定义实现拖拽、限制视口范围增加了拖拽位置持久化的功能
  • 实战教程:从“对象文件为空“到仓库重生——修复 Git 仓库损坏全记录
  • 大数据存储域——Hive数据仓库工具
  • STM32 APP跳转后无法进入中断
  • QT----不同线程中信号发送了槽函数没反应QObject::connect: Cannot queue arguments of typeXXX
  • C++编程语言:标准库:工具类(Bjarne Stroustrup)
  • Python赋能气象与气候数据分析的生态构建与实战路径
  • Linux中systemd与systemctl管理指南
  • LlaMA_Factory实战微调VL大模型
  • 【数据分享】西藏土壤类型数据库
  • AlphaEarth模型架构梳理及借鉴哪些深度学习领域方面的思想
  • [AI 生成] Spark 面试题
  • 【深度学习】Graph Transformer Networks(GTN,图变换网络)
  • Linux 中 Git 操作大全
  • 测试单节点elasticsearch配置存储压缩后的比率
  • cacti
  • 深入理解C++中的stack、queue和priority_queue
  • 部署 Zabbix 企业级分布式监控笔记
  • C语言高级编程技巧与最佳实践
  • 学习bug
  • R4周打卡——Pytorch实现 LSTM火灾预测
  • 人工智能——深度学习——认识Tensor
  • 工业禁区人员闯入识别准确率↑29%:陌讯动态融合算法实战解析
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘gensim’问题
  • 股票T0程序化交易,高频交易
  • 队列很多时,为什么RocketMQ比Kafka性能好?