一架梯子,一头程序猿,仰望星空!
Chroma向量数据库教程 > 内容正文

Python Chromadb 向量数据库快速入门


Chroma是一款开源的向量数据库,它使用向量相似度搜索技术,可以快速有效地存储和检索大规模高维向量数据。它的应用场景包括推荐系统、图像和视频搜索、自然语言处理等领域,可以帮助用户快速地找到相似的数据和信息。

Chroma是一款应用嵌入式数据库,以包的形式嵌入到我们的代码,Chroma的优点就是简单,如果你在开发LLM应用需要一个向量数据库实现LLM记忆功能,需要支持文本相似语言搜索,又不想安装独立的向量数据库,Chroma是不错的选择,目前Chroma库支持python和JavaScript两种语言,本教程主要基于Python讲解。

1. 安装Chromadb

pip install chromadb

提示: chromadb当前版本对Python 3.11版本支持不友好,建议降低python版

2. 初始化Chroma客户端

import chromadb
chroma_client = chromadb.Client()

3. 创建一个集合

集合(collection)是在chroma数据库的作用类似Mysql的表,存储向量数据(包括文档和其他源数据)的地方,下面创建一个集合:

# 集合名字为tizi365
collection = chroma_client.create_collection(name="tizi365")

4. 添加数据

前面定义了一个集合,这里向集合添加数据,Chroma会存储我们的数据,并根据文本数据的向量创建专门的向量索引方便后面查询。

4.1. 使用内置的嵌入模型计算向量

# 添加2条文本数据,不指定文本向量,默认使用chroma内置的的文本嵌入模型计算文本特征向量
# documents参数就是需要写入的文本数据数组,支持一次插入多条数据
# metadatas是每条写入的数据关联的一些属性
# ids 是每条写入数据的id
collection.add(
    documents=["This is a document", "This is another document"],
    metadatas=[{"source": "my_source"}, {"source": "my_source"}],
    ids=["id1", "id2"]
)

4.2. 添加数据的时候指定向量值

# 添加2条文本数据,通过embeddings参数指定每条文本数据的向量
# 这种方式适合我们自己选择文本嵌入模型,提前计算出文本向量
collection.add(
    embeddings=[[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
    documents=["This is a document", "This is another document"],
    metadatas=[{"source": "my_source"}, {"source": "my_source"}],
    ids=["id1", "id2"]
)

5. 查询数据

现在你可以查询相似的文本内容,Chroma会返回“n”个最相似的结果。

下面根据query_texts查询参数,查询相似的文档内容。

results = collection.query(
    query_texts=["This is a query document"],
    n_results=2
)

默认情况下,Chroma中的数据是存储在内存中,重启程序数据就丢了,当然你可以设置Chroma的数据持久化到硬盘,这样程序启动的时候会去加载磁盘中的数据。


关联主题