现在我们来讲几个 ChromaDB 的重要核心概念。 首先,ChromaDB 默认是非持久化存储模式。如果你直接用 chromadb.Client () 创建客户端,所有数据只会存放在内存里。这就意味着,一旦程序停止运行,你存入的全部数据都会丢失。 这种模式很适合学习和做实验调试,但绝对不能用于生产环境。如果想让 ChromaDB 实现持久化存储,就要改用 PersistentClient 替代基础的 Client。你需要指定一个本地文件路径,数据库相关文件都会保存在这个路径下。这样一来,即便程序重启,数据也不会消失,你可以长期累积、扩充向量数据库里的内容。 除此之外,我们还可以更换 ChromaDB 所使用的嵌入模型。它默认采用 all-MiniLM 模型,但你可能会有更换模型的需求:比如想要更好的语义匹配效果,或是需要和你训练阶段使用的模型保持一致。 你可以接入 OpenAI 的向量嵌入模型,甚至基于任意模型自定义专属嵌入转换函数。以 OpenAI 为例:创建集合时新增名为 embedding_function 的参数,传入 OpenAI 官方嵌入工具,同时配置好你的 OpenAI API 密钥即可。
ChromaDB 核心概念完整解读(补充实操 + 区分要点)
一、两种客户端:内存 Client vs 持久化 PersistentClient
1.chromadb.Client()内存客户端(非持久化)
- 存储位置:仅内存,无本地文件落地
- 生命周期:进程存活则数据存在,程序退出、重启、服务崩溃后所有向量、文本、元数据全部清空丢失
- 适用场景:本地快速测试、Demo、教学实验、临时调试,严禁线上生产使用
- 极简示例
python
运行
import chromadb # 内存模式,重启即丢 client = chromadb.Client()2.chromadb.PersistentClient(path="本地文件夹路径")持久化客户端
- 存储位置:指定本地磁盘目录,自动生成向量索引、元数据、集合配置文件
- 生命周期:数据永久落地磁盘,程序关闭 / 重启后可重新加载完整库,支持长期迭代新增数据
- 适用场景:本地私有化部署、离线知识库、生产单机向量检索服务
- 极简示例
python
运行
import chromadb # 持久化,数据保存在 ./chroma_db 文件夹 client = chromadb.PersistentClient(path="./chroma_db")关键区分总结
表格
| 客户端类型 | 存储介质 | 重启数据 | 生产可用性 |
|---|---|---|---|
| Client | 内存 | 全部丢失 | ❌ 禁止生产 |
| PersistentClient | 本地磁盘文件 | 数据保留 | ✅ 本地生产可用 |
二、嵌入函数 embedding_function(向量转换核心)
1. 默认嵌入模型
Chroma 内置默认:all-MiniLM-L6-v2轻量开源句向量模型,无需额外 API、离线可用,开箱即用。 创建集合不指定embedding_function会自动使用该模型:
python
运行
# 使用默认 all-MiniLM 嵌入 collection = client.create_collection(name="demo")2. 更换嵌入模型的核心需求场景
- 追求更高语义匹配精度(开源大句向量、商用模型)
- 上下游模型对齐:训练、业务侧使用同一款嵌入,保证向量空间一致
- 业务特殊需求:多语言、长文本、专用领域(法律 / 医疗)向量
- 调用商用 API 向量服务:OpenAI、DashScope、Cohere 等
3. 实操示例:接入 OpenAI 嵌入模型
依赖安装:pip install openai chromadb
python
运行
import chromadb from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction # 配置OpenAI嵌入函数,填入API Key openai_ef = OpenAIEmbeddingFunction( api_key="你的OpenAI API密钥", model_name="text-embedding-ada-002" # 可选text-embedding-3-small/large ) # 创建集合时指定自定义嵌入函数 client = chromadb.PersistentClient("./chroma_store") collection = client.create_collection( name="knowledge_base", embedding_function=openai_ef )4. 自定义嵌入函数(完全自定义向量逻辑)
支持自行实现文本转向量的逻辑,只需要实现__call__接收文本列表、返回二维向量数组,适配私有训练模型、本地大模型等场景。
三、补充延伸关键配套概念(配套理解)
Collection 集合ChromaDB 的最小操作单元,相当于传统数据库的「表」。同一个库可以创建多个独立集合,每个集合可绑定专属嵌入模型,隔离不同业务知识库。
数据三要素(存入集合必备)
- documents:原始文本片段
- embeddings:文本对应的向量(不传入时会通过 embedding_function 自动生成)
- metadatas:自定义标签(分类、时间、来源等,用于过滤检索)
- 检索逻辑 查询文本会先通过绑定的嵌入函数转为向量,再在集合内计算余弦相似度,返回最相似的文本片段。嵌入模型一旦切换,旧向量会完全失效,同一集合必须全程使用同一种嵌入函数。
四、生产环境补充注意点
- 单机持久化仅适用于本地离线业务;高并发分布式场景需搭配 Chroma Server / 远程客户端;
- 使用商用嵌入 API(OpenAI)存在网络、计费、延迟问题,大规模离线知识库优先本地开源嵌入模型;
- 持久化目录建议单独管理,定期备份,避免磁盘损坏丢失向量库文件。