Chroma 简介 #
什么是向量数据库? #
在了解 Chroma 之前,我们需要先理解"向量数据库"的概念。向量数据库是一种专门用于存储、索引和查询向量嵌入的数据库系统。
text
┌─────────────────────────────────────────────────────────────┐
│ 向量数据库的本质 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 传统数据库: │
│ - 存储结构化数据(表格、行、列) │
│ - 精确匹配查询 │
│ - 关系型操作 │
│ │
│ 向量数据库: │
│ - 存储向量嵌入(高维数值数组) │
│ - 相似性搜索 │
│ - 语义理解 │
│ │
│ 类比: │
│ - 传统搜索:查找包含"苹果"这个词的文档 │
│ - 向量搜索:查找与"苹果"语义相似的内容 │
│ (可能返回 iPhone、水果等相关内容) │
│ │
└─────────────────────────────────────────────────────────────┘
为什么需要向量数据库? #
text
┌─────────────────────────────────────────────────────────────┐
│ 向量数据库解决的问题 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 语义搜索 │
│ 传统搜索:关键词匹配 │
│ 向量搜索:理解语义,找到真正相关的内容 │
│ │
│ 2. 相似性匹配 │
│ 找到与给定内容最相似的其他内容 │
│ 应用于推荐系统、去重、聚类 │
│ │
│ 3. AI 应用支持 │
│ LLM 需要检索相关上下文 │
│ RAG(检索增强生成)的核心组件 │
│ │
│ 4. 多模态检索 │
│ 文本、图像、音频的统一表示 │
│ 跨模态搜索能力 │
│ │
└─────────────────────────────────────────────────────────────┘
什么是 Chroma? #
Chroma 是一个开源的 AI 原生向量数据库,专为构建 AI 应用而设计。它提供了简单易用的 API,让开发者可以轻松地存储、检索和管理向量嵌入。
核心定位 #
text
┌─────────────────────────────────────────────────────────────┐
│ Chroma │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 简单易用 │ │ 开源免费 │ │ 功能完整 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ AI 原生 │ │ 生产就绪 │ │ 多模态 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
Chroma 的历史 #
发展历程 #
text
2022年 ─── Chroma 项目启动
│
│ Chroma 团队开发
│ 解决 AI 应用存储痛点
│ 专注开发者体验
│
2023年 ─── Chroma 开源发布
│
│ GitHub 开源
│ 快速获得社区关注
│ 持续迭代更新
│
2023年 ─── 功能扩展
│
│ 内置嵌入函数
│ 多种存储后端
│ 云服务推出
│
2024年 ─── 生态完善
│
│ LangChain 深度集成
│ LlamaIndex 支持
│ 企业级功能
│
至今 ─── 快速发展
│
│ GitHub 15k+ Stars
│ 活跃的社区
│ 广泛的应用
里程碑版本 #
| 版本 | 时间 | 重要特性 |
|---|---|---|
| 0.3.x | 2023.01 | 初始发布,核心功能 |
| 0.4.x | 2023.05 | 重构 API,改进性能 |
| 0.5.x | 2023.09 | 嵌入函数内置 |
| 0.6.x | 2024.01 | 多模态支持 |
| 0.7.x | 2024.05 | 分布式部署 |
| 0.8.x | 2024.09 | 性能优化 |
为什么选择 Chroma? #
传统方案的痛点 #
在使用 Chroma 之前,向量存储面临以下挑战:
python
# 传统方式:自己管理向量
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
vectors = []
documents = []
def add_document(doc, embedding):
vectors.append(embedding)
documents.append(doc)
def search(query_embedding, k=5):
similarities = cosine_similarity([query_embedding], vectors)[0]
top_k_indices = np.argsort(similarities)[-k:][::-1]
return [documents[i] for i in top_k_indices]
# 问题:
# 1. 没有持久化
# 2. 没有索引优化
# 3. 没有元数据支持
# 4. 扩展性差
# 5. 功能单一
Chroma 的解决方案 #
python
import chromadb
# Chroma 方式:开箱即用
client = chromadb.Client()
collection = client.create_collection("documents")
# 添加文档(自动嵌入)
collection.add(
documents=["文档内容1", "文档内容2"],
ids=["id1", "id2"],
metadatas=[{"source": "web"}, {"source": "file"}]
)
# 语义搜索
results = collection.query(
query_texts=["搜索内容"],
n_results=5
)
# 优势:
# 1. 自动持久化
# 2. 高效索引
# 3. 元数据过滤
# 4. 易于扩展
# 5. 功能完整
Chroma 的核心特点 #
1. 简单易用 #
text
┌─────────────────────────────────────────────────────────────┐
│ Chroma 简单易用 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 安装简单: │
│ pip install chromadb │
│ │
│ API 直观: │
│ - create_collection() 创建集合 │
│ - add() 添加文档 │
│ - query() 查询搜索 │
│ - delete() 删除数据 │
│ │
│ 零配置启动: │
│ client = chromadb.Client() # 内存模式 │
│ client = chromadb.PersistentClient(path="./db") # 持久化 │
│ │
└─────────────────────────────────────────────────────────────┘
2. 内置嵌入函数 #
text
┌─────────────────────────────────────────────────────────────┐
│ Chroma 内置嵌入 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 支持多种嵌入模型: │
│ - Sentence Transformers │
│ - OpenAI Embeddings │
│ - Cohere Embeddings │
│ - Google PaLM Embeddings │
│ - 自定义嵌入函数 │
│ │
│ 自动嵌入: │
│ collection.add(documents=["文本"]) # 自动生成嵌入 │
│ │
│ 手动嵌入: │
│ collection.add(embeddings=[[0.1, 0.2, ...]]) │
│ │
└─────────────────────────────────────────────────────────────┘
3. 功能完整 #
text
┌─────────────────────────────────────────────────────────────┐
│ Chroma 功能完整 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 数据管理: │
│ ✅ 添加、更新、删除文档 │
│ ✅ 元数据存储与过滤 │
│ ✅ 批量操作支持 │
│ │
│ 查询能力: │
│ ✅ 向量相似性搜索 │
│ ✅ 元数据过滤 │
│ ✅ 混合查询 │
│ │
│ 存储选项: │
│ ✅ 内存存储 │
│ ✅ 持久化存储 │
│ ✅ 分布式部署 │
│ │
└─────────────────────────────────────────────────────────────┘
4. 开源免费 #
text
┌─────────────────────────────────────────────────────────────┐
│ Chroma 开源免费 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Apache 2.0 许可证 │
│ - 商业友好 │
│ - 可自由使用、修改、分发 │
│ │
│ 活跃的社区: │
│ - GitHub 15k+ Stars │
│ - 活跃的 Discord 社区 │
│ - 持续的更新和维护 │
│ │
│ 丰富的资源: │
│ - 完整的文档 │
│ - 示例代码 │
│ - 教程和指南 │
│ │
└─────────────────────────────────────────────────────────────┘
Chroma 的应用场景 #
1. RAG 应用 #
text
┌─────────────────────────────────────────────────────────────┐
│ RAG 应用架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 用户 │ │ Chroma │ │ LLM │ │
│ │ 问题 │────>│ 检索 │────>│ 生成 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ │
│ │ 知识库 │ │ 回答 │ │
│ └─────────┘ └─────────┘ │
│ │
│ Chroma 优势: │
│ - 快速检索相关文档 │
│ - 支持大规模知识库 │
│ - 与 LangChain 无缝集成 │
│ │
└─────────────────────────────────────────────────────────────┘
2. 语义搜索 #
python
import chromadb
client = chromadb.Client()
collection = client.create_collection("documents")
collection.add(
documents=[
"Python 是一种编程语言",
"JavaScript 用于网页开发",
"机器学习是 AI 的子领域"
],
ids=["doc1", "doc2", "doc3"]
)
results = collection.query(
query_texts=["编程"],
n_results=2
)
3. 推荐系统 #
python
import chromadb
client = chromadb.Client()
products = client.create_collection("products")
products.add(
documents=[
"iPhone 15 Pro Max 256GB",
"Samsung Galaxy S24 Ultra",
"MacBook Pro 14英寸 M3"
],
metadatas=[
{"category": "phone", "brand": "Apple", "price": 9999},
{"category": "phone", "brand": "Samsung", "price": 8999},
{"category": "laptop", "brand": "Apple", "price": 14999}
],
ids=["p1", "p2", "p3"]
)
results = products.query(
query_texts=["苹果手机"],
where={"category": "phone"},
n_results=3
)
4. 问答系统 #
python
import chromadb
client = chromadb.Client()
qa_collection = client.create_collection("qa_pairs")
qa_collection.add(
documents=[
"Python 的创始人是 Guido van Rossum",
"JavaScript 由 Brendan Eich 创造",
"Chroma 是向量数据库"
],
metadatas=[
{"question": "谁创建了 Python?"},
{"question": "谁发明了 JavaScript?"},
{"question": "Chroma 是什么?"}
],
ids=["qa1", "qa2", "qa3"]
)
results = qa_collection.query(
query_texts=["Python 是谁发明的?"],
n_results=1
)
Chroma vs 其他向量数据库 #
对比分析 #
| 特性 | Chroma | Pinecone | Weaviate | Milvus |
|---|---|---|---|---|
| 开源 | ✅ | ❌ | ✅ | ✅ |
| 本地运行 | ✅ | ❌ | ✅ | ✅ |
| 易用性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 学习曲线 | 低 | 低 | 中 | 高 |
| 云服务 | ✅ | ✅ | ✅ | ✅ |
| 嵌入函数 | 内置 | 需外部 | 内置 | 需外部 |
| 元数据过滤 | ✅ | ✅ | ✅ | ✅ |
| 分布式 | ✅ | ✅ | ✅ | ✅ |
| 适合场景 | 原型/中小型 | 生产级 | 企业级 | 大规模 |
选择建议 #
text
┌─────────────────────────────────────────────────────────────┐
│ 选择指南 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 选择 Chroma 的场景: │
│ ✅ 快速原型开发 │
│ ✅ 中小规模应用 │
│ ✅ 本地开发和测试 │
│ ✅ 学习向量数据库 │
│ ✅ RAG 应用开发 │
│ │
│ 选择 Pinecone 的场景: │
│ ✅ 生产级应用 │
│ ✅ 无需管理基础设施 │
│ ✅ 高可用性要求 │
│ │
│ 选择 Weaviate/Milvus 的场景: │
│ ✅ 大规模数据 │
│ ✅ 企业级需求 │
│ ✅ 复杂查询场景 │
│ │
└─────────────────────────────────────────────────────────────┘
Chroma 的架构 #
text
┌─────────────────────────────────────────────────────────────┐
│ Chroma 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 客户端层 │ │
│ │ Python Client | JS Client | REST API │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ API 层 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │Collection│ │Document │ │ Query │ │Embedding│ │ │
│ │ │ Manager │ │ Manager │ │ Engine │ │Function │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 存储层 │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Vector │ │ Metadata │ │ Index │ │ │
│ │ │ Store │ │ Store │ │ (HNSW) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 后端层 │ │
│ │ SQLite | DuckDB | PostgreSQL | Distributed │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Chroma 的优势与局限 #
优势 #
text
✅ 简单易用
- 纯 Python 实现
- API 设计直观
- 零配置启动
✅ 功能完整
- 内置嵌入函数
- 支持元数据过滤
- 支持多种存储后端
✅ 开源免费
- Apache 2.0 许可
- 活跃的社区
- 持续更新
✅ 生产就绪
- 持久化存储
- 分布式支持
- 云服务可用
✅ 生态丰富
- LangChain 集成
- LlamaIndex 支持
- 多种嵌入模型
局限性 #
text
⚠️ 规模限制
- 适合中小规模数据
- 超大规模需考虑其他方案
- 分布式部署仍在完善
⚠️ 功能深度
- 相比 Milvus 功能较少
- 高级索引选项有限
- 复杂查询支持有限
⚠️ 企业特性
- 权限管理较基础
- 监控工具较少
- 审计功能有限
⚠️ 性能优化
- 大规模数据性能待优化
- 内存使用较高
- 并发处理能力有限
学习路径 #
text
入门阶段
├── Chroma 简介(本文)
├── 安装与配置
├── 第一个程序
└── 基本概念
基础阶段
├── 集合管理
├── 文档操作
├── 向量嵌入
└── 查询检索
进阶阶段
├── 高级配置
├── 框架集成
├── 性能优化
└── 生产部署
高级阶段
├── 分布式部署
├── 自定义扩展
├── 最佳实践
└── 故障排查
下一步 #
现在你已经了解了 Chroma 的基本概念,接下来学习 基础概念与安装,开始你的 Chroma 开发之旅!
最后更新:2026-04-04