Chroma 快速入门与双栈实战指南
本文是一份 Chroma 向量数据库的入门实战指南,面向 RAG 与知识库场景,介绍 Python 与 JavaScript 双栈的安装部署、核心 API(collection 增删改查、add/query)、数据写入与检索过滤,并简要说明本地部署迁移到 Chroma Cloud 的方法,帮助开发者快速上手搭建语义检索能力。
Chroma 快速入门:Python 与 JavaScript 双栈指南
1. Chroma 简介与定位
Chroma 是一款面向 AI 应用的开源向量数据库(vector database),在 RAG(Retrieval-Augmented Generation)、知识库与语义搜索等场景中,通常承担文档存储与语义检索的核心角色。
它同时提供 Python 与 JavaScript/Node.js 两种官方客户端,开发者可以按技术栈选择安装方式:
- Python:
pip install chromadb - JavaScript/Node.js:
npm install chromadb
接下来,我们将从安装部署开始,逐步介绍其核心 API 与进阶能力。
2. 安装与本地部署
Chroma 的安装非常轻量:
# Python 客户端
pip install chromadb
# JavaScript/Node.js 客户端
npm install chromadb
# 启动持久化的 client-server 服务
chroma run --path /chroma_db_path
默认情况下,Python 客户端 chromadb.Client() 以内存模式(in-memory)运行,适合快速原型开发。若需要数据持久化或对外提供服务,可切换到 client-server 模式,并通过 --path 指定持久化路径。JavaScript 客户端则采用 client-server 架构,需连接到一个运行中的 Chroma 服务。
生产环境的多节点部署、高可用、权限控制等运维细节,建议参考官方文档。
3. 核心 API 与使用流程
完成部署后,即可通过 Chroma 的核心 API 进行操作。常用的入口方法只有四个:create_collection、add、query 与 get。
Python 示例
import chromadb
# 默认内存模式,便于快速原型
client = chromadb.Client()
# 创建 collection;也支持 get_collection / get_or_create_collection / delete_collection
collection = client.create_collection("all-my-documents")
# 写入文档
collection.add(
documents=["This is document1", "This is document2"],
metadatas=[{"source": "notion"}, {"source": "google-docs"}],
ids=["doc1", "doc2"],
)
# 语义检索
results = collection.query(
query_texts=["This is a query document"],
n_results=2,
)
JavaScript 示例
JavaScript 客户端的调用方式与 Python 类似,区别在于它通过 HTTP 与服务端交互:
import { ChromaClient } from "chromadb";
const client = new ChromaClient();
const collection = await client.getOrCreateCollection({ name: "all-my-documents" });
await collection.add({
ids: ["doc1", "doc2"],
documents: ["This is document1", "This is document2"],
metadatas: [{ source: "notion" }, { source: "google-docs" }],
});
const results = await collection.query({
queryTexts: ["This is a query document"],
nResults: 2,
});
collection 是 Chroma 中组织数据的基本单元,支持创建、获取、删除等管理操作。
4. 数据写入与检索能力
在写入侧,collection.add() 会自动完成 embedding 与 indexing。如果不指定 embedding function,Chroma 会使用默认的 embedding 函数将文档转换为向量;当然,也可以传入自定义 embeddings 以满足更灵活的需求。
在检索侧,collection.query() 支持基于文本的相似度检索,并可通过以下方式过滤:
where:按 metadata 字段过滤where_document:按文档内容过滤(例如$contains)
results = collection.query(
query_texts=["This is a query document"],
n_results=2,
where={"source": "notion"},
where_document={"$contains": "query"}
)
5. Chroma Cloud 与扩展能力
除了本地与自托管部署,Chroma 还提供托管服务 Chroma Cloud,支持 serverless 向量搜索、混合搜索(hybrid search)与全文搜索(full-text search)。官方强调其在速度、成本、可扩展性和易用性方面的优势,新用户可以快速创建数据库并获得免费额度。
由于 Chroma 客户端天然采用 client-server 架构,从本地原型迁移到 Chroma Cloud 或自托管生产环境时,通常只需修改服务端点配置即可。
6. 开源生态与贡献
Chroma 采用 Apache 2.0 许可证,社区活跃,开发者可以通过以下方式参与:
- 加入 Discord 的
#contributing频道 - 在 GitHub Issues 中认领
good first issue - 阅读 Contributing Guide
Release Cadence:pypi 与 npm 包目前每周一发布新版本,hotfix 会随时发布。
原文来源:chroma-core/chroma README
原文链接
相关文章
LangGraph 多 Agent RAG 框架实战
本文介绍 LangGraph 这一面向长周期、有状态智能体的低级别编排框架,通过 StateGraph 构建“检索→相关性判断→生成答案”的多 Agent RAG 工作流,并提供可直接运行的完整代码示例,帮助开发者理解如何在复杂检索场景中实现持久执行、人机回环与生产化部署。
阅读更多RAG 三大范式与技术体系论文解读
文章系统解读了 RAG 综述论文,梳理了从 Naive RAG、Advanced RAG 到 Modular RAG 的三大范式演进,并深入解析检索、生成与增强三大核心技术,帮助读者理解 RAG 如何缓解 LLM 幻觉与知识滞后问题,构建更可信的知识密集型应用。
阅读更多