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

RAG 的基石:文本嵌入模型与向量数据库

前言

为什么 RAG 离不开 Embedding 与向量数据库?

在上一篇文章中,我们已经讲过:
RAG(Retrieval-Augmented Generation)本质上是“先找资料,再让大模型回答问题”

而“找资料”这一步,背后最关键的两个基础设施就是:

  • 文本嵌入模型(Embedding Model)
  • 向量数据库(Vector Database)

如果说大语言模型(LLM)是 RAG 的“大脑”,
那么Embedding 是把语言变成大脑能理解的数学信号
向量数据库则是 RAG 的“长期记忆系统”

这一篇,我们就从最底层出发,把这两块彻底讲透。

一、文本嵌入模型:连接文本与向量的桥梁

1. 什么是 Embedding?

Embedding(嵌入),本质是一种映射关系

把「人类语言」映射成「高维向量空间中的一个点」

举个最直观的例子:

假设我们有三句话:

  • 「小猫在睡觉」
  • 「小狗在玩球」
  • 「量子力学中的薛定谔方程」

Embedding 模型会把它们变成类似这样的向量:

小猫在睡觉 → [0.21, 0.87, 0.12, ..., 0.44] 小狗在玩球 → [0.19, 0.82, 0.15, ..., 0.41] 薛定谔方程 → [0.91, 0.02, 0.77, ..., 0.03]

关键不在于数值本身,而在于向量之间的“距离”

  • 「小猫」和「小狗」的向量距离更近
  • 它们和「量子力学」的向量距离更远

Embedding 把“语义相似性”转化成“几何距离”

2. 用“小猫 / 小狗”理解向量空间

可以把 embedding 空间想象成一个巨大的多维空间:

  • 相似语义 → 空间中距离近
  • 不相关语义 → 空间中距离远

比如在一个简化的二维示意中:

动物 ▲ | 小猫 ● ● 小狗 | | ● 量子力学

在真实系统中,这个空间往往是768 / 1024 / 1536 维
但原理完全一致。

3. Embedding 的本质:给语言编码

Embedding 并不是“理解语言”,而是:

为语言建立一种可计算、可比较的数学表示

它解决了一个根本问题:

机器不懂“意思”
机器可以比较“向量距离”

这正是 RAG 能成立的前提。

二、Embedding 工程:不只是“调接口”

1. Embedding ≠ 一行 API 调用

很多教程会给出类似代码:

embeddings = embedding_model.embed_query("什么是 RAG?")

但在真实系统中,Embedding 是一个工程问题,而不是 API 问题。

Embedding 工程通常包括:

  1. 文本切分(Chunking)
  2. 清洗与规范化
  3. 批量嵌入
  4. 版本管理
  5. 向量一致性问题

2. 为什么要切分文本?

Embedding 模型通常有最大 Token 限制,但更重要的是语义密度问题。

对一篇长文直接做 embedding 会导致:

  • 一个向量包含太多语义
  • 相似度检索不精准

实践经验:

  • 技术文档:300~800 tokens
  • 对话/FAQ:一个问题一个 chunk
  • 代码文档:按函数 / 类拆分

3. 主流 Embedding 模型的演进

Embedding 模型的演进大致经历了三个阶段:

传统 NLP 向量
  • TF-IDF
  • Word2Vec / GloVe

无法理解上下文,效果有限

句向量模型(Sentence Embedding)
  • Sentence-BERT
  • Universal Sentence Encoder

开始具备语义能力

大模型时代的 Embedding
  • OpenAI text-embedding-3-large
  • BGE / E5 / GTE 系列
  • 多语言 / 指令微调 embedding

当前 RAG 的主流选择

三、LangChain 中的 Embedding 实践

1. Embedding 接口设计思想

LangChain 并不关心你用的是哪家模型,它只定义了一个统一接口:

from langchain.embeddings import OpenAIEmbeddings embedding = OpenAIEmbeddings() vector = embedding.embed_query("RAG 是什么?")

核心抽象只有两个方法:

  • embed_query:用于用户查询
  • embed_documents:用于知识库文本

2. 一个完整的 Embedding 流程示例

from langchain.embeddings import OpenAIEmbeddings from langchain.text_splitter import RecursiveCharacterTextSplitter docs = load_documents() splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50 ) chunks = splitter.split_documents(docs) embedding = OpenAIEmbeddings() vectors = embedding.embed_documents([c.page_content for c in chunks])

这一步的产出是:

一组文本 + 一组向量

接下来,就轮到向量数据库登场了。

四、向量数据库:RAG 的记忆基石

1. 什么是向量数据库?

向量数据库是一种专门为向量相似度检索设计的数据库

它的核心能力只有一件事:

给定一个向量,快速找到最相似的 K 个向量

这正是 RAG 中「检索」阶段的核心能力。

2. 向量数据库 vs 传统数据库

对比维度传统数据库向量数据库
查询方式精确匹配相似度搜索
索引结构B+TreeANN / HNSW
数据类型标量高维向量
典型场景OLTP语义检索

RAG 场景中,传统数据库完全不适用

3. 相似性检索算法基础

欧式距离(L2)
distance = √Σ(xᵢ - yᵢ)²
  • 距离越小 → 越相似
  • 适合未归一化向量
余弦相似度(Cosine Similarity)
cos(θ) = (A·B) / (|A||B|)
  • 更关注方向而非长度
  • Embedding 场景最常用

4. 为什么不用全量扫描?

假设你有 100 万条向量,每条 1536 维:

  • 全量计算相似度 → 性能灾难

因此向量数据库几乎都使用:

  • 近似最近邻(ANN)
  • HNSW / IVF / PQ 等索引结构

牺牲一点精度,换取数量级的性能提升

五、Embedding + 向量数据库 = RAG 的地基

将前面的内容串起来:

  • 文档 → 切分 → Embedding
  • 向量 → 存入向量数据库
  • 用户问题 → Embedding
  • 向量检索 → TopK 文档
  • 构建 Prompt → 交给 LLM

这套链路中:

  • Embedding 决定能不能找对
  • 向量数据库决定找得快不快

总结

Embedding:把语言转成可计算的向量表示

向量数据库:为 RAG 提供高效、可扩展的语义检索能力

RAG 的效果上限,往往取决于这两块的设计质量

http://www.jsqmd.com/news/117917/

相关文章:

  • Excalidraw A/B测试框架:优化用户体验路径
  • 59、Windows 10安装与升级全攻略
  • 第二十二课 专属你的小说智能问答助手
  • 从想法到图表只需10秒:Excalidraw AI指令大全
  • 60、Windows 10 使用指南:安装、功能变化与快捷键大全
  • CodeXGLUE:代码智能的基准测试与评估框架
  • Excalidraw在OKR制定中的创新应用
  • XPath 运算符
  • 操作符的使用
  • Excalidraw版本控制机制:轻松回溯历史修改记录
  • Excalidraw与Notion集成:打造一体化知识管理系统
  • Day43 图像数据与显存
  • Excalidraw文字识别优化:AI自动美化潦草笔记
  • Excalidraw文件导入导出:完美兼容主流格式
  • Cursor(智能AI代码生成工具)
  • Excalidraw热键大全:高手都是这样快速操作的
  • 梅州/揭阳/汕头/潮州景区商业美食街区美陈氛围整体升级设计公司
  • 电子烟如何实现口感一致——恒功率控制模式可以告诉你答案
  • Excalidraw社区精选:最受欢迎的10个AI绘图模板分享
  • 一键生成流程图?Excalidraw+NLP模型实战教学
  • Excalidraw AI模型调优:降低token消耗提升准确性
  • 解决SSHD的Thread Thread-2 threw exception: java.lang.IllegalStateException: Executor has been shut down
  • 23、Windows 10 控制面板定制指南
  • 放置封神四神 无限代金券买断
  • MySQL Buffer Pool终极揭秘:缓存页淘汰与刷盘的完整机制
  • Excalidraw进阶玩法:结合大模型API自动生成UI草图
  • 24、Windows 10 个性化设置与升级全攻略
  • 超轻量级开源白板Excalidraw,竟支持AI文本转图表
  • Excalidraw模板库分享:拿来即用的技术图表示例
  • Excalidraw黑暗模式体验:长时间使用更护眼