共计 1865 个字符,预计需要花费 5 分钟才能阅读完成。
背景介绍
向量数据库在 AI 时代变得尤为重要,特别是在处理高维数据时。无论是推荐系统、图像搜索还是自然语言处理,都需要快速地对向量进行相似性检索。Chroma 是一个轻量级、高性能的向量数据库,特别适合中小规模的项目。它的主要特点包括:

- 简单易用的 API
- 支持多种距离度量(如余弦相似度、欧氏距离)
- 内存和持久化存储选项
- 与常见机器学习框架良好集成
核心功能演示
安装和初始化
首先我们需要安装 Chroma:
pip install chromadb
然后初始化客户端:
import chromadb
# 创建内存中的客户端
client = chromadb.Client()
# 或者指定持久化路径
# client = chromadb.PersistentClient(path="/path/to/store")
数据导入和向量化
假设我们有一组文本数据需要向量化:
from sentence_transformers import SentenceTransformer
# 加载预训练模型
model = SentenceTransformer('all-MiniLM-L6-v2')
texts = ["机器学习很有趣", "深度学习很强大", "向量数据库很有用"]
# 生成向量
embeddings = model.encode(texts)
# 转换为列表格式
embeddings = [embedding.tolist() for embedding in embeddings]
创建集合并添加数据
# 创建或获取集合
collection = client.create_collection(name="my_collection")
# 添加数据
collection.add(
embeddings=embeddings,
documents=texts,
ids=["id1", "id2", "id3"]
)
相似性搜索
# 查询向量
query_embedding = model.encode("人工智能很酷").tolist()
# 执行搜索
results = collection.query(query_embeddings=[query_embedding],
n_results=2
)
print(results["documents"]) # 打印相似文本
性能优化
批量操作
避免频繁的单条插入操作:
# 不好的做法
for text in texts:
embedding = model.encode(text).tolist()
collection.add(embeddings=[embedding], documents=[text])
# 推荐做法
batch_size = 100
for i in range(0, len(texts), batch_size):
batch = texts[i:i+batch_size]
embeddings = model.encode(batch)
collection.add(embeddings=embeddings.tolist(),
documents=batch,
ids=[f"id_{j}" for j in range(i, i+len(batch))]
)
索引参数调优
Chroma 支持多种索引类型:
collection = client.create_collection(
name="optimized_collection",
metadata={"hnsw:space": "cosine"} # 使用 HNSW 索引
)
生产环境注意事项
持久化存储
# 持久化客户端
client = chromadb.PersistentClient(path="/data/chroma")
# 定期备份
import shutil
shutil.make_archive("/backups/chroma_backup", 'zip', "/data/chroma")
并发访问
from threading import Lock
write_lock = Lock()
def safe_add(collection, embedding, text):
with write_lock:
collection.add(embeddings=[embedding], documents=[text])
与其他向量数据库对比
| 特性 | Chroma | Pinecone | Milvus |
|---|---|---|---|
| 安装复杂度 | 低 | 中 | 高 |
| 托管选项 | 无 | 有 | 有 |
| 本地运行 | 支持 | 不支持 | 支持 |
| 社区支持 | 一般 | 好 | 好 |
思考题
在你的业务场景中,如何利用 Chroma 实现以下功能:
1. 用户搜索历史记录的个性化推荐
2. 商品图片的相似性搜索
3. 客服聊天记录的智能匹配
请思考并尝试实现其中一个场景的 POC。
正文完
