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的数据持久化到硬盘,这样程序启动的时候会去加载磁盘中的数据。