Chroma:给 RAG 应用最轻量友好的向量数据库

Chroma:给 RAG 应用最轻量友好的向量数据库

智能体

📖 简介

Chroma 是主打开箱即用的开源向量数据库,一个 pip install 加三行代码就能给应用接入语义检索。20k+ Stars,本地优先、嵌入式部署、与 LangChain 无缝集成,RAG 入门与中小应用首选。

📝 详细介绍

开篇:你要完成什么

这篇教程带你从零装好 Chroma,跑通第一个"简历问答"Demo:把一段文档写入向量库,然后对它做自然语言检索,最终你在本地就能拿到一个可运行的 RAG 最小闭环。

前置条件

  • Python 3.8+:Chroma 基于 Python 开发,3.8 以下不支持
  • pip:安装包用,建议 21 以上
  • 无需 GPU:纯 CPU 就能跑通 Demo,内存 2GB 以上足够
  • 终端工具:macOS/Linux 用 bash,Windows 用 PowerShell 或 CMD
  • 建议虚拟环境:避免和全局 Python 依赖冲突

安装部署

1. 创建虚拟环境

python -m venv chroma-demo
source chroma-demo/bin/activate   # Windows 用 chroma-demoScriptsactivate

2. 安装 Chroma

pip install chromadb

会自动装上最新稳定版,以及依赖的 numpy、sqlite3 等库。

3. 验证安装

python -c "import chromadb; print(chromadb.__version__)"

能看到类似 0.4.24 的版本号,就说明装好了。

第一个 Demo:做一个小型文档问答

第一步:初始化客户端

这一步要创建 Chroma 客户端,并指定数据持久化的本地目录。

import chromadb

client = chromadb.PersistentClient(path="./chroma_data")

第二步:创建 Collection

Collection 相当于传统数据库的"表",用来存向量和元数据。这里指定余弦距离便于做语义检索。

collection = client.get_or_create_collection(
    name="demo_docs",
    metadata={"hnsw:space": "cosine"}
)

第三步:写入文档

Chroma 会自动帮你做文本向量化(默认用内置的 embedding 模型),你只需要提供文档内容、元数据和唯一 ID。

collection.add(
    documents=[
        "Chroma 是一个面向 AI 应用的轻量级向量数据库。",
        "RAG 应用通常先检索相关信息,再交给大语言模型生成答案。",
        "Chroma 支持持久化存储,适合快速搭建原型。"
    ],
    metadatas=[
        {"source": "intro"},
        {"source": "rag"},
        {"source": "feature"}
    ],
    ids=["doc_01", "doc_02", "doc_03"]
)

第四步:查询文档

输入一个自然语言问题,Chroma 会返回与它语义最相近的前两条记录。

results = collection.query(
    query_texts=["什么是 RAG?"],
    n_results=2
)

print(results)

预期输出

{
  "ids": [["doc_02", "doc_01"]],
  "documents": [["RAG 应用通常先检索相关信息,再交给大语言模型生成答案。", "Chroma 是一个面向 AI 应用的轻量级向量数据库。"]],
  "distances": [[0.12, 0.25]]
}

你会第一条就拿到解释 RAG 的那条记录——这就是向量检索的"语义匹配"效果。

配置与调优

1. 选择合适的距离函数

创建 Collection 时通过 {"hnsw:space": "cosine"} 指定距离算法。文本语义检索推荐 cosine,数值特征用 euclidean,Embedding 维度高且追求速度可以试 ip(内积)。

2. 设置批量写入大小

大量写入时不要一条条 add,建议每 128~256 条作为一个 batch。这样能显著减少网络和索引开销。

for i in range(0, len(docs), 128):
    batch = docs[i:i+128]
    collection.add(documents=batch)

3. 关闭隐性 Embedding 调用

如果外部已经生成好向量,直接传 embeddings 参数,并跳过 documents。否则 Chroma 每次都会调用内置 embedding 模型,白白浪费时间。

collection.add(
    embeddings=[[0.1, 0.2, ...], [0.3, 0.4, ...]],
    ids=["v1", "v2"]
)

常见坑与排错

报错信息 原因 解决办法
sqlite3.OperationalError: no such table: data Chroma 版本与依赖不同步,或旧缓存数据冲突 更新 chromadb 到最新版,删除旧的 ./chroma_data 目录后重试
ModuleNotFoundError: No module named 'chromadb' 虚拟环境未激活或安装失败 source chroma-demo/bin/activate,再重新 pip install chromadb
UnicodeEncodeError: 'gbk' codec can't encode character Windows 下终端默认编码不支持中文字符 执行 set PYTHONIOENCODING=utf-8 再运行脚本
java.lang.OutOfMemoryError(运行大模型时) 内存堆设置不足 调用 Chroma 时增加系统的虚拟内存,或减少 batch_size 并限制导入的文档数量

下一步

1. 接入真实 LLM 构建完整 RAG

把查询结果交给 OpenAI 或本地模型(如 Ollama),让 AI 根据检索到的文档片段生成回答,形成一个真正的问答机器人。

2. 使用 Metadata 过滤与复杂查询

探索 Chroma 的 where 参数,按来源、日期或标签过滤检索范围,提升结果精准度。

3. 服务化部署与多客户端接入

chroma run --path ./chroma_data 启动服务端,从 Web 或另一个 Python 进程通过 HTTP API 来读写数据,为前后端分离做铺垫。

你现在已经能跑通最小 Demo 了,剩下的就是在真实场景里不断打磨数据清洗和提示词策略。遇到问题欢迎回到文档或者社区看看,Chroma 的生态还在快速增长,坑也填得很快。

🚀

AI 项目推荐

智能体
标签
#向量数据库 #RAG #嵌入检索 #开源
浏览
👁️ 45
发布日期
2026-08-10