ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • 1. Chroma 概述
  • 2. 核心概念
    • 2.1 集合(Collection)
    • 2.2 查询(Query)
  • 3. 安装与基本使用
    • 安装
    • 基本使用示例
  • 4. 主要功能
    • 4.1 向量存储与检索
    • 4.2 相似性搜索
    • 4.3 元数据过滤
  • 5. 高级特性
    • 5.1 自定义嵌入函数
    • 5.2 持久化存储
    • 5.3 多模态支持
  • 6. 性能优化
    • 6.1 批量操作
    • 6.2 索引优化
  • 7. 应用场景
  • 8. 与其他向量数据库比较
  • 9. 最佳实践
  • 10. 限制与注意事项

Chroma 是一个开源的向量数据库,专门为 AI 应用设计,用于存储和检索向量嵌入(embeddings)

1. Chroma 概述 #

Chroma 概述部分主要介绍 Chroma 的基本定位、核心优势和适用场景,帮助你快速了解这个向量数据库的特点。

Chroma是一个轻量级的向量数据库,主要特点包括:

  • 简单易用:提供简洁的 API,易于集成到 AI 应用中
  • 高性能:针对向量搜索进行了优化
  • 开源:采用 Apache 2.0 许可证
  • 内存优先:默认使用内存存储,也支持持久化
  • 多语言支持:提供 Python 和 JavaScript 接口

2. 核心概念 #

本节介绍 Chroma 的基本数据结构和核心机制,包括集合、嵌入函数和查询方式,是理解后续用法的基础。

2.1 集合(Collection) #

集合是 Chroma 中的主要组织单位,类似于传统数据库中的表。每个集合包含:

  • 向量嵌入
  • 关联的元数据
  • 可选的 ID

2.2 查询(Query) #

本节介绍 Chroma 支持的多种查询方式,包括相似性搜索和元数据过滤,帮助你高效检索所需数据。

Chroma 支持多种查询方式:

  • 相似性搜索:查找与查询向量最相似的向量
  • 过滤查询:基于元数据过滤结果

3. 安装与基本使用 #

本节讲解如何安装 Chroma,并通过简单的代码示例演示其基本用法,适合新手快速上手。

安装 #

pip install chromadb

基本使用示例 #

# 导入 chromadb 库
import chromadb

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

# 获取或创建一个名为 my_collection 的集合
collection = client.get_or_create_collection("my_collection")

# 向集合中添加文档、元数据和ID
collection.add(
    documents=["这是第一个文档", "这是第二个文档"],
    metadatas=[{"source": "doc1"}, {"source": "doc2"}],
    ids=["id1", "id2"]
)

# 查询与输入文本最相关的文档,返回2条结果
results = collection.query(
    query_texts=["查找相关文档"],
    n_results=2
)
# 打印查询结果
print(results)

4. 主要功能 #

本节详细介绍 Chroma 的核心功能,包括向量存储、检索、相似性搜索和元数据过滤等,帮助你掌握常用操作。

4.1 向量存储与检索 #

本节演示如何将向量数据存入 Chroma,并通过向量进行高效检索。

# 导入 chromadb 库
import chromadb

# 创建 Chroma 客户端
client = chromadb.Client()
# 获取或创建集合
collection = client.get_or_create_collection("my_collection")

# 添加带有预计算嵌入的数据(示例向量)
collection.add(
    embeddings=[[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]],  # 向量列表
    documents=["doc1", "doc2"],
    ids=["id1", "id2"]
)

# 用向量进行检索,返回最相近的1条结果
results = collection.query(
    query_embeddings=[[0.1, 0.2, 0.3]],
    n_results=1
)
# 打印检索结果
print(results)

4.2 相似性搜索 #

本节介绍如何基于文本或向量进行相似性搜索,快速找到最相关的数据。

# 导入 chromadb 库
import chromadb

# 创建 Chroma 客户端
client = chromadb.Client()
# 获取或创建集合
collection = client.get_or_create_collection("my_collection")

# 添加文档和ID
collection.add(documents=["这是第一个文档", "这是第二个文档"], ids=["id1", "id2"])

# 基于文本进行相似性查询,返回2条结果
results = collection.query(query_texts=["查询文本"], n_results=2)
# 打印文本查询结果
print(results)

# 基于向量进行相似性查询,返回2条结果
# 假设你有一个384维的向量
query_vec = [[0.1] * 384]
results_vec = collection.query(query_embeddings=query_vec, n_results=2)
# 打印向量查询结果
print(results_vec)

4.3 元数据过滤 #

本节演示如何通过元数据过滤,实现更精细的数据检索。

# 导入 chromadb 库
import chromadb

# 创建 Chroma 客户端
client = chromadb.Client()
# 获取或创建集合
collection = client.get_or_create_collection("my_collection")

# 添加文档、元数据和ID
collection.add(
    documents=["文档A", "文档B"],
    metadatas=[{"type": "A"}, {"type": "B"}],
    ids=["idA", "idB"]
)

# 基于元数据过滤查询,只返回type为A的文档
results = collection.query(
    query_texts=["文档"],
    n_results=2,
    where={"type": {"$eq": "A"}}
)
# 打印过滤查询结果
print(results)

5. 高级特性 #

本节介绍 Chroma 的进阶用法,包括自定义嵌入函数、持久化存储和多模态支持,适合有更高需求的开发者。

5.1 自定义嵌入函数 #

本节讲解如何使用自定义的嵌入模型,将文本等数据转为向量,满足不同场景需求。

pip install sentence_transformers
# 导入 chromadb 库
import chromadb
# 导入嵌入函数工具
from chromadb.utils import embedding_functions

# 创建自定义嵌入函数,使用指定的模型
custom_ef = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name="paraphrase-MiniLM-L3-v2"
)

# 创建 Chroma 客户端
client = chromadb.Client()
# 获取或创建集合并指定嵌入函数
collection = client.get_or_create_collection(
    "custom_embedding_collection",
    embedding_function=custom_ef
)

# 添加文档和ID
collection.add(
    documents=["自定义嵌入文档"],
    ids=["custom_id"]
)

# 查询与输入文本最相关的文档
results = collection.query(
    query_texts=["嵌入"],
    n_results=1
)
# 打印查询结果
print(results)

5.2 持久化存储 #

本节说明如何将数据持久化到本地磁盘,保证数据不会因程序关闭而丢失。

# 导入 chromadb 库
import chromadb

# 创建持久化客户端,数据保存在本地目录 ./chroma_data
persistent_client = chromadb.PersistentClient(path="./chroma_data")

# 获取或创建持久化集合
collection = persistent_client.get_or_create_collection("persistent_collection")

# 添加文档和ID
collection.add(
    documents=["持久化文档"],
    ids=["persist_id"]
)

# 查询与输入文本最相关的文档
results = collection.query(
    query_texts=["持久化"],
    n_results=1
)
# 打印查询结果
print(results)

5.3 多模态支持 #

本节介绍如何在 Chroma 中存储和检索多种类型的数据(如文本、图片等),实现多模态应用。

pip install sentence_transformers pillow
# 导入chromadb库,用于向量数据库操作
import chromadb
# 导入SentenceTransformer,用于加载多模态模型
from sentence_transformers import SentenceTransformer
# 导入PIL库中的Image模块,用于图片处理
from PIL import Image

# 加载CLIP模型(clip-ViT-B-32),支持图片和文本的embedding
model = SentenceTransformer("clip-ViT-B-32")

# 定义函数:读取图片并转为embedding向量
def get_image_embedding(image_path):
    # 打开图片并转换为RGB格式
    img = Image.open(image_path).convert("RGB")
    # 使用模型对图片进行编码,得到embedding,返回numpy数组
    emb = model.encode([img], convert_to_numpy=True)
    # 取出第一个embedding并转为list,方便后续存储
    return emb[0].tolist()

# 生成图片"dog1.jpeg"的embedding向量
img_embedding = get_image_embedding("dog1.jpeg")

# 创建Chroma数据库客户端
client = chromadb.Client()
# 获取或创建名为"multi_modal_collection"的集合
collection = client.get_or_create_collection("multi_modal_collection")

# 向集合中添加图片的embedding、描述文本和唯一ID
collection.add(embeddings=[img_embedding], documents=["图片内容描述"], ids=["img1"])

# 生成查询图片"dog1.jpeg"的embedding向量
query_embedding = get_image_embedding("dog1.jpeg")
# 在集合中检索与查询embedding最相似的1条数据
results = collection.query(query_embeddings=[query_embedding], n_results=1)
# 打印检索结果
print(results)

6. 性能优化 #

本节介绍提升 Chroma 性能的技巧,包括批量操作和索引优化,适合大规模数据场景。

6.1 批量操作 #

本节演示如何一次性批量添加和检索大量数据,提高处理效率。

# 导入 chromadb 库
import chromadb

# 创建 Chroma 客户端
client = chromadb.Client()
# 获取或创建集合
collection = client.get_or_create_collection("batch_collection")

# 批量添加10条文档和ID
collection.add(
    documents=[f"文档{i}" for i in range(10)],
    ids=[f"id{i}" for i in range(10)]
)

# 查询与输入文本最相关的3条文档
results = collection.query(
    query_texts=["文档"],
    n_results=3
)
# 打印查询结果
print(results)

6.2 索引优化 #

本节讲解如何通过调整索引参数,提升大规模向量检索的速度和准确性。

# 导入 chromadb 库
import chromadb

# 创建 Chroma 客户端
client = chromadb.Client()
# 获取或创建集合并指定HNSW索引的距离度量方式为cosine
collection = client.get_or_create_collection(
    "optimized_collection",
    metadata={"hnsw:space": "cosine"}  # 距离度量方式
)

# 添加文档和ID
collection.add(
    documents=["优化文档"],
    ids=["opt_id"]
)

# 查询与输入文本最相关的文档
results = collection.query(
    query_texts=["优化"],
    n_results=1
)
# 打印查询结果
print(results)

7. 应用场景 #

本节列举了 Chroma 在实际项目中的典型应用,包括语义搜索、问答系统、推荐、去重和聚类等。

  1. 语义搜索:构建基于语义而非关键词的搜索系统
  2. 问答系统:存储知识库并检索相关答案
  3. 推荐系统:基于内容相似性推荐项目
  4. 去重:识别相似或重复内容
  5. 聚类:对相似项目进行分组

8. 与其他向量数据库比较 #

本节对比了 Chroma 与其他主流向量数据库的异同,帮助你选择最适合自己需求的产品。

特性 Chroma Pinecone Weaviate Milvus
开源 是 否 是 是
托管选项 无 有 有 有
本地运行 支持 不支持 支持 支持
多模态 支持 有限 支持 支持
语言支持 Python/JS 多语言 多语言 多语言

9. 最佳实践 #

本节总结了使用 Chroma 的一些实用建议,帮助你更高效、更安全地管理和检索数据。

  1. 预处理数据:在添加前清理和规范化数据
  2. 选择合适的嵌入模型:根据任务选择专用模型
  3. 合理使用元数据:便于后续过滤和检索
  4. 批量操作:减少频繁的小批量操作
  5. 监控性能:定期检查查询延迟和准确性

10. 限制与注意事项 #

本节提醒你 Chroma 在实际使用中的一些局限和注意事项,便于规避风险。

  1. 内存限制:默认内存存储,大数据集需考虑持久化
  2. 生产准备:相比商业方案,可能需要更多运维工作
  3. 高级功能:缺少一些企业级功能如细粒度访问控制
  4. 扩展性:大规模部署可能需要额外工作

访问验证

请输入访问令牌

Token不正确,请重新输入