chroma - AI原生向量数据库,用于构建嵌入应用和语义搜索系统

chroma - AI原生向量数据库,用于构建嵌入应用和语义搜索系统

当你需要为AI应用存储和检索向量数据时,是否希望有一个像使用普通数据库一样简单的工具?不需要配置复杂的服务器,不需要学习繁琐的查询语法,只需几行代码就能完成向量的存储和搜索。chroma正是这样一个AI原生的向量数据库。它专为开发者打造,以极简的API和开箱即用的体验,让你能够快速将向量搜索能力集成到应用中,无论是构建语义搜索、推荐系统,还是RAG应用,chroma都能提供最便捷的解决方案。

项目基本信息

信息项详情
项目名称chroma
GitHub地址https://github.com/chroma-core/chroma
项目描述Data infrastructure for AI
作者chroma-core
开源协议Apache License 2.0
Stars27062
Forks2164
支持平台Windows / macOS / Linux
最后更新2026-03-31

一、项目介绍

chroma是一个AI原生的开源向量数据库,它的设计理念是“让向量搜索像SQL一样简单”。与传统的向量数据库不同,chroma专注于开发者体验,提供了极其简洁的API和开箱即用的功能,让你可以在几分钟内开始构建向量搜索应用。

chroma的核心理念是“embeddings made easy”。它内置了多种嵌入模型的支持,可以直接将文本、图像等数据转换为向量,无需额外配置。同时,chroma提供了多种存储后端,包括内存存储、持久化存储和云端存储,满足不同场景的需求。

chroma的架构非常轻量,既可以作为嵌入式库直接在你的Python应用中使用,也可以作为独立服务部署。它支持多租户、多集合管理,提供了过滤查询、批量操作、元数据存储等完整功能。特别值得一提的是,chroma与langchain、llama-index等AI框架深度集成,是构建RAG应用最常用的向量数据库之一。

二、核心优势

开源免费
chroma采用Apache License 2.0协议,代码完全开放。用户可以自由使用、修改和分发,没有商业限制。项目由活跃的开源社区维护。

社区支持
作为GitHub上最受欢迎的向量数据库之一,chroma拥有超过2.7万星标和活跃的社区。官方Discord社区有数千名成员,问题响应及时。丰富的文档和教程让新手也能快速上手。

持续更新
从2026年3月31日的最后更新可以看出,chroma保持着高频的迭代节奏。新的功能、性能优化、模型支持持续加入,确保始终满足开发者的需求。

功能丰富
chroma提供了完整的向量数据库功能:

  • 嵌入式使用:可作为Python库直接使用,无需单独部署
  • 多种嵌入:内置OpenAI、Cohere、Hugging Face等嵌入模型
  • 集合管理:支持多租户、多集合隔离
  • 元数据存储:每个向量可关联任意元数据
  • 过滤查询:支持基于元数据的条件过滤
  • 批量操作:支持批量插入、更新和删除
  • 持久化:支持数据持久化存储
  • 分布式:支持客户端-服务器模式部署

性能优秀
chroma在保证易用性的同时,性能表现也非常出色。使用高效的HNSW索引算法,查询延迟在毫秒级。嵌入式模式零网络开销,适合开发和小规模部署。服务模式支持高并发,可满足生产环境需求。

三、适用场景

开发者学习和参考
对于希望学习向量数据库和嵌入技术的开发者,chroma是最好的入门工具。极简的API设计让初学者可以快速理解向量搜索的核心概念。

个人项目使用和集成
如果你是独立开发者,想要为个人项目添加语义搜索或RAG能力,chroma是最便捷的选择。一行pip install,几行代码,就能让应用拥有向量搜索能力。

企业级应用开发
对于需要快速迭代的AI应用,chroma提供了高效的开发体验。原型阶段可以使用嵌入式模式快速验证,生产阶段可以切换到服务模式满足性能要求。

技术学习和教学
chroma的简洁性使其成为教学向量数据库的理想工具。教师可以用chroma演示向量搜索的原理,学生可以用chroma快速构建应用。

四、安装教程

系统要求

工具用途下载/安装方式
Python运行环境[https://python.org/] (版本要求:3.8 或以上)
pip包管理器Python自带

安装步骤

步骤一:安装chroma

# 安装核心包
pip install chromadb

步骤二:验证安装

python -c "import chromadb; print(chromadb.__version__)"

步骤三:安装可选依赖(用于客户端模式)

# 如果需要运行服务器
pip install chromadb[server]

五、使用示例

示例一:创建集合和插入数据

最简单的chroma使用方式:

import chromadb

# 创建客户端(嵌入式模式)
client = chromadb.Client()

# 创建集合
collection = client.create_collection(
    name="my_documents",
    metadata={"description": "我的文档集合"}
)

# 插入文档
collection.add(
    documents=[
        "Python是一种高级编程语言",
        "向量数据库用于存储和搜索向量",
        "机器学习是人工智能的分支"
    ],
    metadatas=[
        {"source": "百科", "category": "编程"},
        {"source": "博客", "category": "数据库"},
        {"source": "教程", "category": "AI"}
    ],
    ids=["doc1", "doc2", "doc3"]
)

示例二:语义搜索

使用默认嵌入模型进行语义搜索:

# 搜索最相似的文档
results = collection.query(
    query_texts=["什么是Python"],
    n_results=2
)

print(results['documents'])
print(results['distances'])
print(results['metadatas'])

示例三:带过滤条件的搜索

结合元数据过滤进行搜索:

results = collection.query(
    query_texts=["数据库"],
    where={"category": "数据库"},  # 只搜索category为数据库的文档
    n_results=2
)

示例四:使用自定义嵌入模型

使用不同的嵌入模型:

import chromadb
from chromadb.utils import embedding_functions

# 使用OpenAI嵌入
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
    api_key="your-api-key",
    model_name="text-embedding-ada-002"
)

client = chromadb.Client()
collection = client.create_collection(
    name="openai_collection",
    embedding_function=openai_ef
)

# 插入和查询时会自动使用OpenAI嵌入
collection.add(
    documents=["文本内容"],
    ids=["id1"]
)

示例五:使用Hugging Face模型

使用开源的Hugging Face嵌入模型:

from chromadb.utils import embedding_functions

# 使用sentence-transformers模型
sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name="all-MiniLM-L6-v2"
)

client = chromadb.Client()
collection = client.create_collection(
    name="hf_collection",
    embedding_function=sentence_transformer_ef
)

示例六:持久化存储

将数据保存到磁盘:

# 创建持久化客户端
client = chromadb.PersistentClient(path="./chroma_data")

# 数据会自动保存到指定目录
collection = client.get_or_create_collection(name="persistent_collection")

collection.add(
    documents=["重要文档"],
    ids=["doc1"]
)

# 重启后数据依然存在
new_client = chromadb.PersistentClient(path="./chroma_data")
collection = new_client.get_collection("persistent_collection")
print(collection.count())  # 输出1

示例七:批量操作和更新

执行批量操作:

# 批量插入
ids = [f"doc_{i}" for i in range(100)]
documents = [f"文档内容{i}" for i in range(100)]

collection.add(
    ids=ids,
    documents=documents
)

# 更新文档
collection.update(
    ids=["doc_0"],
    documents=["更新后的内容"],
    metadatas=[{"updated": True}]
)

# 删除文档
collection.delete(ids=["doc_1", "doc_2"])

# 获取集合统计
print(f"文档数量: {collection.count()}")

示例八:RAG应用集成

使用chroma构建简单的RAG应用:

import chromadb
from langchain_openai import OpenAI
from langchain.chains import RetrievalQA

# 创建chroma向量存储
client = chromadb.PersistentClient("./kb_data")
collection = client.get_or_create_collection("knowledge_base")

# 添加知识库文档
documents = [
    "Python的列表推导式语法:[表达式 for 变量 in 列表]",
    "Python的装饰器用于修改函数行为",
    "异步编程使用async/await关键字"
]

collection.add(
    documents=documents,
    ids=[f"doc_{i}" for i in range(len(documents))]
)

# 查询相关文档
def get_relevant_docs(query, top_k=2):
    results = collection.query(
        query_texts=[query],
        n_results=top_k
    )
    return results['documents'][0]

# 构建RAG回答
def answer_with_rag(query):
    docs = get_relevant_docs(query)
    context = "\n".join(docs)
    
    prompt = f"基于以下信息回答问题:\n{context}\n\n问题:{query}\n答案:"
    
    # 这里可以调用LLM
    # response = llm.invoke(prompt)
    
    return prompt

print(answer_with_rag("Python的列表推导式是什么?"))

示例九:服务模式部署

启动chroma服务器:

# 启动服务
chroma run --host localhost --port 8000 --path ./chroma_data

使用客户端连接:

import chromadb

# 连接到服务器
client = chromadb.HttpClient(host="localhost", port=8000)

# 使用远程集合
collection = client.get_or_create_collection("remote_collection")
collection.add(
    documents=["远程文档"],
    ids=["remote_1"]
)

六、常见问题

问题一:安装失败或依赖冲突

原因:Python版本不兼容或依赖包冲突。

解决方案

  • 使用Python 3.8或更高版本
  • 在虚拟环境中安装:python -m venv chroma_env
  • 尝试安装特定版本:pip install chromadb==0.4.22

问题二:查询结果不相关

原因:嵌入模型不适合当前数据或查询表述不清。

解决方案

  • 尝试不同的嵌入模型(如OpenAI、Cohere)
  • 调整查询文本的表达方式
  • 检查文档内容质量
  • 使用多语言嵌入模型处理非英文数据

问题三:数据持久化失败

原因:路径权限问题或磁盘空间不足。

解决方案

  • 确保存储目录有读写权限
  • 使用绝对路径指定存储位置
  • 检查磁盘可用空间
  • 在Docker环境中正确挂载卷

问题四:服务模式连接失败

原因:服务未启动或网络配置问题。

解决方案

  • 确认服务器正在运行
  • 检查防火墙是否开放端口
  • 使用正确的主机地址(如localhost或0.0.0.0)
  • 查看服务器日志定位错误

问题五:内存占用高

原因:向量索引默认加载到内存中。

解决方案

  • 使用持久化模式减少内存占用
  • 限制集合大小
  • 启用向量压缩
  • 考虑使用服务模式并配置内存限制

七、总结

chroma是AI原生向量数据库中的佼佼者,它用极简的设计和优秀的开发者体验,让向量搜索不再是AI应用的瓶颈。无论是快速原型开发,还是生产环境部署,chroma都能提供恰到好处的支持。

与其他向量数据库相比,chroma最大的优势在于其易用性和集成能力。一行代码就能开始使用,几行代码就能完成向量搜索,无缝集成langchain等AI框架,让开发者可以专注于业务逻辑,而不必纠结于基础设施的复杂性。

如果你正在寻找一个简单、快速、开箱即用的向量数据库,chroma是最佳选择。无论是构建语义搜索、RAG应用,还是推荐系统、智能问答,chroma都能让你以最少的代码实现最强大的向量搜索能力。在这个AI应用快速发展的时代,掌握chroma,就是掌握了构建智能应用的快捷方式。

已有 5764 条评论

    1. Henry Henry

      2.7万星的量级,社区活跃,GitHub上issue响应快,文档也全。

    2. Michael Michael

      The persistent client with path is perfect for local development. No Docker needed.

    3. Grace Grace

      用chroma做代码片段检索,代码向量化后搜索,找相似功能的代码。

    4. Daniel Daniel

      collection.count()可以快速知道有多少文档,监控数据规模很方便。

    5. Victoria Victoria

      支持中文嵌入模型,用paraphrase-multilingual-MiniLM-L12-v2,中文语义搜索效果好。

    6. Mason Mason

      用chroma做商品推荐,商品描述向量化,找相似商品推荐给用户。

    7. Alexander Alexander

      The embedding function abstraction is elegant. Swap models without changing your code.

    8. James James

      用chroma做RAG应用的向量存储,配合OpenAI的嵌入和生成,效果很好。

    9. Evelyn Evelyn

      get_or_create_collection这个API很贴心,有就获取没有就创建,不用写判断逻辑。

    10. Harper Harper

      集合的metadata可以存描述信息,管理多个集合时容易区分用途。

    11. Lucas Lucas

      在Jupyter notebook里用chroma做实验,交互式探索向量搜索,很方便。