ChromaDB知识速览
文章目录
- ChromaDB知识速览

核心定位
是什么
- 开源向量数据库
- AI原生设计
- 嵌入式/客户端/服务器模式
- 大模型应用首选向量存储
核心特点
- 简单易用(pip install即用)
- 多语言支持(Python/JS/Java等)
- 多种部署模式
- 与LangChain/LlamaIndex深度集成
核心概念
Collection(集合)
- 相当于关系型数据库的"表"
- 存储向量+元数据+文档
- 需指定名称和嵌入函数
Embedding(嵌入)
- 文本→向量的转换
- 支持内置模型或自定义
- 默认使用all-MiniLM-L6-v2
Document(文档)
- 原始文本内容
- 可选:id/metadata/embedding
Metadata(元数据)
- 键值对形式的附加信息
- 用于过滤和筛选
- 支持:字符串/整数/浮点数/布尔值
部署模式
内存模式(Ephemeral)
- 数据仅存内存
- 重启丢失
- 适合测试/演示
本地持久化(Persistent)
- 数据保存本地磁盘
- SQLite存储元数据
- 生产环境推荐
客户端-服务器模式
- Chroma服务端独立部署
- 多客户端远程连接
- 支持Docker/K8s
云端托管(Chroma Cloud)
- 全托管SaaS服务
- 自动扩缩容
- 企业级特性
核心操作
数据管理
- 创建集合
client.create_collection(name="docs")
- 添加数据
collection.add(ids, documents, metadatas, embeddings)
- 更新数据
collection.update()/upsert()
- 删除数据
collection.delete(ids)/ 按条件删除
向量检索
- 相似度搜索
collection.query(query_embeddings, n_results=5)
- 文本搜索(自动嵌入)
collection.query(query_texts=["查询文本"])
- 元数据过滤
where={"category": "tech"}
- 多条件组合
$and/$or/$gt/$lt等
高级功能
- 分页查询
- 结果去重
- 距离度量(cosine/l2/ip)
- 集合复制/修改
集成生态
LLM框架
- LangChain
Chroma.from_documents()Chroma.as_retriever()
- LlamaIndex
ChromaVectorStore
- Haystack
嵌入模型
- OpenAI(text-embedding-ada-002)
- HuggingFace(Sentence Transformers)
- Cohere
- 自定义嵌入函数
数据源
- 文件加载(PDF/TXT/MD)
- 网页爬取
- 数据库同步
典型应用场景
RAG(检索增强生成)
- 文档向量化存储
- 语义相似度检索
- 结合LLM生成回答
语义搜索
- 替代传统关键词搜索
- 理解查询意图
- 多语言支持
推荐系统
- 基于内容相似推荐
- 用户兴趣向量匹配
去重/聚类
- 相似文档检测
- 数据清洗
关键代码示例
快速开始
python
import chromadb
client = chromadb.Client()
collection = client.create_collection("my_collection")
collection.add(documents=["Hello world"], ids=["id1"])
results = collection.query(query_texts=["Hi"], n_results=1)
持久化配置
python
client = chromadb.PersistentClient(path="./chroma_db")
元数据过滤查询
python
collection.query(
query_texts=["AI技术"],
where={"category": "technology", "year": {"$gte": 2023}},
n_results=3
)
与LangChain集成
python
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
vectorstore = Chroma.from_documents(
documents=docs,
embedding=OpenAIEmbeddings(),
persist_directory="./chroma_db"
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
性能优化
索引策略
- HNSW(默认近似最近邻)
- 权衡:速度 vs 召回率
配置调优
hnsw:space(距离度量)hnsw:construction_efhnsw:search_ef
批量操作
- 批量添加提升写入性能
- 推荐批次:100-1000条
注意事项
限制
- 单集合最大约100万条(推荐)
- 元数据过滤字段需预先规划
- 不支持复杂事务
最佳实践
- 合理设计Collection粒度
- 元数据字段建立索引
- 定期备份持久化目录
- 生产环境使用服务器模式
对比其他向量库
vs FAISS
- Chroma:持久化+元数据+易用
- FAISS:纯内存+高性能
vs Pinecone/Milvus
- Chroma:开源免费/轻量级
- 商业方案:托管服务/大规模