共计 2434 个字符,预计需要花费 7 分钟才能阅读完成。
什么是 AI 向量数据库?
AI 向量数据库是一种专门设计用来存储和检索向量形式数据的数据库。与传统数据库不同,它能够高效处理高维向量数据,并通过相似性搜索快速找到最匹配的结果。

典型应用场景
- 语义搜索:构建智能搜索引擎
- 推荐系统:基于内容相似性推荐
- 图像识别:存储和检索图像特征向量
- 自然语言处理:处理词嵌入和文档向量
Chroma 简介
Chroma 是一个开源的 AI 向量数据库,以其轻量级和易用性著称。与其他向量数据库如 Pinecone、Milvus 相比,Chroma 更适合快速原型开发和小规模应用。
对比优势
- 安装简单,依赖少
- Python 优先的 API 设计
- 内存模式支持快速开发
- 轻量级,启动速度快
安装与配置
系统要求
- Python 3.7+
- pip 最新版本
安装步骤
- 创建新的 Python 虚拟环境
python -m venv chroma_env
source chroma_env/bin/activate # Linux/Mac
chroma_env\Scripts\activate # Windows
- 安装 Chroma
pip install chromadb
- 验证安装
import chromadb
print(chromadb.__version__)
核心操作教程
1. 创建集合(Collection)
集合是 Chroma 中组织数据的主要方式,类似于传统数据库中的表。
import chromadb
# 创建客户端
client = chromadb.Client()
# 创建或获取集合
collection = client.create_collection("my_collection")
2. 插入向量数据
向量数据通常需要与元数据和 ID 一起存储。
# 示例数据
ids = ["id1", "id2", "id3"]
embeddings = [[0.1, 0.2, 0.3], # 向量 1
[0.4, 0.5, 0.6], # 向量 2
[0.7, 0.8, 0.9] # 向量 3
]
metadatas = [{"category": "science"},
{"category": "history"},
{"category": "technology"}
]
# 添加数据到集合
collection.add(
embeddings=embeddings,
metadatas=metadatas,
ids=ids
)
3. 相似性搜索
Chroma 的核心功能是根据向量相似性检索数据。
# 查询向量
query_embedding = [0.15, 0.25, 0.35]
# 执行相似性搜索
results = collection.query(query_embeddings=[query_embedding],
n_results=2 # 返回最相似的 2 个结果
)
print(results)
4. 数据管理
Chroma 提供了基本的数据管理功能。
# 获取集合中的所有 ID
all_ids = collection.get()["ids"]
# 更新数据
collection.update(ids=["id1"],
embeddings=[[0.11, 0.21, 0.31]],
metadatas=[{"category": "physics"}]
)
# 删除数据
collection.delete(ids=["id2"])
完整代码示例
以下是一个完整的 Chroma 使用示例:
import chromadb
import numpy as np
# 1. 初始化客户端和集合
client = chromadb.Client()
collection = client.create_collection("sample_collection")
# 2. 生成随机向量数据
num_items = 100
dim = 128 # 向量维度
ids = [f"id_{i}" for i in range(num_items)]
embeddings = np.random.rand(num_items, dim).tolist()
metadatas = [{"index": i} for i in range(num_items)]
# 3. 添加数据
collection.add(
embeddings=embeddings,
metadatas=metadatas,
ids=ids
)
# 4. 查询示例
query_embedding = np.random.rand(dim).tolist()
results = collection.query(query_embeddings=[query_embedding],
n_results=5
)
print("最相似的 5 个结果:")
for id, distance in zip(results["ids"][0], results["distances"][0]):
print(f"ID: {id}, 距离: {distance:.4f}")
性能考量
Chroma 的性能特点:
- 小规模数据(<10,000 向量)
- 内存模式下查询速度极快
-
适合开发和测试
-
中等规模数据(10,000-1,000,000 向量)
- 需要持久化存储
-
查询延迟开始增加
-
大规模数据(>1,000,000 向量)
- 考虑使用专用向量数据库
- 可能需要分布式部署
生产环境建议
- 部署方式
- 对于小规模应用,可以使用内存模式
-
生产环境建议使用持久化模式
-
性能优化
- 批量插入数据
- 合理设置向量维度
-
定期维护索引
-
监控与维护
- 监控内存使用
- 定期备份数据
- 考虑使用容器化部署
常见问题解答
Q: 向量维度应该如何选择?
A: 通常与你的嵌入模型输出维度一致,常见的有 128, 256, 512, 768, 1024 等。
Q: 如何提高查询速度?
A: 可以尝试减少向量维度,或者使用近似最近邻 (ANN) 算法。
Q: Chroma 支持分布式部署吗?
A: 当前版本主要针对单机部署,大规模应用建议考虑其他分布式向量数据库。
总结
通过本教程,你已经学会了如何使用 Chroma 构建基本的 AI 向量数据库应用。建议从一个小项目开始实践,比如构建一个简单的文档搜索引擎。随着经验的积累,你可以进一步探索更复杂的应用场景。
如果你在实际使用中遇到问题或有有趣的用例,欢迎在社区分享你的经验。
正文完
