Chroma 轻量实战:5 分钟搭建你的第一个向量应用 🎯
🔥本文是《向量数据库实战:选型、调优与落地》专栏第 08 篇
⏱️阅读时间:约 10 分钟
🎯 开篇:最简单的向量数据库
如果你只想快速验证一个想法,不想折腾 Docker、集群、配置文件——
Chroma 就是你的菜🍒
┌─────────────────────────────────────────────────────┐ │ Chroma 的定位 │ ├─────────────────────────────────────────────────────┤ │ │ │ Milvus = 重型卡车(功能全,但重) │ │ Qdrant = 跑车(快,但需要一定配置) │ │ Chroma = 自行车(轻便、即开即走)🚲 │ │ │ │ 一行 pip install,三行代码就能跑起来 │ │ │ └─────────────────────────────────────────────────────┘🛠️ 安装 & 启动
# 安装pipinstallchromadb# 就这么简单,没有第二步了 😂Chroma 支持三种运行模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 内存模式 | 进程结束数据消失 | 快速测试、Demo |
| 持久化模式 | 数据存本地磁盘 | 开发调试、小项目 |
| 客户端-服务器 | 独立服务进程 | 生产环境 |
📝 5 分钟实战
模式一:内存模式(最快上手)
importchromadb# 创建内存客户端client=chromadb.EphemeralClient()# 创建集合(Chroma 内置了默认 embedding 函数!)collection=client.create_collection(name="my_knowledge",metadata={"hnsw:space":"cosine"}# 余弦相似度)# 添加数据(直接传文本!Chroma 自动调用 embedding 模型)collection.add(documents=["向量数据库是专门存储和检索向量的数据库","HNSW 是最流行的向量索引算法","Chroma 是最轻量的向量数据库","RAG 技术让大模型能访问外部知识","余弦相似度衡量向量方向的相似程度",],ids=["doc1","doc2","doc3","doc4","doc5"])# 查询(也是直接传文本!)results=collection.query(query_texts=["什么是向量数据库"],n_results=3)# 打印结果fordoc,distanceinzip(results['documents'][0],results['distances'][0]):print(f"距离:{distance:.4f}|{doc}")输出:
距离: 0.1823 | 向量数据库是专门存储和检索向量的数据库 距离: 0.3156 | Chroma 是最轻量的向量数据库 距离: 0.3892 | RAG 技术让大模型能访问外部知识看到了吗?不需要自己调用 Embedding 模型,Chroma内置了默认的 embedding 函数(基于all-MiniLM-L6-v2),直接传文本就能用!
模式二:持久化模式
importchromadb# 持久化到本地目录client=chromadb.PersistentClient(path="./chroma_data")# 后续操作和内存模式完全一样collection=client.get_or_create_collection("my_knowledge")collection.add(documents=["..."],ids=["..."])模式三:服务器模式
# 启动 Chroma 服务chroma run--path./chroma_data--port8000# 客户端连接importchromadb client=chromadb.HttpClient(host="localhost",port=8000)🧩 Chroma 的独特功能
1. 自动 Embedding
# Chroma 默认使用 all-MiniLM-L6-v2# 你也可以自定义 embedding 函数fromchromadb.utilsimportembedding_functions# 使用 OpenAI embeddingopenai_ef=embedding_functions.OpenAIEmbeddingFunction(api_key="sk-xxx",model_name="text-embedding-3-small")collection=client.create_collection(name="openai_collection",embedding_function=openai_ef)2. 内置元数据过滤
# 添加带元数据的文档collection.add(documents=["文档A内容","文档B内容","文档C内容"],metadatas=[{"source":"wiki","year":2024},{"source":"blog","year":2025},{"source":"wiki","year":2025},],ids=["a","b","c"])# 带过滤的查询results=collection.query(query_texts=["查询内容"],where={"source":"wiki"},# 精确过滤where_document={"$contains":"文档"},# 文档内容过滤n_results=2)3. 内置 Embedding 模型对比
| 集成模型 | 维度 | 大小 | 速度 | 效果 |
|---|---|---|---|---|
| all-MiniLM-L6-v2(默认) | 384 | 80MB | ⚡⚡⚡ | ⭐⭐⭐ |
| all-mpnet-base-v2 | 768 | 420MB | ⚡⚡ | ⭐⭐⭐⭐ |
| OpenAI text-embedding-3 | 1536 | API | ⚡⚡ | ⭐⭐⭐⭐⭐ |
| BGE-M3(自定义) | 1024 | 2.2GB | ⚡ | ⭐⭐⭐⭐⭐ |
📊 Chroma vs Milvus vs Qdrant
| 对比维度 | Chroma | Milvus | Qdrant |
|---|---|---|---|
| 上手难度 | ⭐(最简单) | ⭐⭐⭐ | ⭐⭐ |
| 安装方式 | pip install | Docker Compose | Docker |
| 内置 Embedding | ✅ | ❌ | ❌ |
| 分布式 | ❌ | ✅ | 基础 |
| 数据量上限 | ~100 万 | 无上限 | ~千万 |
| 适合场景 | 原型验证、小项目 | 大规模生产 | 中大规模 |
| 生产就绪 | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
💡 Chroma 最佳使用场景
┌─────────────────────────────────────────────────────────┐ │ Chroma 最佳使用场景 │ ├─────────────────────────────────────────────────────────┤ │ │ │ ✅ 快速原型验证(30 分钟跑通一个 RAG Demo) │ │ ✅ 本地开发调试(不需要启动外部服务) │ │ ✅ 小数据量应用(< 100 万条) │ │ ✅ LangChain / LlamaIndex 集成(内置支持) │ │ ✅ Jupyter Notebook 实验 │ │ │ │ ❌ 大规模生产环境(> 100 万条) │ │ ❌ 需要高可用/分布式 │ │ ❌ 需要复杂索引类型 │ │ │ └─────────────────────────────────────────────────────────┘🔑 本篇核心要点回顾
| 要点 | 说明 |
|---|---|
| Chroma 定位 | 最轻量的向量数据库,pip install 即用 |
| 杀手锏 | 内置 Embedding,直接传文本就能搜索 |
| 三种模式 | 内存 / 持久化 / 客户端-服务器 |
| 适合场景 | 原型验证、小项目、本地开发 |
| 不适合 | 大规模生产环境 |
📌下篇预告:《FAISS 深度实战:Facebook 的向量检索利器,单机性能天花板 💪》
💬有问题欢迎评论区讨论,觉得有用请点赞收藏 👍
作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。
👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。
🔔 关注专栏,不错过后续精彩内容