Chroma

Chroma

开源向量数据库,几行代码完成文档入库与语义检索

核心功能

Chroma 是核心用 Rust 编写的开源向量数据库,主打最短接入路径:装完包后三行代码就能建集合、写入原始文本并检索,向量化自动完成。适合做 RAG 原型和中小规模应用的开发者。相比要先部署服务端的同类,它可先在进程内跑,再切到落盘、client-server 或 Chroma Cloud。

功能亮点

文本直接入库

collection.add 只传 ids 与 documents,向量化自动完成

四形态同 API

内存态、PersistentClient、HttpClient 与云端共用一套接口

命令行管库

chroma run --path 一句起本地服务,另有 chroma db 系列命令

单节点部署轻

docker run -p 8000:8000 chromadb/chroma 起服务端

适用场景

• 在 Jupyter Notebook 里快速验证 RAG 检索效果,用内存态客户端跑完即弃
• 本地知识库工具,用 PersistentClient 把数据落到磁盘目录并在启动时自动加载
• 小型应用的检索后端,docker run 起单节点服务后由各语言客户端通过 HTTP 接入

安装配置

bash
Python:
pip install chromadb

JavaScript / TypeScript:
npm install chromadb @chroma-core/default-embed

Rust:
cargo add chroma

以 client-server 模式在本地起服务(数据落到指定目录):
chroma run --path /db_path

npm 环境下等价命令:
npx chroma run --path ./getting-started

Docker:
docker pull chromadb/chroma
docker run -p 8000:8000 chromadb/chroma

说明:服务端默认地址是 http://localhost:8000;--path 不指定时默认目录为 .chroma。

使用方法

javascript
Python 完整示例(内存态客户端):
import chromadb
chroma_client = chromadb.Client()

# 用 get_or_create_collection 避免每次都新建集合
collection = chroma_client.get_or_create_collection(name="my_collection")

# 用 upsert 避免重复写入同样的文档
collection.upsert(
    documents=[
        "This is a document about pineapple",
        "This is a document about oranges"
    ],
    ids=["id1", "id2"]
)

results = collection.query(
    query_texts=["This is a query document about florida"],  # Chroma 会自动为这句话生成向量
    n_results=2
)

print(results)

数据落盘(PersistentClient):
import chromadb

client = chromadb.PersistentClient(path="/path/to/save/to")

连接独立部署的服务端:
import chromadb
chroma_client = chromadb.HttpClient(host='localhost', port=8000)

TypeScript:
import { ChromaClient } from "chromadb";
const client = new ChromaClient();

const collection = await client.getOrCreateCollection({
  name: "my_collection",
});

await collection.upsert({
  documents: [
    "This is a document about pineapple",
    "This is a document about oranges",
  ],
  ids: ["id1", "id2"],
});

const results = await collection.query({
  queryTexts: ["This is a query document about florida"],
  nResults: 2,
});

关键指标

尚未核验对标产品,此处只列本工具自身指标,不做对比结论。

指标Chroma
价格免费增值
开源
上手难度入门

相关工具

优点

  • Python / TypeScript 客户端接收原始文本即可,官方 quickstart 从安装到检索只有 add 与 query 两步
  • Apache 2.0 开源,核心用 Rust 实现,官方同时维护 Python、TypeScript、Rust 三种客户端
  • 内存态、PersistentClient、HttpClient、CloudClient 共用一套 API,切换运行形态基本不改业务代码
  • 自带 CLI,chroma run 起本地服务、chroma db connect --env-file 生成云端连接配置都是单条命令

缺点

  • 官方 getting started 用的是 in-memory 客户端,程序结束数据即丢失,持久化必须改用 PersistentClient 或 client-server 模式
  • JS/TS 客户端不能嵌入式运行,必须先用 npx chroma run 或 Docker 起一个 Chroma server 才能连接
  • Rust 客户端不做自动向量化,官方说明需要先用模型 SDK 生成 embedding 再随文档一起传入
  • client.reset() 会清空并重置整个数据库,官方以 WARNING 标注为破坏性且不可逆的操作