ChromaDB 向量数据库

介绍

ChromaDB 是AI原生、轻量级、开源嵌入式向量数据库,专为 LLM/RAG、语义检索、AI Agent 记忆系统设计,主打“开箱即用、本地优先、极简API”,是当前 AI 圈最普及的轻量向量库之一。

  • 全称:Chroma(官方简称,常称 ChromaDB)
  • 开发主体:Chroma Labs(AI 初创公司),核心维护者 Jeff Huber
  • 开源协议:Apache 2.0(完全免费,商用无限制)
  • 首次发布:2023年
  • 最新版本:0.5.x(2026年3月)
  • GitHub 星数:≈15.8k(AI 向量库中关注度最高)
  • 支持语言:Python(主),支持 JavaScript/Go/REST API

定位

  • 专为 AI 场景:深度适配 LLM、RAG、语义搜索、AI Agent 记忆存储
  • 本地优先:默认嵌入式运行,零依赖、无需独立服务进程
  • 极简开发:API 极度简洁,降低向量数据库使用门槛
  • 嵌入式/服务化双模式:既可嵌入应用,也可独立部署为服务

设计哲学

  • 简单即强大:核心 API 仅 4 个主函数,5 分钟上手
  • 开发者友好:屏蔽底层向量索引细节,专注业务逻辑
  • 灵活扩展:从原型到轻量生产平滑过渡,支持多模态向量

优缺点

成熟度

  • 优点:
    • 社区活跃,文档完善,问题解决快
    • API 稳定,迭代快,bug 修复及时
    • 轻量无运维,部署成本极低
  • 缺点:
    • 分布式能力弱,无官方集群方案
    • 大规模性能不如专业向量库(如 Pinecone/Qdrant)
    • 高级功能(如实时更新、分片)有限

生产环境建议

  • 适合:
    • 中小团队 RAG 系统(≤100万向量)
    • AI 原型快速落地
    • 内部工具、低并发场景
  • 不适合:
    • 互联网高并发、超大规模向量检索
    • 强一致性、事务型业务

应用场景

首选场景

  • RAG 系统:企业知识库问答、文档检索、客服机器人(最主流)
  • AI Agent 记忆:长期记忆存储、上下文管理、用户偏好检索
  • 语义搜索:内部文档、产品库、内容平台的语义检索
  • 轻量推荐:内容/商品个性化推荐(小体量)
  • 多模态检索:文本+图像/音频的跨模态搜索

不适合场景

  • 超大规模向量(>1000万):扩展性有限,无分布式集群
  • 强事务/高并发:不支持 ACID 事务,并发写入性能一般
  • 大数据融合:与 Spark/Flink 等大数据生态集成弱

核心架构(分层设计)

┌─────────────────────────────────────────┐
│ 应用层(Python/JS/REST API)            │
│  - 核心 API:Collection 增删改查         │
│  - 嵌入函数(自动/自定义)               │
└─────────────────────┬───────────────────┘
┌─────────────────────┴───────────────────┐
│ 核心层(Chroma Core)                   │
│  - 集合管理:创建/删除/加载 Collection   │
│  - 向量处理:存储/索引/ANN 检索          │
│  - 元数据过滤:PQL 语法复杂查询          │
└─────────────────────┬───────────────────┘
┌─────────────────────┴───────────────────┐
│ 存储层(Storage Backend)                │
│  - 内存存储(默认,临时)                 │
│  - 持久化:SQLite(默认)/DuckDB         │
│  - 索引:HNSW(默认)/Flat(精确检索)    │
└─────────────────────────────────────────┘

概念

1. Collection(集合)

  • 类比关系型数据库的 “表”,是向量+元数据+原始文档的一体化容器
  • 支持独立配置:距离度量、嵌入函数、索引参数
  • 一个客户端可管理多个 Collection,实现数据隔离

2. 核心数据结构(每条记录)

  • ids:唯一标识(字符串,必填)
  • embeddings:高维向量(如 768/1536 维,自动生成或手动传入)
  • documents:原始文本/内容(可选,Chroma 可自动生成向量)
  • metadatas:JSON 元数据(如来源、时间、标签,用于过滤)

3. 距离度量(支持 3 种)

  • L2(欧氏距离,默认):适合稠密向量、常规语义检索
  • cosine(余弦相似度):适合文本语义、归一化向量
  • ip(内积):适合推荐系统、协同过滤场景

4. 索引算法

  • HNSW(默认):分层可导航小世界,百万级向量毫秒级检索
  • Flat:暴力精确检索,适合小数据量(≤10万)、追求100%准确率

特性

1. 部署模式(灵活适配)

  • 嵌入式模式(默认):直接嵌入 Python/JS 应用,零配置、无服务进程,适合原型/本地开发
  • 持久化模式:数据落地 SQLite/DuckDB 文件,重启不丢失
  • 服务模式:chroma run 启动 REST 服务,支持多客户端、分布式访问
  • Docker 部署:一键容器化,适配云原生/生产环境

2. 嵌入函数(自动/自定义)

  • 内置嵌入:轻量级本地模型,无需外部 API,开箱即用
  • 第三方集成:无缝对接 OpenAI、Cohere、HuggingFace、Sentence-BERT 等
  • 自定义嵌入:支持传入预计算向量,适配任何模型

3. 检索能力(向量+元数据双引擎)

  • 语义检索:基于向量相似度,返回最相关结果
  • 元数据过滤(PQL 语法):支持 $and/$or/$gt/$lt/$contains 等复杂条件,先过滤再检索,大幅提升效率
  • MMR(最大边际相关性):解决结果冗余,返回多样化结果
  • 分页/排序:支持结果分页与自定义排序

4. 多模态支持

  • 不仅支持文本向量,还可存储图像(CLIP)、音频、视频等多模态向量,实现跨模态检索

5. 生态集成(AI 开发必备)

  • 深度集成:LangChain、LLamaIndex、AutoGPT、LangGraph 等主流 AI 框架的默认轻量向量库
  • 多语言客户端:Python、JavaScript、Go、REST API,适配全栈开发
  • 工具链:支持 Jupyter/Colab、CLI、可视化工具

安装

pip 安装

pip install chromadb

poetry 安装

poetry add chromadb

服务模式启动

一般不用

chroma run --path ./chroma_data

例子

1. 创建对象

import chromadb

# 1. 内存客户端(临时,测试用)
client = chromadb.Client()

# 2. 持久化客户端(数据落地文件)
# client = chromadb.PersistentClient(path="./chroma_data")

# 3. 服务端客户端(连接独立服务)
# client = chromadb.HttpClient(host="localhost", port=8000)

2. 集合管理

# 创建集合(不存在则创建,存在则获取)
collection = client.get_or_create_collection(
    name="my_knowledge_base",
    metadata={"description": "内部文档知识库"},
    embedding_function=chromadb.utils.embedding_functions.DefaultEmbeddingFunction()
)

# 删除集合
# client.delete_collection(name="my_knowledge_base")

3. 添加数据(自动嵌入+索引)

collection.add(
    documents=[
        "ChromaDB 是轻量级向量数据库,专为 RAG 设计",
        "LanceDB 基于 Arrow,适合大数据+向量融合场景"
    ],
    metadatas=[
        {"source": "技术博客", "category": "向量库"},
        {"source": "技术博客", "category": "向量库"}
    ],
    ids=["doc_001", "doc_002"]
)

4. 检索(语义+过滤)

# 基础语义检索
results = collection.query(
    query_texts=["轻量级 RAG 向量库"],
    n_results=2,
    # 元数据过滤:只查 category=向量库
    where={"category": "向量库"},
    # 文档内容过滤:包含 Chroma
    where_document={"$contains": "Chroma"}
)

# 结果返回:ids、distances、documents、metadatas
print(results["documents"])

性能与规模

生产环境参考

  • 数据规模:单机支持 百万级向量(HNSW 索引)
  • 检索延迟:百万向量下 <10ms(HNSW)
  • 内存占用:轻量,百万向量内存占用 <1GB
  • 写入性能:每秒数千条向量写入(取决于硬件)
  • 适用上限:≤100万向量的轻量生产场景;超百万建议考虑 LanceDB/Qdrant 等

与 LanceDB 差异(选型)

维度 ChromaDB LanceDB
定位 AI/RAG 优先,轻量嵌入式 大数据+向量融合,列式存储
星数 ≈15.8k(AI 圈高) ≈7.2k(大数据圈高)
存储 SQLite/DuckDB Lance(Arrow 列式)
生态 LangChain/LLM 原生 Pandas/Spark/Arrow 原生
规模 ≤100万向量 ≤1000万向量
生产 轻量 RAG/AI Agent 大数据+向量、企业级生产

总结

ChromaDB 是AI 开发者的首选轻量向量库,以极简 API、零依赖部署、深度 AI 生态集成,成为 RAG/AI Agent 开发的事实标准。适合快速原型、中小规模 RAG 生产;若需大数据融合、更大规模向量,建议选择 LanceDB 等更专业的向量数据库。