目录
  1. 1. 目录
  2. 2. 项目速览
  3. 3. 功能概述
    1. 3.1. 极简核心 API — 只有 4 个方法
    2. 3.2. 零配置嵌入:DefaultEmbeddingFunction
    3. 3.3. 自定义 Embedding 函数
    4. 3.4. 元数据过滤与混合检索
    5. 3.5. 多模态与 Chroma Cloud
  4. 4. 适用场景
    1. 4.1. 快速原型开发与 Hackathon
    2. 4.2. 中小规模 RAG 知识库
    3. 4.3. 本地优先的 AI 应用
    4. 4.4. 教育与学习
    5. 4.5. Agent 记忆存储
  5. 5. 快速上手
    1. 5.1. 环境要求
    2. 5.2. 安装
    3. 5.3. 最简示例:内存模式 RAG
    4. 5.4. 持久化模式
  6. 6. 源码架构
  7. 7. 实操 Demo
  8. 8. 同类对比
  9. 9. 参考资源
Chroma — 轻量级开源 AI 原生向量数据库

GitHub: chroma-core/chroma
Stars: 28,400+ | Language: Rust (69.1%), Python (15.7%), TypeScript (6.7%) | License: Apache 2.0
官网: trychroma.com | 最新版本: v1.5.9 (2026-05-05)

目录

  1. 项目速览
  2. 功能概述
  3. 适用场景
  4. 快速上手
  5. 源码架构
  6. 实操 Demo
  7. 同类对比
  8. 参考资源

项目速览

Chroma 由 chroma-core 团队开发,定位为”the open-source data infrastructure for AI”,是目前最易上手的 AI 原生向量数据库之一。截至 2026 年 6 月,项目在 GitHub 上已获得超过 28,400 颗 Star,累计发布 137 个版本,社区活跃度持续攀升。

Chroma 的核心理念是”极简”:核心 API 仅包含 4 个方法,开发者几乎无需学习成本即可在 AI 应用中集成向量存储与语义检索能力。它同时支持内存模式(零配置原型开发)和持久化模式(生产环境部署),并提供 Chroma Cloud 托管服务。Chroma 的设计哲学是”batteries-included”:开箱即用地自动完成文本分词、Embedding 生成和索引构建,同时也支持用户自定义 Embedding 函数与向量索引策略。

Chroma 的典型用户画像覆盖从独立开发者到中小团队的广泛群体——那些需要一个”just works”的向量数据库,而不是花数小时配置集群和调优参数。

功能概述

极简核心 API — 只有 4 个方法

Chroma 的设计哲学极度推崇简洁。核心 API 仅包含 addquerygetdelete 四个方法,几乎不需要阅读文档即可凭直觉使用:

import chromadb
client = chromadb.Client()

# 创建或获取 collection
collection = client.get_or_create_collection(name="my_docs")

# 添加文档 — Chroma 自动完成分词、Embedding 和索引
collection.add(
ids=["doc1", "doc2"],
documents=[
"This is a document about pineapple",
"This is a document about oranges"
],
metadatas=[{"source": "web"}, {"source": "book"}]
)

# 查询 — Chroma 自动将查询文本转为向量并检索
results = collection.query(
query_texts=["tropical fruits"],
n_results=2
)

返回结果包含 idsdocumentsdistancesmetadatas 四个字段,结构清晰可直接使用。

零配置嵌入:DefaultEmbeddingFunction

在未指定 Embedding 函数时,Chroma 使用内置的 DefaultEmbeddingFunction(基于 all-MiniLM-L6-v2 模型),完全零配置即可运行。这意味着首次使用时无需注册任何 API Key,极大降低了入门门槛。

自定义 Embedding 函数

对于生产级场景,Chroma 支持灵活的 Embedding 函数定制:

from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction

collection = client.create_collection(
name="production_docs",
embedding_function=OpenAIEmbeddingFunction(
model_name="text-embedding-3-small"
)
)

开发者还可以通过继承 EmbeddingFunction 基类并实现 __call__ 方法来注册自定义 Embedding 函数,支持 @register_embedding_function 装饰器的热插拔注册机制。

元数据过滤与混合检索

Chroma 支持在查询时基于元数据进行精确过滤。结合向量相似度检索和元数据条件筛选,可实现”语义相似 + 条件约束”的混合检索。where 过滤条件支持 $eq$ne$gt$gte$lt$lte$in$nin 等丰富操作符,以及 $and$or 逻辑组合。

多模态与 Chroma Cloud

Chroma 支持多模态 Embedding(图片、音频等),通过自定义 Embedding 函数可将任意模态的数据映射到向量空间。Chroma Cloud 提供全托管服务,支持向量检索、全文检索和混合检索(hybrid search),SDK 覆盖 Python 和 JavaScript/TypeScript。

适用场景

快速原型开发与 Hackathon

Chroma 的最大优势在于其极致简单。在内存模式下,只需 pip install chromadb 并写 5 行代码,即可拥有一个功能完备的向量数据库。对于需要快速验证 RAG 想法的原型开发、Hackathon 项目或课程实验,Chroma 是最佳选择。

中小规模 RAG 知识库

当文档量在十万到百万级别时,Chroma 的持久化模式可以提供稳定可靠的向量检索服务。结合 LangChain、LlamaIndex 等框架的 Chroma 集成,可以快速搭建企业文档问答、客服知识库等 RAG 系统。

本地优先的 AI 应用

Chroma 的内存模式和轻量持久化非常适合运行在用户本地的 AI 应用中。例如,桌面端的个人知识管理工具、本地代码库语义搜索等场景,Chroma 的零配置特性使其成为理想的嵌入方案。

教育与学习

Chroma 极简的 API 设计使其成为教学向量数据库和 RAG 概念的理想工具。学生可以在几分钟内上手,直观理解向量嵌入、语义相似度检索等核心概念。

Agent 记忆存储

在 AI Agent 系统中,Chroma 可以作为 Agent 的长期记忆存储后端。Agent 将历史对话、用户偏好、任务经验等以向量的形式存储,在需要时通过语义检索召回相关记忆。

快速上手

环境要求

  • Python 3.9+
  • (可选)OpenAI API Key(使用 OpenAI Embedding 时需要)

安装

pip install chromadb

最简示例:内存模式 RAG

import chromadb

# 1. 创建内存模式客户端(数据在进程退出后丢失)
client = chromadb.Client()

# 2. 创建 collection
collection = client.get_or_create_collection(name="quickstart")

# 3. 添加文档
collection.add(
ids=["doc_1", "doc_2", "doc_3"],
documents=[
"LangChain is a framework for building LLM applications.",
"Chroma is an open-source vector database for AI.",
"RAG combines retrieval with generation for grounded answers."
]
)

# 4. 语义检索
results = collection.query(
query_texts=["what is a vector database?"],
n_results=2
)

print(results["documents"])
# [['Chroma is an open-source vector database for AI.', 'LangChain is a framework for building LLM applications.']]

持久化模式

import chromadb

# 数据将持久化到 ./chroma_data 目录
client = chromadb.PersistentClient(path="./chroma_data")
collection = client.get_or_create_collection(name="persistent_docs")

# 此后的 add/query 操作数据不会丢失
collection.add(
ids=["doc_1"],
documents=["This document will persist across sessions."]
)

源码架构

Chroma 采用 Rust + Python 混合架构,核心引擎用 Rust 编写以获得极致性能,Python 层提供用户友好的 API 接口:

chroma/
├── rust/ # Rust 核心引擎
│ ├── worker/ # 查询执行与索引管理
│ ├── segment/ # 数据段与存储引擎
│ ├── index/ # 向量索引(HNSW)
│ └── types/ # 数据类型定义
├── chromadb/ # Python SDK 与 API 层
│ ├── api/ # FastAPI 服务端(HTTP + gRPC)
│ ├── db/ # 数据库抽象层
│ ├── segment/ # 分段存储管理
│ │ ├── impl/
│ │ │ ├── vector/ # 向量索引实现
│ │ │ └── metadata/ # 元数据索引与过滤
│ │ └── distributed/ # 分布式协调
│ ├── utils/
│ │ └── embedding_functions/# 内置 Embedding 函数
│ ├── telemetry/ # 遥测与产品分析
│ └── test/ # 测试套件
├── clients/ # 客户端 SDK(Python/JS)
├── go/ # Go 客户端
├── idl/ # 接口定义语言(Protobuf)
├── deployments/ # 部署配置
├── k8s/ # Kubernetes 部署资源
├── docs/ # 文档站点
├── examples/ # 示例应用
└── Cargo.toml / pyproject.toml # 项目配置
  • **rust/**:Chroma 的性能核心。向量索引基于 HNSW 算法实现,在 Rust 层面完成全部计算密集型操作。数据分段(segment)机制支持高效的增删改和压缩。
  • **chromadb/**:面向开发者的 Python 层,封装了 FastAPI 服务端、数据库抽象、Embedding 函数管理等。API 设计严格遵循”simple things simple, complex things possible”原则。
  • **chromadb/api/**:提供两种服务端模式——本地嵌入模式(嵌入式 Chroma 直接运行在应用中)和客户端-服务器模式(通过 HTTP/gRPC 连接远程 Chroma 实例)。
  • **chromadb/utils/embedding_functions/**:内置 OpenAI、Cohere、HuggingFace、SentenceTransformers 等多种 Embedding 函数,同时支持自定义注册。

实操 Demo

下面是一个完整的 RAG 问答系统 Demo,演示 Chroma 与 LangChain 集成,从网页加载文档到语义检索问答。

"""
完整的 RAG 问答系统 Demo
功能:网页抓取 → 文本分割 → Chroma 向量存储 → 语义检索 → LLM 生成答案
"""

from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

# 1. 加载文档
print("[1/5] 正在加载文档...")
loader = WebBaseLoader(
web_paths=["https://docs.trychroma.com/docs/overview/introduction"]
)
docs = loader.load()
print(f" 加载了 {len(docs)} 个文档,约 {len(docs[0].page_content)} 字符")

# 2. 文本分割
print("[2/5] 正在分割文本...")
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separators=["\n\n", "\n", ". ", " ", ""]
)
splits = text_splitter.split_documents(docs)
print(f" 分割为 {len(splits)} 个文本块")

# 3. 构建 Chroma 向量数据库
print("[3/5] 正在构建 Chroma 向量数据库...")
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(
documents=splits,
embedding=embeddings,
collection_name="chroma_docs",
persist_directory="./chroma_demo_db" # 持久化到磁盘
)
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 4}
)
print(f" Chroma 向量库已就绪,数据持久化至 ./chroma_demo_db")

# 4. 构建 RAG 链
print("[4/5] 正在构建 RAG 链...")
template = """基于以下上下文回答问题。如上下文信息不足,请如实说明不知道。

上下文:
{context}

问题:{question}

答案:"""

prompt = ChatPromptTemplate.from_template(template)
llm = ChatOpenAI(model="gpt-4o", temperature=0)

rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)

# 5. 问答测试
print("[5/5] 开始问答\n")

questions = [
"Chroma 是什么?",
"Chroma 支持哪些 Embedding 方式?",
"Chroma 可以持久化存储吗?",
]

for i, q in enumerate(questions, 1):
print(f"--- 问题 {i} ---")
answer = rag_chain.invoke(q)
print(f"问:{q}")
print(f"答:{answer}\n")

# 额外:查看检索结果
print("=== 检索示例 ===")
retrieved = retriever.invoke("Chroma 的持久化存储")
for i, doc in enumerate(retrieved):
print(f"[文档块 {i+1}] {doc.page_content[:150]}...")

运行前提:

pip install langchain langchain-community langchain-openai langchain-text-splitters chromadb

export OPENAI_API_KEY="sk-..."

同类对比

特性 Chroma Qdrant Weaviate Milvus
Stars 28,400+ 32,300+ 16,300+ 44,800+
核心语言 Rust Rust Go Go
部署复杂度 极低(pip install) 低(Docker / 嵌入式) 中等(Docker Compose) 中高(K8s 推荐)
API 复杂度 极简(4 个核心方法) 丰富(REST + gRPC) 丰富(GraphQL + REST + gRPC) 丰富(Python/Java/Go/Node SDK)
内置 Embedding 是(all-MiniLM-L6-v2) 否(需手动计算) 是(OpenAI/Cohere/HF 等) 否(需手动计算)
混合检索 Chroma Cloud 支持 RRF / DBSF 融合 BM25 + 向量混合 BM25/SPLADE + 向量混合
分布式扩展 Chroma Cloud 水平分片 + 复制 水平扩展 + 复制 存算分离 + K8s 原生
最佳数据规模 中小规模(万~百万级) 中大规模(百万~亿级) 中等规模(万~亿级) 大规模(亿~千亿级)
学习曲线 极低 中等 中高

分析:Chroma 的核心定位是”最简单易用的向量数据库”。它的优势不在于性能极限或大规模分布式能力,而在于开箱即用的开发体验。对于那些不需要处理十亿级向量数据的场景,Chroma 是一个性价比极高的选择。5 个核心 API 方法、内置 Embedding、零配置内存模式,让开发者可以在几分钟内将向量检索集成到应用中。当项目成长到需要分布式扩展时,可以迁移到支持更完善的 Milvus 或 Qdrant。

参考资源

文章作者: Leo·Cheung
文章链接: http://tufusi.com/2026/06/15/SKILL-Chroma/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ONE·PIECE
打赏
  • 微信
  • 支付宝

评论