Chroma向量数据库使用指南:从入门到实践

Chroma向量数据库使用指南:从入门到实践

chroma the AI-native open-source embedding database chroma 项目地址: https://gitcode.com/gh_mirrors/chrom/chroma

概述

Chroma是一个开源的向量数据库,专为存储和检索向量嵌入而设计。它提供了简单易用的API,支持多种编程语言,包括Python和JavaScript。本文将详细介绍Chroma的核心功能和使用方法,帮助开发者快速上手。

安装与初始化

Python环境安装

pip install chromadb

初始化持久化客户端

Chroma支持将数据持久化到本地磁盘,数据会自动保存并在下次启动时加载:

import chromadb
client = chromadb.PersistentClient(path="/path/to/save/to")

其中path参数指定数据库文件的存储位置。

客户端实用方法

# 心跳检测,确认客户端连接状态
client.heartbeat()  

# 重置数据库(⚠️不可逆操作)
client.reset()  

客户端-服务器模式

启动服务器

chroma run --path /db_path

连接服务器

import chromadb
client = chromadb.HttpClient(host='localhost', port=8000)

异步客户端

import asyncio
import chromadb

async def main():
    client = await chromadb.AsyncHttpClient()
    collection = await client.create_collection(name="my_collection")
    await collection.add(documents=["hello world"], ids=["id1"])

asyncio.run(main())

集合(Collection)操作

创建集合

collection = client.create_collection(
    name="my_collection",
    embedding_function=emb_fn  # 可选嵌入函数
)

命名规范

  • 长度3-63字符
  • 以字母或数字开头结尾
  • 可包含点、短横线和下划线
  • 不能是有效的IP地址

集合管理

# 获取现有集合
collection = client.get_collection(name="test")  

# 获取或创建集合
collection = client.get_or_create_collection(name="test")  

# 删除集合(⚠️不可逆)
client.delete_collection(name="my_collection")  

实用方法

collection.peek()  # 查看前10项
collection.count()  # 统计项数
collection.modify(name="new_name")  # 重命名

距离函数配置

创建集合时可指定距离计算方法:

collection = client.create_collection(
    name="collection_name",
    metadata={"hnsw:space": "cosine"}  # 可选: l2(默认), ip, cosine
)

距离函数对比

| 方法 | 参数 | 公式 | 适用场景 | |------|------|------|----------| | 平方L2距离 | l2 | ∑(A_i-B_i)² | 一般向量比较 | | 内积 | ip | 1.0 - ∑(A_i×B_i) | 相似度计算 | | 余弦相似度 | cosine | 1.0 - ∑(A_i×B_i)/√(∑A_i²)×√(∑B_i²) | 文本相似度 |

数据操作

添加数据

collection.add(
    documents=["doc1", "doc2"],  # 原始文本
    embeddings=[[1.1, 2.3], [4.5, 6.9]],  # 可选预计算嵌入
    metadatas=[{"key": "value"}, ...],  # 元数据
    ids=["id1", "id2"]  # 唯一标识
)

查询数据

# 使用嵌入查询
results = collection.query(
    query_embeddings=[[11.1, 12.1], ...],
    n_results=10,
    where={"field": "value"},  # 元数据过滤
    where_document={"$contains":"text"}  # 文档内容过滤
)

# 使用文本查询(自动嵌入)
results = collection.query(
    query_texts=["query text", ...],
    n_results=10
)

按ID获取数据

items = collection.get(
    ids=["id1", "id2"],
    where={"field": "value"}
)

最佳实践

  1. 嵌入维度一致性:确保添加的嵌入维度与集合创建时的维度一致
  2. ID唯一性:每个文档必须有唯一ID,重复添加会覆盖原有数据
  3. 元数据过滤:合理设计元数据结构,便于后续查询过滤
  4. 距离函数选择:根据应用场景选择最适合的距离计算方法

通过本文介绍,开发者可以快速掌握Chroma的核心功能,在实际项目中实现高效的向量存储和检索。

chroma the AI-native open-source embedding database chroma 项目地址: https://gitcode.com/gh_mirrors/chrom/chroma

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

<think>好的,用户想了解如何使用Chroma向量数据库。首先,我需要回忆一下Chroma的基本信息,它是一个开源的向量数据库,常用于机器学习和AI应用中,特别是在处理文本嵌入和相似性搜索方面。用户可能希望了解如何安装、初始化、存储数据以及进行查询等步骤。 根据系统指令,我需要使用正确的中文回答,并遵循LaTeX格式要求。同时,要生成相关问题,并在回答中自然地添加引用标识。用户提供的引用中,引用[1]提到更多Chroma的详细信息,引用[3]讨论了向量数据库与LLM的集成,这可能对用户有帮助。 首先,我应该分步骤介绍Chroma的使用,包括安装、客户端初始化、集合创建、添加文档、查询等。需要确保每个步骤有代码示例,并用Python的代码块展示。同时,引用相关文献,比如在介绍Chroma时引用[^1],在讨论与LLM集成时引用[^3]。 然后,生成相关问题,可能需要包括性能优化、与其他工具集成、部署方式等,引用中的部署方法在引用[4]提到,可以引用到相关问题中。同时,用户可能对实际应用场景感兴趣,比如与LLM结合,这也需要覆盖。 检查是否符合所有格式要求:行内数学表达式是否正确使用$...$,独立公式是否用$$...$$,但当前内容可能不涉及复杂数学公式,所以可能不需要。确保回答结构清晰,分步骤说明,代码块正确,引用标识自然添加。 最后,验证信息准确性,比如安装命令是否正确,Chroma的最新用法是否有变化,是否需要提到持久化存储或服务器部署等。根据引用[4],部署方法可能涉及Docker等,但用户问题主要聚焦在使用方法,可能不需要详细展开部署,但可以在相关问题中提及。 总结回答结构:简介、安装、初始化客户端、创建集合、添加文档、查询、与LLM集成,然后相关问题部分。确保每个部分都有对应的引用,如简介引用,集成引用[^3],部署引用[^4]。</think>### 如何使用Chroma向量数据库 Chroma是一个轻量级、高性能的开源向量数据库,专为机器学习场景设计,尤其适合存储和检索文本嵌入(embeddings)。以下是其核心使用步骤: --- #### 1. **安装Chroma** ```bash pip install chromadb ``` --- #### 2. **初始化客户端** ```python import chromadb client = chromadb.Client() # 默认使用内存模式 # 持久化存储模式(需指定路径) # client = chromadb.PersistentClient(path="chroma_db") ``` --- #### 3. **创建集合(Collection)** 集合用于存储相似类型的向量数据: ```python collection = client.create_collection(name="docs") ``` --- #### 4. **添加文档与向量** 将文本、元数据和对应向量存入集合: ```python documents = ["机器学习简介", "Chroma的向量检索原理"] metadatas = [{"source": "book1"}, {"source": "paper2"}] ids = ["doc1", "doc2"] # 假设已生成嵌入向量(例如用BERT模型) embeddings = [[0.1, 0.2, ...], [0.3, 0.4, ...]] collection.add( documents=documents, metadatas=metadatas, ids=ids, embeddings=embeddings ) ``` --- #### 5. **相似性查询** 通过查询向量检索最相关的文档: ```python query_embedding = [0.15, 0.25, ...] # 查询文本的嵌入向量 results = collection.query( query_embeddings=query_embedding, n_results=3 # 返回前3个匹配项 ) # 输出匹配文档内容 print(results["documents"]) ``` --- #### 6. **与LLM集成(如GPT)** 将Chroma的检索结果输入大语言模型以生成回答: ```python from langchain.llms import OpenAI llm = OpenAI() query = "机器学习的核心概念是什么?" # 1. 通过Chroma检索相关上下文 contexts = collection.query(query_embeddings=...) # 2. 将上下文与问题结合输入LLM response = llm.generate( f"基于以下信息回答:{contexts}。问题:{query}" ) print(response) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱恺才Grace

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值