Chroma:为 AI 而生的开源向量数据库,RAG 系统的最简选择
📖 简介
📝 详细介绍
AI 应用需要记忆
大模型本身没有"记忆"——每次对话都是独立的,它记不住你昨天说过什么。要让 AI 拥有长期记忆,需要把信息转化为向量(embedding)存储在专门数据库中,在需要时做语义检索。这就是向量数据库的用武之地。
现有的向量数据库(Pinecone、Weaviate、Milvus)功能强大,但配置复杂、运维成本高。对于个人开发者和中小型项目来说太重了。Chroma 的定位就是"最轻量、最易用的向量数据库"。
GitHub 数据
| 指标 | 数据 |
|---|---|
| Stars | 18,000+ |
| 主语言 | Python / Rust |
| 开源协议 | Apache 2.0 |
| 最近更新 | 2026 年 7 月 |
| 核心定位 | Embedding 数据库(不是通用向量 DB) |
核心体验:极简到离谱
pip install chromadb
# 创建向量数据库
import chromadb
client = chromadb.Client()
# 创建集合
collection = client.create_collection(name="my_docs")
# 添加文档(自动 embedding)
collection.add(
documents=["今天天气真好", "机器学习的核心是数据", "北京的秋天最美"],
metadatas=[{"source": "diary"}, {"source": "book"}, {"source": "note"}],
ids=["doc1", "doc2", "doc3"]
)
# 语义搜索
results = collection.query(
query_texts=["北京的季节"],
n_results=2
)
print(results)
是的,就这么简单——不需要配置、不需要部署 Docker、不需要写 schema。Chroma 会自动调用内置的 embedding 模型(all-MiniLM-L6-v2)将文本转为向量。
灵活的使用模式
模式一:内存模式(开发/原型)
# 数据存在内存中,重启即失
client = chromadb.Client()
模式二:持久化模式(个人/小团队)
# 数据存在磁盘,重启不丢失
client = chromadb.PersistentClient(path="./chroma_data")
模式三:客户端-服务端模式(生产环境)
# 启动服务端
chroma run --path /data/chroma --port 8000
# 客户端连接
client = chromadb.HttpClient(host="localhost", port=8000)
与 RAG 生态的集成
Chroma 与主流 AI 框架的集成非常丝滑:
LangChain 集成
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
vector_store = Chroma.from_documents(
documents=documents,
embedding=OpenAIEmbeddings(),
persist_directory="./chroma_langchain"
)
retriever = vector_store.as_retriever(search_kwargs={"k": 3})
LlamaIndex 集成
from llama_index.core import VectorStoreIndex
from llama_index.vector_stores.chroma import ChromaVectorStore
vector_store = ChromaVectorStore(chroma_collection=collection)
index = VectorStoreIndex.from_documents(
documents, vector_store=vector_store
)
高级功能
元数据过滤
支持在向量搜索的同时做结构化过滤:
collection.query(
query_texts=["报告"],
where={"category": "finance"}, # 等于
where_document={"$contains": "季度"} # 文档内容包含
)
多模态嵌入
不仅支持文本,还支持图像和音频的 embedding 存储和检索。你可以在同一个集合中混合存储不同类型的数据。
批量和更新
# 批量更新文档
collection.update(
ids=["doc1"],
documents=["修改后的内容"],
metadatas=[{"source": "diary", "updated": True}]
)
# 删除
collection.delete(ids=["doc2"])
技术架构
Chroma 的核心是一个 Rust 编写的向量索引引擎(基于 HNSW 算法)加上 Python 封装层。Rust 保证了性能和内存安全,Python 提供了易用性。默认使用的 embedding 模型是 ONNX Runtime 运行,无需 GPU 也能快速推理。
Chroma 与通用向量数据库(如 Milvus、Weaviate)最大的区别在于:它不是一个分布式数据库,而是一个内嵌式的 embedding 存储。不是什么场景都需要分布式——对于个人知识库、原型验证、中小型 RAG 应用来说,Chroma 的简洁正是它的最大优势。
同类对比
| 方案 | 部署难度 | API 简洁度 | 分布式 | 生态集成 |
|---|---|---|---|---|
| Chroma | ★★★★★ | ★★★★★ | ★ | ★★★★★ |
| Milvus | ★★ | ★★★ | ★★★★★ | ★★★★ |
| Weaviate | ★★★ | ★★★★ | ★★★★ | ★★★★ |
| Qdrant | ★★★ | ★★★★ | ★★★★ | ★★★★ |
| Pinecone(托管) | ★★★★★ | ★★★★ | ★★★★★ | ★★★★ |
总结
Chroma 不做"大而全"——它专注于把 "embedding 存和查" 这件事做到极致简单。对于个人知识库、RAG 原型、教程 Demo 等场景,Chroma 是毫无疑问的最佳选择。推荐给:RAG 应用开发者、AI 产品原型设计者、个人知识库搭建者、学习向量检索的学生。
AI 项目推荐
AI Agent- 标签
- #向量数据库 #RAG #Embedding #语义搜索 #Chroma
- 浏览
- 👁️ 7
- 发布日期
- 2026-07-24