本地下载和使用嵌入模型,核心思路是:先把模型文件完整地下载到本地磁盘,然后在代码中通过“本地路径”来加载它,这样就彻底摆脱了对网络的依赖。
结合 LangChain 和 Hugging Face 生态,这里有一套最稳妥的流程。
第一步:选择并下载模型
对于中文场景,BAAI/bge-small-zh-v1.5是一个体积小、效果好的入门选择。推荐使用huggingface-cli下载,并配合国内镜像加速。
1. 安装命令行工具
pip install -U huggingface_hub2. 设置镜像环境变量(国内网络必备)
Linux/macOS:
export HF_ENDPOINT=https://hf-mirror.comWindows (PowerShell):
$env:HF_ENDPOINT = "https://hf-mirror.com"
3. 下载模型到指定目录
使用--local-dir参数指定一个容易找到的文件夹(比如./models/bge-small-zh),这样下载下来的文件结构清晰,方便后续引用 。
# 创建一个目录用于存放模型 mkdir -p ./models # 下载模型到本地目录 huggingface-cli download BAAI/bge-small-zh-v1.5 --local-dir ./models/bge-small-zh第二步:在代码中使用本地模型
下载完成后,只需要把代码里原本写的“模型名称”替换成“本地文件夹的路径”。
方式 A:直接使用 SentenceTransformers(最通用)
from sentence_transformers import SentenceTransformer # 直接传入本地文件夹的路径 model = SentenceTransformer('./models/bge-small-zh') # 后续使用与在线加载完全一致 vectors = model.encode(["什么是RAG?", "向量数据库怎么用?"]) print(vectors.shape)方式 B:在 LangChain 中使用(推荐)
如果在 LangChain 中做 RAG,可以使用HuggingFaceEmbeddings。虽然它默认会联网,但只要传入本地路径,它就会直接读取本地文件 。
from langchain_huggingface import HuggingFaceEmbeddings # 关键:model_name 填本地文件夹的路径 embeddings = HuggingFaceEmbeddings( model_name="./models/bge-small-zh", model_kwargs={'device': 'cpu'}, # 如果有GPU可改为 'cuda' encode_kwargs={'normalize_embeddings': True} # 通常建议归一化 ) # 测试一下 text = "这是一个测试句子" vector = embeddings.embed_query(text) print(len(vector)) # 输出向量维度,bge-small-zh 是 512避坑提示
路径要对:
model_name或SentenceTransformer的参数,指向的是包含config.json、pytorch_model.bin等文件的文件夹,而不是上一级目录。离线模式:如果在完全断网的环境下运行,可以在加载前设置
export TRANSFORMERS_OFFLINE=1,这样代码就不会尝试去联网检查更新,启动速度会更快。如果下载失败:除了
huggingface-cli,国内也可以试试用ModelScope(魔搭)的modelscope download命令来下载同一个模型(如果该模型在魔搭有镜像的话),下载后同样是得到一堆文件,用法完全一样 。