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