Chroma向量数据库入门指南:轻量开源,专为LLM和RAG应用设计

2026-05-22 人工智能 865 次阅读 0 次点赞
Chroma是一个开源的向量数据库,专为AI和大型语言模型应用设计,用于存储和检索文本等非结构化数据的向量嵌入。其核心特点是轻量易用,提供简洁API,几行代码即可实现相似性搜索。它原生集成LangChain等LLM生态,支持多种嵌入模型和混合查询。Chroma可完全本地化部署,保障数据隐私。主要应用场景包括检索增强生成(RAG)、语义缓存和代理记忆。相比Pinecone、Milvus等,Chroma易用性极高,适合快速搭建RAG原型和小型应用,但不适合亿级规模的生产环境。

Chroma 是一个开源的向量数据库(Vector Database),专为人工智能和大型语言模型(LLM)应用而设计。它的核心目标是让开发者能够轻松存储、检索和搜索由非结构化数据(如文本、图像、音频)生成的向量嵌入(Embeddings)。

常用地址

官方网站:https://www.trychroma.com/

开源项目:https://github.com/chroma-core/chroma

核心特点

轻量与易用

相比 Milvus 等工业级向量数据库,Chroma 极为轻量。它可以在内存中运行,也可以持久化到磁盘。

提供简洁的 Python 和 JavaScript API,几行代码即可创建数据库、添加文档并执行相似性搜索。

原生集成 LLM 生态

与 LangChain、LlamaIndex 等主流 AI 编排框架无缝集成。

内置支持多种 Embedding 模型(如 OpenAI、Hugging Face、Google PaLM 等),也可使用自定义模型。

多种检索模式

支持精确的向量相似性搜索(余弦、欧氏距离等)。

支持基于元数据的过滤,实现“向量搜索 + 标量过滤”的混合查询。

未来计划支持全文搜索(关键词匹配)和混合检索(Hybrid Search)。

开源与本地化部署

Apache 2.0 协议,代码托管在 GitHub(chroma-core/chroma)。

可完全本地运行,无需连接外部服务,保障数据隐私安全。

客户端-服务器架构

提供 HTTP 客户端模式,支持多进程/多用户访问后端服务器;也支持内存模式(适合开发测试)。

安装方法

pip install chromadb

典型应用场景

检索增强生成(RAG)

这是 Chroma 最核心的应用。将私密文档(如 PDF、网页、公司内部资料)切片并向量化存储到 Chroma。当用户提问时,先检索相关片段,再将片段+问题一起提交给 LLM,从而获得准确、基于事实的回答,同时避免幻觉(Hallucination)。

语义缓存(Semantic Cache)

缓存 LLM 的响应,当遇到语义相似的新问题时,直接返回缓存答案,节省成本和时间。

相似性匹配

查找与给定文本最相似的文档(如推荐系统、问答匹配、去重检测)。

代理记忆(Agent Memory)

为基于 LLM 的智能代理(Agent)提供长期记忆,让代理能记住历史交互或环境信息。

与其他向量数据库的对比

特性 Chroma Pinecone Weaviate Milvus
开源 ✅ ❌ ✅ ✅
本地部署 ✅ ❌ ✅ ✅
易用性 极高 高 中 中
生产级扩展性 中 高 高 极高
适用场景 原型、小规模RAG 商业SaaS 通用 大规模、高性能
依赖 轻量,可无外部依赖 付费服务 需Docker/K8s 需K8s或云服务

示例

根据id获取文档和根据文本查询文档

import chromadb

# 创建客户端
chroma_client = chromadb.Client()

# 创建集合
collection = chroma_client.create_collection(name="my_collection")

# 添加文档
collection.add(
    ids=["id1", "id2"],
    documents=[
        "This is a document about pineapple",
        "This is a document about oranges",
    ],
)

# 获取文档
result = collection.get(ids=["id1"])
print(result)

# 查询文档
results = collection.query(
    query_texts=["This is a query document about hawaii"],
    n_results=2,
)

print(results)

根据向量距离和过滤条件查询文档

import chromadb

# 创建客户端
chroma_client = chromadb.Client()

# 创建集合
collection = chroma_client.create_collection(name="my_collection")

# 添加文档
collection.add(
    ids=["id1", "id2"],
    embeddings=[
        [0.1, 0.2, 0.3],
        [0.4, 0.5, 0.6],
    ],
    metadatas=[{"category": "pineapple"}, {"category": "orange"}],
    documents=[
        "This is a document about pineapple",
        "This is a document about oranges",
    ],
)

# 根据距离查询文档
results = collection.query(
    query_embeddings=[[0.4, 0.5, 0.6]],  # 使用3维向量
    n_results=1,
)

print("基于向量距离的查询结果:")
print(results)

# 过滤文档
results = collection.query(
    query_embeddings=[[0.1, 0.2, 0.3]], where={"category": "pineapple"}  # 使用3维向量
)

print("\n基于过滤条件的查询结果:")
print(results)

总结

Chroma 适合:

  • 快速搭建 RAG 原型或小型应用(个人项目、黑客马拉松、教学演示)。
  • 对数据隐私敏感、必须完全本地运行的环境。
  • 开发者希望用最简单的代码实现向量搜索。

不适合:

  • 亿级规模向量、高并发、分布式生产环境(此时应考虑 Milvus、Qdrant 或云服务 Pinecone)。

Chroma 凭借其“极简主义”设计,已成为 LangChain 文档中默认推荐的向量数据库,是入门 RAG 技术的最佳起点之一。

最后更新于4月前
本文由人工编写,AI优化,转载请注明原文地址: Chroma向量数据库入门指南:轻量开源,专为LLM和RAG应用设计

评论 (0)

请 登录 后发表评论

暂无评论,快来发表第一条评论吧!