一、Chroma 是什么?
- 轻量级向量数据库(专门存文本、图片、音频的向量)
- 主打:简单、开箱即用、本地优先
- 不需要复杂配置,Python 几行就能跑
- 自动做 embedding(文本转向量),不用自己写模型
适用场景:
- RAG 知识库(给大模型做检索)
- 文档相似搜索
- 问答系统、本地知识库
二、核心概念
- Client:客户端,连接 Chroma
- Collection:集合,相当于 “表”,用来存一批数据
- Embedding:文本 → 高维向量,Chroma 自动生成
- Document:你存的原始文本(必须)
- Metadata:元数据,用于过滤 (可选,但非常有用)
- ID:每条数据唯一标识(必须)
三、python中安装chromadb
pip install chromadb四、基础使用(最常用流程)
1. 创建 / 连接客户端
(1) 本地持久化(数据存在文件夹里,不会丢):
import chromadb
client = chromadb.PersistentClient(path="./chroma_db")
(2) 内存版(程序关了数据就没):
client = chromadb.Client()
2. 创建集合
collection=client.get_or_create_collection(name='infos')3. 添加数据(存向量)
collection.add( documents=[ "小明喜欢吃苹果", "小红喜欢在公园跑步", "机器学习是人工智能的一种" ], #文字内容,可以是句子、段落、文章。 metadatas=[ {"topic": "饮食"}, {"topic": "运动"}, {"topic": "技术"} ], #给数据打标签,用于过滤搜索 ids=["id1", "id2", "id3"] # 必须唯一 )只要传文档 + ID + 元数据,剩下的 Chroma 自动搞定:
- document => 文档(文字)
- ids=> ID(唯一标识)
- metadatas=> 元数据(标签 / 过滤用)
- 向量(自动生成,不用你管)
4. 相似度搜索(最核心功能)
results = collection.query( query_texts="我热爱运动", n_results=2 ) print(results)5. 带条件过滤搜索
results = collection.query( query_texts="技术", n_results=2, where={"topic": "技术"} )6. 查看数据
# 查看所有 collection.get() # 预览前2条 collection.peek(2) # 列出所有集合 client.list_collections()7. 删除数据
collection.delete(ids=["id1"])8. 删除集合
client.delete_collection("infos")五、Chroma 存储结构
chroma_db/
chroma.sqlite3 # 文档、ID、元数据
chroma-embeddings.parquet # 向量
index/ # 向量索引
- 重启程序数据依然存在
- 复制整个文件夹就能备份
如果要打开 ChromaDB 的文件
- 找到你的
chroma.sqlite3(在./chroma/或你自定义的目录);- 用 DB Browser → “打开数据库” → 选中这个文件 → 就能看到所有集合、元数据。
可以使用可视化-DB Browser for SQLite(免费),直接给你官方、安全、64 位免安装版(ZIP)链接,下完解压就能用:Windows 64 位 便携版(推荐)
https://sqlitebrowser.org/dl/
六、高级知识点
1. 向量怎么来的?
Chroma 默认使用all-MiniLM-L6-v2模型自动把文本转 384 维向量。你也可以换:
- HuggingFace 模型
- 自己的 embedding 函数
- OpenAI / 百度千帆 等接
2. 支持三种模式
- 本地持久化(最常用)
- 内存模式
- 服务端模式(chroma run --path ./data)
3. 支持的查询方式
- 文本查询
query_texts - 向量查询
query_embeddings - 元数据过滤
where - 混合检索
4. 适合什么规模?
- 小~中规模:几千~几十万条非常舒服
- 超大规模(百万以上)建议用 Qdrant / Milvus
七、典型 RAG 流程(最实用)
- 把文档切分(分块)
- 存入 Chroma
- 用户提问 → 检索相似文档
- 把文档丢给大模型回答
八、常见问题
找不到 chroma.sqlite3?用的是内存 Client,换成 PersistentClient。
ID 重复报错?ID 必须唯一,不能重复 add。
如何清空数据?删除集合或删除整个 chroma 文件夹。
总之:
Chroma = 轻量向量库 + 自动 embedding + 简单 API
适合做本地知识库、RAG 快速原型,Python 开箱即用。