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

2024-06-21 人工智能 451 次阅读 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 技术的最佳起点之一。

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

评论 (0)

登录 后发表评论

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