AI开发-python-milvus向量数据库(AI开发-python-langchain框架(3-1向量化) )

之前讲了milvus向量数据库如何使用,但是如何把文本信息转成向量?这个问题一直没有讲,今天就讲讲,这是构建RAG关键的一步,咱们使用all-MiniLM-L6-v2本地模型将文本转成向量。

为什么用它最直接的原因是免费还好用,调用各大平台的向量模型是要收费的,所以使用本地化向量模型从部署到使用都是免费的。

all-MiniLM-L6-v2Sentence-BERT(SBERT) 系列中最经典、最常用的轻量级文本嵌入模型,核心作用和特点如下:

1. 核心功能:文本→向量的 "语义转换器"

该模型的核心作用是 将任意长度的文本(句子 / 短语 / 短段落)转换为固定维度(384 维)的稠密向量(也叫嵌入向量 / Embedding),且转换后的向量具备以下关键特性:

  • 语义关联性:语义相似的文本,生成的向量在向量空间中的距离也更近(比如 "猫抓老鼠" 和 "猫咪捉老鼠" 的向量相似度极高);
  • 数值归一化:输出向量默认做了 L2 归一化,可直接用于余弦相似度计算;
  • 多语言兼容:对中文、英文等主流语言都有较好的语义捕捉能力(无需额外适配)。

2. 典型应用场景(为什么这个模型被广泛使用)

表格

应用场景 具体作用
文本相似度计算 计算两个句子的余弦相似度,用于查重、语义匹配(如问答匹配、文本聚类)
向量检索(RAG 核心) 将文本向量存入向量数据库(如 FAISS/Milvus),实现 "语义检索"(而非关键词检索)
文本分类 / 聚类 用生成的向量作为特征输入,训练轻量级分类器(如情感分析、意图识别)
大模型 RAG 增强 作为 RAG(检索增强生成)的核心组件,将用户问题和知识库文本转为向量,实现精准检索

3. 模型的核心优势(为什么选它而非其他模型)

  • 轻量级:模型体积小(约 800MB)、推理速度快,适合本地部署或低算力场景;
  • 效果均衡:在 "速度 - 效果" 权衡中表现最优,384 维向量既保证语义信息量,又避免维度爆炸;
  • 易用性:通过 SentenceTransformer 库可一键加载,无需手动处理分词、模型微调等复杂步骤;
  • 开源免费:基于 MIT 协议,可商用,无版权限制。

4. 补充说明

  • 该模型的输出维度固定为 384 维,是 MiniLM 系列(简化版 BERT)的优化版本;
  • 若需要更高的语义精度,可选择all-mpnet-base-v2(768 维,效果更好但体积更大);
  • 若需要更低的算力消耗,可选择all-MiniLM-L4-v2(384 维,推理更快)。

看看代码部分

复制代码
# 导入SentenceTransformer库,该库专门用于加载和使用预训练的句子/文本嵌入模型
from sentence_transformers import SentenceTransformer

# ===================== 核心配置 =====================
# 本地模型文件的存储路径(需确保该路径下有完整的all-MiniLM-L6-v2模型文件)
model_path = "D:\\pythonProject2024\\pythonProject\\modelTest\\model\\all-MiniLM-L6-v2"

# ===================== 模型加载 =====================
# 加载本地预训练的all-MiniLM-L6-v2模型
# 该模型是轻量级的句子嵌入模型,核心用于将文本转换为固定维度的向量表示
model = SentenceTransformer(model_path)

# ===================== 示例文本 =====================
# 待生成向量嵌入的示例文本列表(支持多语言,中文/英文均可)
sentences = [
    "这是第一个示例句子",
    "这是第二个示例句子",
    "Hello, how are you?"
]

# ===================== 生成向量嵌入 =====================
# 调用模型的encode方法,将文本列表转换为向量嵌入
# encode方法会自动完成文本预处理(分词、归一化)→ 模型推理 → 向量归一化的全流程
embeddings = model.encode(sentences)

# ===================== 结果输出 =====================
# 打印向量维度:all-MiniLM-L6-v2固定输出384维向量
print(f"向量维度: {embeddings.shape[1]}")  # 输出: 向量维度: 384

# 遍历打印每个句子的向量(仅显示前5个元素,避免输出过长)
for i, embedding in enumerate(embeddings):
    print(f"句子 {i+1} 的向量: {embedding[:5]}...")  # 示例输出: 句子 1 的向量: [0.0123, -0.0456, 0.0789, 0.0234, -0.0567]...

数据结果:

向量维度: 384

句子 1 的向量: [-0.01811877 0.10055622 0.07948062 0.00487238 0.02543747]...

句子 2 的向量: [-0.05084108 0.09896706 0.01865453 -0.02641223 -0.04201426]...

句子 3 的向量: [ 0.01909676 0.03446515 0.09162795 0.07016529 -0.02994661]...

补充说明,向量的维度是由选择的向量模型决定的

python环境的依赖如下:

复制代码
annotated-types==0.7.0
anyio==4.12.0
certifi==2025.11.12
charset-normalizer==3.4.4
click==8.3.1
dataclasses-json==0.6.7
faiss-cpu==1.13.0
fastapi==0.128.0
h11==0.16.0
httpcore==1.0.9
httpx==0.28.1
httpx-sse==0.4.3
huggingface-hub==0.36.0
idna==3.11
Jinja2==3.1.6
jiter==0.12.0
jsonschema==4.25.1
jsonschema-specifications==2025.9.1
langchain==0.1.20
langchain-classic==1.0.0
langchain-community==0.0.38
langchain-core==0.2.43
langchain-experimental==0.0.54
langchain-milvus==0.3.1
langchain-openai==0.0.5
langchain-text-splitters==0.0.2
langchainhub==0.1.21
langdetect==1.0.9
langgraph==0.1.10
langgraph-checkpoint==3.0.1
langgraph-prebuilt==1.0.5
langgraph-sdk==0.2.14
langsmith==0.1.147
lark==1.3.1
MarkupSafe==3.0.3
marshmallow==3.26.1
multidict==6.7.0
mypy_extensions==1.1.0
numpy==1.26.4
openai==1.109.1
orjson==3.11.5
ormsgpack==1.12.0
overrides==7.7.0
packaging==23.2
pandas==2.3.3
pydantic==2.12.5
pydantic-settings==2.12.0
pydantic_core==2.41.5
Pygments==2.19.2
pymilvus==2.5.0
python-dateutil==2.9.0.post0
python-dotenv==1.2.1
python-multipart==0.0.22
pytz==2025.2
referencing==0.37.0
regex==2025.11.3
requests==2.32.5
requests-toolbelt==1.0.0
rpds-py==0.30.0
safetensors==0.7.0
scikit-learn==1.7.2
scipy==1.16.3
sentence-transformers==5.1.2
six==1.17.0
sniffio==1.3.1
SQLAlchemy==2.0.44
starlette==0.50.0
tenacity==8.5.0
threadpoolctl==3.6.0
tiktoken==0.5.2
tokenizers==0.22.1
torch==2.9.1
tqdm==4.67.1
transformers==4.57.3
types-requests==2.32.4.20260107
typing-inspect==0.9.0
typing-inspection==0.4.2
typing_extensions==4.15.0
tzdata==2025.2
ujson==5.11.0
unstructured==0.18.21
unstructured-client==0.42.4
urllib3==2.6.0
uvicorn==0.40.0
yarl==1.22.0

向量模型可以在 老虎网盘资源中搜索"all-MiniLM-L6-v2向量化模型",然后解压使用,也可以自行去其他大模型平台下载使用。