如果你没有 OpenAI 的 API_KEY,也不想使用代理商。可以尝试本地通过 Ollama 运行嵌入模型。
Ollama 是开源免费、跨平台的本地大模型运行管理工具,你可以理解成大模型界的 Docker,一个命令就能在电脑本地跑开源大模型,不需要云端、不需要 API Key,不花一分钱(但是,需要根据自己机器配置,运行合适的大模型,模型太大本地是跑不起来的)。
如果要安装 Ollama 请查看 https://www.hxstrive.com/article/1550.htm。
下面是安装 Ollama 后,下载了三个模型后,查看本地模型界面:

下面将使用 bge-m3 模型来做验证,访问 https://ollama.com/library/bge-m3 地址,如下图:

运行“ollama pull bge-m3”命令下载模型,模型大小为 1.2GB,如下图:

执行 pip install ollama 命令安装 Ollama 安装依赖,如果已经安装,跳过该步骤。
一切准备就绪,下面开始写代码验证:
import os
import chromadb
import tempfile
from chromadb.utils.embedding_functions import OllamaEmbeddingFunction
# 持久化示例写到临时目录,工作目录保持干净
os.chdir(tempfile.mkdtemp(prefix="chroma_demo_"))
# 创建 OpenAI 远程嵌入函数
ef = OllamaEmbeddingFunction(
url="http://localhost:11434",
model_name="bge-m3", # 先在 ollama 里 pull 下来
timeout=60,
)
client = chromadb.PersistentClient(path="./chroma_data")
col = client.get_or_create_collection(
name="kb_zh",
embedding_function=ef,
configuration={"hnsw": {"space": "cosine"}},
)
col.add(ids=[
"a", "b"
], documents=[
"如何申请退款", "快递丢了怎么办"
])
print(col.query(query_texts=["买的东西不想要了,钱能退回来吗"], n_results=1))运行代码,输出如下:
{'ids': [['a']], 'embeddings': None, 'documents': [['如何申请退款']], 'uris': None, 'included': ['metadatas', 'documents', 'distances'], 'data': None, 'metadatas': [[None]], 'distances': [[0.17788875102996826]]}Ollama 的方案很适合内网部署,不用装 torch,模型统一管理,还能挂 GPU。