[AI/嵌入式/向量存储] Chroma:AI 原生的轻量级向量检索基础设施
0 序
- 调研对象:
chroma-core/chroma
1 概述
产品介绍
产品定位
-
Chroma(又称ChromaDB)是一款开源的、AI 原生的嵌入式向量数据库(Embedding Database),专为大语言模型(LLM)应用设计,提供文本、图像、音频等多模态数据的向量存储与相似度检索能力。- 其官方定位已从"AI-native open-source embedding database"演进为"The open-source data infrastructure for AI"(开源 AI 数据基础设施),当前产品口号为 "Open-source search infrastructure for AI",同时支持向量、全文、正则与元数据搜索,并构建于对象存储之上。
-
Chroma 的核心设计理念:
- 最小化"我想试试向量检索"与"我已经能跑向量检索"之间的距离——通过"零配置、本地优先、渐进复杂度"三条原则,让开发者用
pip install chromadb加几行 Python 代码即可完成 RAG 应用的搭建。
- 最小化"我想试试向量检索"与"我已经能跑向量检索"之间的距离——通过"零配置、本地优先、渐进复杂度"三条原则,让开发者用
诞生的背景与原因
- 2022 年,Jeff Huber(CEO,曾任 YC 公司 Standard Cyborg 联合创始人)与 Anton Troynikov(联合创始人,前 Nuro、Meta Reality Labs 研究工程师)在旧金山共同创立 Chroma。
- 创始洞察:当时的向量数据库(如 Pinecone、Weaviate、Milvus)都面向企业级分布式部署,架构复杂、需要配置集群;而绝大多数 AI 开发者只是想在笔记本上存 embeddings 并快速检索。两人认为"把带模型的原型推向生产更像炼金术而非工程",于是决定做一个开箱即用、无需配置的开发者友好型向量数据库。
- 2022 年 12 月,Huber 通过在 Twitter 上私信大量 LangChain 与 embeddings 开发者完成了一次非正式的产品验证,确认了"简单即强大"的需求缺口。
解决的核心问题
- 语义检索:传统数据库擅长精确匹配,无法理解"意思相近"这种模糊语义;Chroma 通过最近邻(ANN)搜索按语义相似度检索数据,而非子串匹配。
- LLM 应用记忆层:为 RAG、Agent、语义搜索等场景提供"记忆层",解决上下文窗口有限、需要外置知识检索的问题。
- 开发效率:将向量检索的工程复杂度(索引选择、集群拓扑、分片策略)对普通开发者隐藏。
URLs
| 项目 | 链接 |
|---|---|
| 官网 | https://www.trychroma.com |
| GitHub 仓库 | https://github.com/chroma-core/chroma |
| 官方文档 | https://docs.trychroma.com |
| Chroma Cookbook(架构) | https://cookbook.chromadb.dev |
发展历程
| 时间 | 事件 |
|---|---|
| 2022-05 | 公司成立,完成约 230 万美元 pre-seed 轮(AIX Ventures、Bloomberg Beta、AI Grant 等参与) |
| 2022-10-22 | 开源库首个公开版本在 GitHub 发布 |
| 2023-02 | 正式公开亮相(原定情人节当天,因修复 bug 推迟一天) |
| 2023-04-06 | 完成 1800 万美元 seed 轮(Quiet Capital 领投,Naval Ravikant、Altman 兄弟、Hugging Face 等创始人参与);累计融资约 2000 万美元 |
| 2024 | Anton Troynikov 退居顾问,早期工程师 Hammad Bashir 出任 CTO |
| 2025-04 | 发布 Chroma 1.0,核心全面 Rust 化(此前核心已逐步迁移至 Rust) |
| 2025-08 | Chroma Cloud 正式 GA(托管 serverless 服务) |
| 2026-05 | GitHub 突破 2.79 万 Star、2200+ Fork,被 9 万+ 开源代码库依赖,PyPI + npm 月下载量超 1500 万,Discord 社区 1 万+ 成员 |
| 2026 年至今 | 持续演进:条件事务(conditional transactions)、稀疏/混合检索、多模态检索、基于对象存储的新版 WAL(wal3)等 |
主要功能
- 两种存储模式:内存模式(默认,进程退出即丢失)与持久化模式(SQLite 存元数据 + 文件系统存向量索引),切换只需改一行代码。
- 四种客户端形态:Ephemeral(内存)、Persistent(本地持久化)、HTTP(连接自托管 Server)、Cloud(连接 Chroma Cloud),API 完全一致,渐进升级不重写代码。
- 多语言客户端:官方 Python / JavaScript(TypeScript);社区支持 Ruby、PHP、Java、Go。
- 内置 Embedding 函数:支持 Sentence Transformers(默认 all-MiniLM-L6-v2,本地运行)、OpenAI、Cohere、Google Generative AI、Hugging Face、Jina AI、Mistral、Together AI、Cloudflare Workers AI、Voyage AI、Morph 等 12+ 提供商,也支持自定义 EmbeddingFunction。
- Collection 集合管理:类比关系表,无需预定义 schema;支持创建、列出、删除、fork,以及增删改查与计数。
- 元数据过滤:每条记录可携带任意键值元数据,查询时按条件过滤(支持 \(eq/\)ne/\(gt/\)in/$contains 等,以及逻辑与/或)。
- 全文与正则搜索:无需 embedding 即可对数据进行关键词与正则检索(2026 年新增能力)。
- 混合检索:稠密向量 + 稀疏向量 + 全文的混合/融合检索。
- 多模态检索:对图像、音频等模态统一索引与检索。
- 条件事务(Conditional Transactions):2026 年新增,支持更安全的并发写语义。
核心优势
- 极低的上手与部署成本:
pip install chromadb即可使用,无需独立服务、无需配置,嵌入式运行(可直接跑在应用进程内),被公认为"最简单的向量数据库"。 - API 优雅简洁:集合 + add/query/update/delete 的极简模型,3 行代码完成一个 RAG 检索闭环。
- 生态集成度最高之一:LangChain / LlamaIndex 深度集成,是 LangChain 的默认向量存储,与 Python AI 生态无缝衔接。
- 渐进式复杂度:内存 → 本地持久化 → 自托管 Server → Chroma Cloud 的升级路径平滑,应用代码无需改动。
- 多模态与多检索类型:向量、全文、正则、元数据过滤、稀疏/混合检索一站式覆盖。
- 开源许可宽松:Apache 2.0,无使用限制;本地开发完全免费。
- 社区活跃、增长迅猛:GitHub 最受欢迎的向量数据库之一(2.79 万+ Star),月下载超 1500 万,被 9 万+ 代码库依赖。
主要短板
- 单节点架构,无原生分布式能力:没有分片与副本机制,水平扩展需要外部编排;高可用能力缺失(单机挂则服务挂)。
- 规模上限明显:业界普遍认为单机承载约 50 万向量以内体验良好,10 万条以后写入/插入性能开始明显下降,百万级及以上不推荐。
- 并发与高吞吐能力弱:不同基准测试中读 QPS 均落后专业向量库(如 AIMultiple 2026-07 基准中 Chroma 读 QPS 仅 172,远低于 Milvus 826、pgvector 885、Qdrant 723;另一套基准 100 并发下约 5500 QPS,也低于 Qdrant 的 18000)。
- 功能深度有限:索引类型单一(仅 HNSW)、不支持向量量化(PQ/SQ 压缩)、复杂过滤与混合查询能力弱于 Qdrant/Milvus。
- 元数据大小限制:单条元数据 16KB 上限,大对象不适用。
- 写入端多进程不安全:Rust 版 HNSW 写入器非多进程安全,多个进程同时打开同一持久化目录写索引可能导致崩溃或索引损坏(社区有真实事故报告)。
局限性
- 单机容量约 50 万向量量级,超出后延迟、写入与稳定性显著恶化。
- 不适用于生产高并发场景(如线上大流量 RAG、推荐系统)。
- 无原生水平扩展、分片、副本、多租户隔离等企业级运维能力。
- 混合查询(向量 + 复杂标量组合 + 全文)能力处于追赶状态。
- 分布式/云形态(Chroma Cloud)为商业托管,自托管分布式仍不成熟。
适用场景
| 场景 | 适用度 | 说明 |
|---|---|---|
| 快速原型 / POC / 概念验证 | ✅ 首选 | 零配置、秒级上手,验证 RAG 流程最快 |
| 本地 / 嵌入式应用 | ✅ 首选 | 桌面应用、IDE 插件、单机工具内嵌向量检索 |
| 教学与学习 | ✅ 首选 | 上手门槛最低,最适合学习向量数据库概念 |
| 个人项目 / 实验性项目 | ✅ 首选 | 零成本、免运维 |
| 中小规模 RAG(≤ 10 万~50 万向量) | ✅ 适用 | 单机即可满足,检索质量与速度足够 |
| 企业内部工具(内部知识库、客服助手) | ⚠️ 谨慎 | 数据量小可用;规模化后需迁移 |
| 大规模生产 RAG / 高并发线上服务 | ❌ 不适用 | 需迁移至 Qdrant / Milvus 等 |
同类竞品
| 竞品 | 定位 | 与 Chroma 的核心差异 |
|---|---|---|
| Pinecone | 托管云向量数据库 | 不开源、全托管;规模化最省心,但成本高 |
| Weaviate | 开源向量数据库 | 图式模块化架构、混合搜索能力强;部署较重 |
| Milvus | 云原生分布式向量数据库 | 十亿级规模、分布式原生、GPU 加速;部署复杂 |
| Qdrant | Rust 高性能向量搜索引擎 | 性能/性价比最优、过滤强、量化省内存;生态较年轻 |
| pgvector | PostgreSQL 向量扩展 | 复用 PG 生态与事务;性能与规模上限较低 |
| FAISS | 向量检索库(非数据库) | 纯库、性能极致,但无持久化/过滤/服务化能力 |
| LanceDB | 嵌入式向量数据库 | 同为嵌入式定位、列式存储;生态与热度小于 Chroma |
| Elasticsearch / OpenSearch | 搜索引擎 + 向量 | 全文检索强、向量为附加能力;资源开销大 |
| Redis(向量模块) | 缓存 + 向量 | 读写快、运维简单;规模与过滤能力有限 |
发展趋势
- 开源社区活跃度:Star/Fork 持续快速增长——截至 2026 年 5 月约 2.79 万 Star、2200+ Fork、9 万+ 依赖代码库、月下载超 1500 万;GitHub 提交数超过 4590 个,主分支几乎每日有提交。
- 技术路线:全面 Rust 化(Chroma 1.0 起核心引擎为 Rust,Python/JS 客户端基于 Rust 绑定);存储向对象存储/湖原生演进(新版 WAL「wal3」直接构建于 S3 等对象存储之上,与 Milvus 3.0 的 Lake-native 方向趋同)。
- 产品定位升级:从"向量数据库"转向"上下文基础设施(Context Infrastructure)"——CEO 提出"RAG is dead, context engineering is king",并发布 "Context Rot" 研究(18 个前沿模型在输入变长时准确率均下降),把 Chroma 定位为决定 LLM 在推理时"看到什么"的检索与排序层。
- 商业化:Chroma Cloud(serverless 托管)2025 年 8 月 GA,采用"buyer-based open source"策略——开发者个人可用的功能永久开源,仅组织级运维功能(SSO、审计、BYOC 等)进入商业版。
- 总结:Chroma 正从"AI 原型验证利器"稳步演进为"面向 AI 应用的上下文基础设施 + 托管服务",核心引擎全面 Rust 化并拥抱对象存储,但分布式能力仍处于追赶期。
横向对比:Chroma / Milvus / PGVector / Qdrant
本部分为按需求补充的四库对比。所有量级与性能数据均来自公开资料,口径见各表来源标注;不同基准测试环境与数据集不同,数值不可跨基准直接比较。
四库定位速览
| 维度 | Chroma | Milvus | PGVector | Qdrant |
|---|---|---|---|---|
| 本质 | 嵌入式向量数据库(库内运行) | 云原生分布式向量数据库 | PostgreSQL 向量扩展插件 | Rust 高性能向量搜索引擎 |
| 开发语言 | Rust(核心)+ Python/JS | Go + C++ | C(PostgreSQL 插件) | Rust |
| 许可证 | Apache 2.0 | Apache 2.0 | PostgreSQL 许可 | Apache 2.0 |
| 部署形态 | pip 安装即用 / Docker / Cloud | K8s(推荐)/ Docker Compose | CREATE EXTENSION vector |
单二进制 / Docker / K8s |
| 索引算法 | HNSW | IVF、HNSW、DiskANN、GPU 索引、SCANN 等 10+ 种 | IVFFlat、HNSW | HNSW + 标量/乘积量化 |
| 分布式 | ❌(Cloud 托管形态除外) | ✅ 原生、存算分离 | ❌(依赖 PG 主从) | ⚠️ 集群实验性/完善中 |
| 高可用 | ❌ | ✅ | ⚠️ 依赖 PostgreSQL 运维 | ✅(集群模式) |
| 典型生态 | LangChain/LlamaIndex、Python AI 栈 | 大厂 AI 平台、K8s 生态 | 全部 SQL 生态、ORM、BI | Python/Go/Rust 客户端、云原生 |
核心优势对比
| 数据库 | 核心优势 |
|---|---|
| Chroma | ① 上手与部署成本业界最低(pip 即用、零配置、嵌入式);② API 极简、LangChain 默认向量库,生态集成最顺滑;③ 本地优先 + 渐进升级(内存→持久化→Server→Cloud)不重写代码;④ 内置 12+ Embedding 函数与多模态/全文/稀疏检索能力;⑤ Apache 2.0 完全免费。 |
| Milvus | ① 真正的原生分布式架构,水平扩展到百亿级向量性能衰减极小;② 索引类型最丰富(10+ 种,含 DiskANN、GPU 索引),存算分离、可独立扩容;③ 写入吞吐高、延迟低(3-5ms),GPU 加速极致性能;④ 混合检索(向量+标量+全文)完备;⑤ 企业级成熟度最高,300+ 大厂(Salesforce、PayPal、Shopee、Airbnb 等)生产验证。 |
| PGVector | ① 零迁移成本:直接复用 PostgreSQL 全套运维(备份、高可用、监控、权限、审计、ORM);② 支持 ACID 事务、点时间恢复、多表 JOIN——"向量+业务数据"混合查询最自然;③ 学习成本几乎为零(纯 SQL);④ 中小规模(≤500 万向量)运维成本最低,内存占用小(<100 万条约 2GB);⑤ 被 Supabase、Neon、AWS、Azure、阿里云等主流云原生内置。 |
| Qdrant | ① 性能/性价比最优:纯 Rust + SIMD + 自研存储引擎(Gridstore),查询延迟可低至 4-5ms(P99),单机 2000 万条 768 维向量毫秒级响应;② 内存效率极高:标量/乘积量化可将内存占用降低 4-32 倍且精度损失 <1%;③ 过滤能力业界最强:复杂 payload 过滤在检索中不显著影响性能;④ 实时索引:新数据即时可查、无需重建索引;⑤ 部署极简:单二进制、无外部依赖,Docker/K8s 都友好。 |
关键短板与局限性对比
| 数据库 | 关键短板与局限性 |
|---|---|
| Chroma | 单节点无原生分布式/分片/副本,高可用缺失;单机容量约 50 万向量,10 万条后写入性能下降;并发 QPS 显著低于专业库;索引类型单一、无量化压缩;元数据单条 16KB 上限;Rust HNSW 写入端多进程不安全(并发写同目录可能损坏索引);生产高并发场景不适用。 |
| Milvus | 部署复杂度高(K8s + 多组件依赖,30-60 分钟起),学习曲线陡峭;资源消耗大,百万级以下"杀鸡用牛刀";需要专业运维团队;自托管运维门槛是四库中最高。 |
| PGVector | 单机架构,无原生分片,水平扩展需依赖 PG 生态(读写分离等);数据量超约 500 万后性能明显下降;索引构建慢、高并发能力弱(100 并发 QPS 仅约 220);向量能力为插件而非内核原生,功能深度有限;亿级规模"可能但艰难"。 |
| Qdrant | 生态相对年轻(相比 Milvus/PG),超大规模(百亿级)分布式集群案例与工具链成熟度不足;集群/分布式能力处于完善期;HNSW 参数与量化权衡需要一定学习成本;自托管需自管监控、备份、升级;无内置向量化(需外部生成 embedding 后写入)。 |
建议数据量级对比
| 数据库 | 建议数据量级 | 边界说明 |
|---|---|---|
| Chroma | ≤ 10 万 ~ 50 万向量 | 原型与本地场景最优;超过 50 万单机明显吃力,写入与稳定性下降 |
| PGVector | ≤ 100 万 ~ 500 万向量 | 中小规模最经济;超过 500 万性能明显下降,无水平扩展兜底 |
| Qdrant | 100 万 ~ 1 亿向量(单机 2000 万-5000 万 768 维毫秒级,集群上亿) | 中大规模高性能首选;百亿级仍属挑战 |
| Milvus | 1000 万 ~ 百亿级向量 | 千万级以上才值得引入;企业级十亿级生产场景的标准答案 |
说明:以上量级为综合多家公开选型资料(腾讯云、博客园、CSDN、Qdrant/Chroma 社区基准等)的建议区间,实际边界受向量维度、硬件、索引参数、读写比例影响,具体项目应做针对性压测。
适用场景对比
| 数据库 | 最适用场景 | 不适用场景 |
|---|---|---|
| Chroma | 快速原型/POC、本地/嵌入式应用、教学、个人项目、≤50 万向量的小型 RAG | 高并发线上服务、海量数据、需要事务与复杂 SQL 关联、企业级多租户 |
| Milvus | 十亿级企业生产 RAG、推荐系统、多模态搜索、GPU 加速检索、K8s 原生环境 | 百万级以下小数据(运维成本不划算)、无 K8s 运维团队的团队 |
| PGVector | 已有 PostgreSQL 基础设施、业务数据+向量混合查询、需要事务一致性、中小规模系统(≤500 万) | 大规模(千万级以上)、高写入/高并发、需要原生分片扩展 |
| Qdrant | 高性能/低延迟 RAG、过滤条件复杂的生产检索、中大规模(百万-亿级)、追求性价比与内存效率 | 百亿级超大规模集群、需要 SQL/事务能力、完全托管省心诉求 |
性能基准参考(口径不同,谨慎对比)
以下两组为公开基准,测试环境与数据集不同,数值不可跨基准直接比较:
基准 A(SIFT-1M,128 维,100 并发;来源:技术栈 jishuzhan.net,2026-05):
| 指标 | PGVector | Chroma | Qdrant | Milvus | Milvus+GPU |
|---|---|---|---|---|---|
| 查询延迟 P99 (ms) | 45 | 18 | 5 | 8 | 3 |
| 100 并发 QPS | 220 | 5,500 | 18,000 | 12,000 | 25,000 |
| 批量写入(向量/秒) | 8,000 | 25,000 | 45,000 | 55,000 | — |
| 内存占用(100 万向量,MB) | 600 | 520 | 480(量化后 280) | 550(量化后 320) | — |
基准 B(AIMultiple,2026-07,读 QPS / P99):
| 指标 | pgvector | Milvus | Qdrant | Chroma |
|---|---|---|---|---|
| 读 QPS | 885 | 826 | 723 | 172 |
| 读 P99 (ms) | 13 | 16 | 26 | 53 |
基准 B 中 Chroma 的读 QPS(172)与基准 A 中 100 并发下 QPS(5500)差距巨大,主要原因是测试负载模型、数据集规模与运行配置(嵌入式 vs Server)不同。可稳健得出的结论是:单节点基准下 Qdrant/Milvus 的延迟与吞吐显著优于 Chroma/pgvector,而 Chroma 在中小数据量下延迟仍可接受(毫秒级)。
选型建议(速查)
数据量 ≤ 50 万、追求快速上手 → Chroma
已有 PostgreSQL 业务库、需事务与 SQL 混合查询 → PGVector
100 万~1 亿、要高性能低延迟、过滤复杂 → Qdrant
千万级以上、企业级生产、要分布式与 GPU → Milvus
2 工作原理与架构
概念术语
| 术语 | 说明 |
|---|---|
| Embedding(嵌入向量) | 用模型将文本/图像/音频映射为高维向量(如 384/768/1536 维),语义相近的向量距离相近 |
| Collection(集合) | Chroma 的数据组织单元,类比关系表;每个集合有独立的 embedding 函数与距离度量 |
| ANN(近似最近邻) | Approximate Nearest Neighbor,以少量精度换取数量级速度提升的相似搜索算法族 |
| HNSW | Hierarchical Navigable Small World,分层可导航小世界图索引,Chroma 默认且唯一支持的向量索引算法,召回率 95-99% |
| 距离度量 | L2(欧氏)、内积(IP)、余弦(Cosine)三种,创建集合时指定 |
| 元数据过滤 | 查询时基于标量元数据(时间/来源/类型等)对向量检索结果进行条件筛选 |
| WAL(预写日志) | Write-Ahead Log,先写日志再更新索引,保证数据持久性与崩溃恢复 |
| Segment(段) | Chroma 内部数据分段,用于管理与压缩 HNSW 索引 |
| Compaction(压缩) | 将小段合并/重写为大段,优化索引结构与查询性能 |
| RAG | Retrieval-Augmented Generation,检索增强生成,向量数据库的核心消费场景 |
架构与运行原理
总体架构
Chroma 采用多语言混合架构:核心计算层与分布式服务用 Rust 实现,Python 客户端作为主要入口(底层绑定 Rust 核心),元数据存储基于 SQLite,新一代日志基于 S3 等对象存储(wal3)。
┌──────────────────────────────────────────────────────────┐
│ 应用(Python / JS / Go ...) │
└──────────────────────────┬───────────────────────────────┘
│ HTTP / 进程内调用
┌──────────────────────────▼───────────────────────────────┐
│ Gateway(frontend,Rust) │
│ API 入口 / 鉴权 / 限流 / 配额 / 请求校验 │
└──────────────────────────┬───────────────────────────────┘
│ 分发
┌──────────────────────────▼───────────────────────────────┐
│ Worker(Query Executor,Rust) │
│ 查询算子执行 / 编排 / 压缩服务(Compaction) │
└──────────────┬───────────────────────────┬───────────────┘
│ │
┌──────────────▼────────────┐ ┌───────────▼───────────────┐
│ 向量索引(HNSW,Rust) │ │ 元数据 / 系统库(SQLite) │
│ Segment 管理 │ │ SysDB / WAL 日志 │
└──────────────┬────────────┘ └───────────┬───────────────┘
│ │
└─────────── 对象存储(S3 等)───────────────┘
(wal3 预写日志 / Cloud 模式数据)
关键组件
- Gateway(frontend):
rust/frontend,接收 API 调用并分发任务,负责鉴权、限流、配额与请求校验。 - Query Executor / Worker:
rust/worker,执行查询算子与编排,也是压缩(Compaction)服务的宿主。 - 向量索引引擎:Rust 实现的 HNSW(基于 hnswlib 演进),负责距离计算、内存管理与多线程查询。
- 元数据系统库(SysDB):单机模式基于 SQLite,存储集合定义、segment 元数据等系统信息。
- 预写日志(WAL):单机模式 WAL 存于 SQLite;Cloud/分布式模式采用 wal3——基于对象存储(S3 兼容)的追加式日志,每个集合为 S3 manifest 文件链表,配合 setsum 校验和实现常量时间完整性校验。
- LocalExecutor:单机模式下协调 WAL(SQLite)与本地 segment 的同步,负责 backfill(回填)流程。
写入流程
- 应用调用
collection.add(documents=[...], metadatas=[...], ids=[...]); - 若配置了 embedding 函数,先对文档生成向量(本地模型或远程 API);
- 数据与向量写入 WAL 预写日志(保证崩溃可恢复);
- 日志被回放(backfill)到 segment,更新 HNSW 向量索引与元数据索引;
- 后台 Compaction 进程将小 segment 合并为大 segment,优化索引。
查询流程
- 查询文本经 embedding 函数转为查询向量;
- 请求经 Gateway 分发至 Worker;
- Worker 在 HNSW 索引上执行 ANN 搜索(可并行、多线程);
- 结合元数据过滤(filtered ANN)与全文/稀疏检索做融合;
- 返回 Top-K 结果(文档、元数据与距离分数)。
单机 vs 分布式
- 单机/嵌入式模式:库内进程运行,LocalExecutor 管理 WAL 与 segment,简单可靠;
- Client-Server 模式:通过 HTTP 连接独立 Chroma Server,支持多客户端访问;
- Cloud 模式:托管 serverless,数据与日志存放于对象存储,可弹性伸缩(此能力为商业托管形态)。
3 使用指南
安装部署
Windows / Linux / macOS(Python 方式,最简单)
pip install chromadb
以 Server 方式运行(Docker,推荐生产自托管)
docker pull chroma/chroma
docker run -p 8000:8000 -v ./chroma_data:/chroma/chroma chroma/chroma
语言客户端安装
| 语言 | 命令 |
|---|---|
| Python | pip install chromadb |
| JavaScript/TypeScript | npm install chromadb |
关键操作
1. 创建客户端(内存 / 嵌入式 / 远程)
import chromadb
# 内存模式(默认,进程退出数据丢失)
client = chromadb.Client()
# 持久化模式(SQLite + 文件索引)
client = chromadb.PersistentClient(path="./chroma_db")
# 远程 Server / Cloud
client = chromadb.HttpClient(host="localhost", port=8000)
# client = chromadb.CloudClient(token="...", tenant="...", database="...")
2. 创建集合并写入数据
collection = client.get_or_create_collection(
name="my_docs",
embedding_function=openai_ef, # 可选,默认本地 all-MiniLM-L6-v2
metadata={"hnsw:space": "cosine"} # 距离度量:l2 / ip / cosine
)
collection.add(
documents=["这是第一段文本", "这是第二段文本"],
metadatas=[{"source": "doc1"}, {"source": "doc2"}],
ids=["id1", "id2"]
)
3. 语义查询(带元数据过滤)
results = collection.query(
query_texts=["搜索文本"],
n_results=5,
where={"source": "doc1"}, # 简单过滤
# where={"$and": [{"year": {"$gte": 2023}}, {"category": "tech"}]} # 组合过滤
)
4. 更新与删除
collection.update(ids=["id1"], documents=["更新后的文本"])
collection.delete(ids=["id2"])
5. 与 LangChain 集成
from langchain_community.vectorstores import Chroma
db = Chroma.from_documents(
documents=chunks,
embedding=embedding,
persist_directory="./chroma_db"
)
Z FAQ for Chroma
Q: 向量数据库的 hnsw 是指什么?*
- HNSW(Hierarchical Navigable Small World)是一种用于向量近似近邻搜索(ANN)的索引算法。
简单理解:把大量向量组织成“多层导航图”,搜索时从高层快速定位,再逐层向下,最终找到最相似的向量。
- 核心特点:
| 特点 | 说明 |
|---|---|
| 搜索方式 | 图搜索 |
| 目标 | 快速找 Top-K 相似向量 |
| 优点 | 查询速度快、召回率高 |
| 缺点 | 占内存较多,建索引较慢 |
| 是否精确 | ❌ 近似搜索 |
| 常见参数 | M、efConstruction、efSearch |
可以把它理解成:
暴力搜索: 一个个比较 → 准,但慢
HNSW: 像导航地图一样跳跃搜索 → 快,而且通常很准
在 Milvus、pgvector、Qdrant、Weaviate、Elasticsearch 等向量数据库中都非常常见。
Q: Chroma 和 FAISS 有什么区别?
FAISS 是纯向量检索库(无持久化、无过滤、无服务化,需要自己搭);Chroma 是数据库,开箱提供持久化(SQLite+文件)、元数据过滤、集合管理、客户端、Server 模式与 LangChain 集成。
追求极致性能、且愿意自建管道选 FAISS,快速交付选 Chroma。
Q: Chroma 适合多大的数据量?
综合业界经验,50 万向量以内体验良好;10 万条以后写入/插入性能开始明显下降;超过单机承载后应迁移至 Qdrant/Milvus。具体还取决于向量维度、硬件与索引参数,建议实测。
Q: Chroma 支持分布式吗?
开源自托管版本为单节点架构,不支持原生分布式/分片/副本。若要分布式能力,官方路径是使用商业托管的 Chroma Cloud(serverless、对象存储底座);否则需自行外部编排或迁移至 Milvus。
Q: 从 Chroma 迁移到 Qdrant/Milvus 复杂吗?
不复杂。
Chroma 的 collection.get() 可一次性导出 embeddings/documents/metadatas,Qdrant/Milvus 客户端都有批量 upsert/insert API,写一个迁移脚本即可(社区有大量示例)。
建议在数据量突破单机上限前尽早迁移。
Q: Chroma 支持多模态吗?
支持。2025 年后 Chroma 提供多模态 embedding 集成(图像、音频等),可对多模态内容统一向量化、索引与检索;文本、图像、音频走同一套 API。
Q: 为什么 LangChain 默认使用 Chroma?
因为 Chroma 零配置、嵌入式、API 与 LangChain 的 Retriever/VectorStore 抽象完全匹配,pip install 后无需启动任何服务即可跑通 RAG,是官方推荐的最快起步选择。生产规模后再切换到其他向量库。
Q: Chroma 的数据存在哪里?如何备份?
持久化模式数据存在指定的本地目录(PersistentClient(path=...)),包含 SQLite 元数据文件与向量索引文件;备份该目录即可(需在无写入时进行)。Cloud 模式由平台管理。
Q: 多个进程同时写同一个 Chroma 持久化目录安全吗?
不安全。Rust 版 HNSW 写入器非多进程安全,多进程并发写同一目录可能导致崩溃甚至索引损坏(社区有真实事故)。多进程场景应使用 Client-Server 模式(单一 Server 进程写)。
Y 推荐文献
- Chroma
- Chroma Cookbook(架构与概念)
- Chroma - AI Wiki
- wal3: A Write-Ahead Log for Chroma, Built on Object Storage - Chroma Engineering Blog
- 向量数据库深度对比:PGVector vs Qdrant vs Milvus vs Chroma(附性能测试数据)- 技术栈
- Vector Database Benchmark: 7 Open-Source Engines for RAG - AIMultiple
- pgvector - GitHub
- Milvus 官网
- Qdrant 官网
X 参考文献
- Chroma - GitHub
- Chroma - 官网
- Chroma - 官方文档 Introduction
- Chroma - AI Wiki
- Chroma Cookbook - Core Concepts
- wal3: A Write-Ahead Log for Chroma - Chroma Engineering
- ChromaDB 概念与优劣势 - con-fucius.github.io
- 向量数据库深度对比:PGVector vs Qdrant vs Milvus vs Chroma - 技术栈
- Vector Database Benchmark: 7 Open-Source Engines for RAG - AIMultiple
- Vector Database Performance Benchmarking: A Comprehensive Scaling Study - GitHub
- Milvus - 官网
- Milvus vs PGVector 分析 - CSDN
- Milvus 实测选型建议 - 腾讯云开发者社区
- 市面上主流向量数据库和 PG、MySQL 数据库的详细对比 - 博客园
- pgvector 局限性与替代方案 - PyLLM
- pgvector - GitHub
- Qdrant - 官网
- Qdrant 优劣势分析 - AI入口
- 开源向量数据库详细对比分析 - CSDN
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

浙公网安备 33010602011771号