chroma
专为 AI 应用设计的开源向量数据库,支持 Embedding 快速检索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
专为 AI 应用设计的开源向量数据库,支持 Embedding 快速检索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:Chroma 并发插入性能测试
图2:Chroma 并发查询性能测试
想象一下:你精心调试了一个 RAG(检索增强生成)聊天机器人,它却总是"答非所问"——给出的答案和你的文档风马牛不相及。问题往往不在 AI 模型本身,而在于检索环节:传统关键词匹配根本无法理解语义,导致"搜不到真正相关的内容"。
Chroma 正是为解决这一痛点而生。作为开源向量数据库,它专门存储和检索"语义相似"的内容,让 AI 应用能够真正"读懂"用户意图,给出准确答案。
Chroma 是专为人工智能应用设计的开源搜索基础设施,由 Chroma Inc. 开发维护。其核心理念是用向量(Embeddings)来表示文档、图片、音频的语义含义,然后在向量空间中通过"距离"来衡量内容的相似程度。
图3:Chroma 官方品牌标识
简单来说,当你在 Chroma 中存入一篇关于"机器学习入门"的文章,然后问"哪里可以学习深度学习",Chroma 能准确返回相关内容——因为它理解"机器学习"和"深度学习"在语义上是相近的,而传统数据库只能精确匹配"机器学习"这个字符串。
Chroma 由 Jeff Huber 和 Anton Troynikov 联合创立。Jeff Huber 是连续创业者,曾在多家科技公司担任技术负责人;Anton Troynikov 则是 AI 和计算机视觉领域的资深研究者。两人看到了 AI 应用中"数据基础设施"这一被忽视的环节,果断切入向量数据库赛道,Chroma 迅速成为 LangChain、LlamaIndex 等主流 AI 开发框架的默认向量存储选择。
Chroma 的能力远不止存储向量。它的核心 API 仅包含 4 个函数,却覆盖了大多数应用场景:
添加数据(add):向集合中批量添加文档、可选元数据和唯一 ID。Chroma 会自动处理分词(Tokenization)、向量化(Embedding)和索引构建。如果已有预生成的向量,也可以直接传入,跳过自动处理步骤。
查询数据(query):给定查询文本或向量,返回最相似的 N 条结果。支持元数据过滤(如"只返回 source='notion' 的文档")和文档内容过滤(如"只返回包含'关键词'的文档")。这种多层过滤能力是生产级应用的必备特性。
获取数据(get):通过 ID 精确获取已存储的文档,支持批量操作。
删除数据(delete):通过 ID 删除指定文档或清空整个集合。
Chroma 在 2024 年进行了重大架构重构,从最初的纯 Python 实现升级为 Rust 核心 + Python/JS 多语言客户端的架构。后端核心使用 Rust 编写(通过 maturin 工具生成 Python binding),兼顾了性能和生态。同时提供 JavaScript/TypeScript 客户端,支持 Node.js 和浏览器环境,与现代 Web 应用无缝集成。
Chroma 不仅支持文本,还在持续扩展多模态搜索能力。仓库中的 examples/multimodal 目录展示了图像和音频的向量化示例。随着多模态 AI 的发展,Chroma 的这一特性将变得越来越重要。
Chroma 的核心存储和检索逻辑使用 Rust 编写。Rust 提供了内存安全保证(无需担心 buffer overflow 等 C++ 常见问题)和接近 C 的执行效率。通过 maturin 工具,Rust 代码被编译为 Python 扩展模块,在 Python 层看起来就像普通库调用。
这种架构选择带来的好处是:开发者在 Python/JavaScript 层可以用熟悉的语法快速原型开发,同时生产环境能获得 Rust 级别的性能和稳定性。
Chroma 支持本地持久化存储,通过 --path 参数指定数据目录即可。在分布式场景下,Chroma 提供了 Docker 一键部署模式,通过 docker-compose 启动服务端,支持多客户端远程连接。同时,仓库中包含 Kubernetes 部署配置(k8s/ 目录),支持在 K8s 集群中水平扩展。
Chroma 内置 OpenTelemetry 支持,可以将 traces、metrics 导出到 Jaeger、Prometheus 等主流可观测性平台。这对于生产环境的问题排查和性能调优至关重要。
Chroma 的部署门槛极低,这是它受欢迎的重要原因之一。
开发环境:只需一条 pip install chromadb,就能在 Python 中启动内存模式(数据仅存在于进程内存,重启后丢失)或指定路径的持久化模式。
生产环境:docker-compose up 一键启动服务端,暴露 8000 端口,客户端通过 HTTP 连接。Docker 镜像使用多阶段构建,最终镜像基于 python:3.11-slim-bookworm,大小控制在合理范围内。docker-compose.yml 内置了健康检查(每 30 秒检查 /api/v2/heartbeat),确保服务可用性。
云端:Chroma 提供了官方托管服务 Chroma Cloud,支持 Serverless 模式,30 秒内即可创建数据库并获得连接凭证。开发者无需关心运维,专注于应用开发。
RAG(检索增强生成)应用:这是 Chroma 最典型的应用场景。搭配 LangChain 或 LlamaIndex,Chroma 存储文档的向量表示,运行时根据用户 query 检索相关文档,注入 LLM 的 context,大幅提升回答质量。
语义搜索:当关键词匹配无法满足需求时(如同义词、隐含意图),Chroma 的向量搜索能提供更人性化的结果。
推荐系统:通过用户行为和内容的向量表示,计算相似度进行个性化推荐。
多模态 AI:存储和检索图像、音频的向量,支持多模态内容的语义搜索。
Chroma 的定位是"应用层向量数据库",而非"大数据基础设施"。在超大规模数据量(数亿级向量)场景下,专用分布式向量数据库(如 Milvus、Pinecone)可能更具优势。Chroma 的优势在于与 Python 生态的深度整合和极低的上手门槛,适合中小规模应用和快速原型开发。
此外,Chroma 作为相对年轻的项目,生态系统仍在建设中。部分企业级特性(如细粒度权限控制、审计日志)还在持续完善中。
Chroma 的出现标志着向量数据库从"专业数据库管理员的工具"走向"普通 AI 开发者的日常用品"。它降低了 AI 应用的数据层门槛,让更多开发者能够快速构建有竞争力的智能应用。随着 AI 应用持续爆发,Chroma 这类基础设施项目的重要性只会越来越大。
目前 Chroma GitHub 已有超过 28,000 颗星,被数百万开发者使用,是当前最受欢迎的向量数据库开源项目之一。