【第四章:大模型(LLM)】11.LLM + RAG:构建私有领域专家-(2)Sentence Embedding/ Vector Database
·
第四章:大模型(LLM)
第十一部分:LLM + RAG:构建私有领域专家
第二节:Sentence Embedding/ Vector Database
1️⃣ Sentence Embedding —— 句向量表示
(1)概念
Sentence Embedding 是将一句话或一段文本编码为 固定维度的向量表示。
-
不同语义的文本 → 映射到向量空间的远处。
-
语义相近的文本 → 向量距离更近。
作用:
-
语义搜索
-
相似度计算
-
向量检索(RAG 的核心)
-
文本聚类 / 分类
(2)常用中文 Sentence Embedding 模型
| 模型 | 特点 | 适用场景 |
|---|---|---|
| OpenAI text-embedding-3-large | 英文、跨语言效果好,API 稳定 | 通用搜索、跨语言场景 |
| BAAI/bge 系列 | 中文表现优异,开源可商用 | 中文语义搜索、RAG |
| m3e (Massive Mixed Embedding) | 中英双语,轻量高效 | 中小规模检索 |
| GTE-large | 中文优化,参数量较小 | 嵌入式应用 |
👉 示例代码:
from sentence_transformers import SentenceTransformer
# 加载中文向量模型
model = SentenceTransformer("BAAI/bge-large-zh")
sentences = ["合同法第十条的规定", "合同法第十条的内容是什么?"]
embeddings = model.encode(sentences, normalize_embeddings=True)
print(embeddings.shape) # (2, 1024) 向量维度 1024
2️⃣ Vector Database —— 向量数据库
(1)为什么需要向量数据库?
在 RAG 中,我们可能有 百万级文档。
每次检索时,需要在 向量集合 里找到与 Query 最近的 Top-K。
如果只用暴力搜索,复杂度是 O(N),效率太低。
向量数据库通过 高效索引结构(ANN: Approximate Nearest Neighbor) 提供快速检索。
(2)常见的向量数据库
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| FAISS (Facebook AI) | 开源,轻量,支持本地部署 | 个人实验 / 小型应用 |
| Milvus | 云原生、分布式,支持亿级规模 | 企业级应用 |
| Weaviate | 支持 Graph + 向量检索,RESTful API | 知识图谱 + RAG |
| Pinecone | SaaS 服务,免维护 | 快速上线、无运维场景 |
(3)基本操作流程
-
文本切分:长文档切分为小片段。
-
向量化:用 Sentence Embedding 将片段转为向量。
-
存储:将向量存入向量数据库。
-
查询:用户输入 Query → 向量化 → 检索最相似文档。
-
RAG增强:将检索结果拼接到 Prompt 里送入 LLM。
(4)代码示例:使用 FAISS
import faiss
import numpy as np
from sentence_transformers import SentenceTransformer
# 1. 向量化
model = SentenceTransformer("BAAI/bge-small-zh")
docs = ["合同法第十条", "买卖合同", "劳动合同法"]
embeddings = model.encode(docs, normalize_embeddings=True)
# 2. 建立索引
dim = embeddings.shape[1] # 向量维度
index = faiss.IndexFlatL2(dim)
index.add(np.array(embeddings)) # 加入向量库
# 3. 查询
query = "合同法的规定"
q_vec = model.encode([query], normalize_embeddings=True)
D, I = index.search(np.array(q_vec), k=2)
print("相似文档索引:", I)
print("相似文档内容:", [docs[i] for i in I[0]])
3️⃣ Sentence Embedding + Vector DB 在 RAG 中的作用
-
Sentence Embedding → 将文本与 Query 映射到同一语义空间。
-
Vector Database → 提供高效的相似度检索。
-
结合 LLM → 构成 RAG Pipeline,使模型能基于外部知识生成答案。
公式化:
Answer = LLM( Prompt(Query + Retrieve(VectorDB, Embedding(Query))) )
4️⃣ 小结
-
Sentence Embedding 负责文本语义表示。
-
Vector Database 负责大规模存储和高效检索。
-
它们是 RAG 的 底层支撑,相当于“大模型的外部记忆”。
-
常见组合:
-
BGE + FAISS(个人/小团队实验)
-
OpenAI Embedding + Pinecone(快速上线)
-
BGE + Milvus(企业级应用)
-
更多推荐



所有评论(0)