Chroma 向量数据库怎么用:Python 本地写入与查询验证

Chroma 是一个轻量级向量数据库,适合在本地或单机环境快速验证语义检索。
它不需要单独部署服务端,用 Python 包就能启动,数据默认保存在内存或指定目录。
本文从零开始,用一段可运行的代码完成安装、写入和查询,并说明容易卡住的地方。

安装前确认 Python 与依赖环境

Chroma 要求 Python 3.8 及以上版本。
建议单独建虚拟环境,避免和系统包冲突:

python3 -m venv chroma-env
source chroma-env/bin/activate
pip install chromadb

安装完成后用下面命令确认版本,不同版本的 API 细节可能有差异,后续代码以当前主流 0.5.x 为例:

pip show chromadb

如果 pip 安装很慢,
可以临时换国内镜像源,
例如 pip install chromadb -i https:
//pypi.tuna.tsinghua.edu.cn/simple
。

用持久化模式启动客户端并建集合

Chroma 支持内存模式和持久化模式。
内存模式重启后数据丢失,适合一次性测试;
持久化模式会把数据写到本地目录,适合后续反复查询。

import chromadb

client = chromadb.PersistentClient(path="./chroma_data")
collection = client.get_or_create_collection(name="demo_docs")

get_or_create_collection 在集合不存在时创建,已存在时直接获取,重复执行不会报错。
集合名建议用小写字母和下划线,避免特殊字符。

写入文档并执行相似度查询

Chroma 默认自带一个轻量 Embedding 函数,首次写入时会自动下载模型文件。
如果网络受限,可以改用自定义 Embedding 函数,或者先把模型文件缓存到本地。

下面写入三条带元数据的文档,然后查询与“如何备份数据库”最接近的结果:

collection.add(
    ids=["doc1", "doc2", "doc3"],
    documents=[
        "定期备份数据库可以防止数据丢失",
        "服务器重启前应先保存当前配置",
        "向量检索适合处理语义相似度问题"
    ],
    metadatas=[
        {"category": "backup"},
        {"category": "ops"},
        {"category": "search"}
    ]
)

result = collection.query(
    query_texts=["数据库备份方法"],
    n_results=2
)
print(result["documents"])
print(result["distances"])

预期输出中第一条文档应该是与备份最相关的内容,distances 数值越小表示越相似。
如果返回空列表,先检查 documents 是否为空,再确认 Embedding 函数是否成功加载。

常见报错与避坑说明

下载模型超时:默认 Embedding 函数依赖外网下载模型。
可以设置环境变量 HF_ENDPOINT 指向镜像,或改用 sentence-transformers 本地模型。

集合已存在但结构不一致:修改 Embedding 函数后建议新建集合名,不要复用旧集合,否则维度可能不匹配。

持久化目录权限不足:path 指向的目录需要当前用户有读写权限,建议用绝对路径并提前创建目录。

查询结果为空但文档已写入:用 collection.count() 确认文档数量,再检查 query_texts 是否为空字符串。

验证数据是否真正持久化

关闭 Python 进程后重新打开,重新执行 PersistentClient 和 get_collection,用 collection.count() 查看文档数。
如果数量与写入时一致,说明持久化正常。
再执行一次 query,确认返回结果稳定。

对于生产环境,建议把 Chroma 放在独立目录,并定期备份 chroma_data 文件夹。
单机 Chroma 适合中小规模数据;
数据量很大或需要多节点并发时,应评估服务端模式或专用向量数据库。

常见疑问

Chroma 必须单独安装服务端吗?
不需要。Python 客户端内置了本地存储,直接 PersistentClient 就能用。只有需要多客户端共享数据时才考虑启动独立服务。

默认 Embedding 函数可以换成中文模型吗?
可以。创建集合时传入自定义 embedding_function,例如 sentence-transformers 的中文模型,但要注意后续查询必须使用同一个函数。

写入数据后修改文档内容怎么办?
Chroma 支持 update 方法,按 id 更新文档和元数据。如果只是追加新文档,继续调用 add 即可。

查询时如何按元数据过滤?
在 query 中传入 where={"category": "backup"} 即可只检索指定分类的文档,适合按业务标签缩小范围。

分享到:
上一篇
Milvus 向量数据库怎么用:Docker 部署与检索验证
下一篇
Pinecone 向量库怎么接入:建索引、写入与查询
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意