第四章:大模型(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
PineconeSaaS 服务,免维护快速上线、无运维场景

(3)基本操作流程

  1. 文本切分:长文档切分为小片段。

  2. 向量化:用 Sentence Embedding 将片段转为向量。

  3. 存储:将向量存入向量数据库。

  4. 查询:用户输入 Query → 向量化 → 检索最相似文档。

  5. 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(企业级应用)

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐