简介
the AI-native open-source embedding database
Chroma is the open-source embedding database. Chroma makes it easy to build LLM apps by making knowledge, facts, and skills pluggable for LLMs.
特点
Simple: Fully-typed, fully-tested, fully-documented
Integrations: 能够集成 LangChain 以及 LlamaIndex
Dev, Test, Prod: the same API that runs in your python notebook, scales to your cluster
Feature-rich: Queries, filtering, density estimation and more
Free & Open Source: Apache 2.0 Licensed
核心代码(4 个函数)
Client(数据库)
本地持久化
前面代码中创建的集合不会落到数据盘中,只用于快速搭建项目原型,程序退出即消失。如果想使集合可以重复利用,只需要稍微修改一下代码即可:
客户端/服务端部署
实际项目一般不会只有客户端代码,因此 chroma 也被设计成可以客户端-服务端方式进行部署。
服务端启动命令:
客户端连接脚本:
Collection(集合)
创建 or 选择集合
探索集合
操作集合
增:add()
删:delete()
集合的删除操作通过指定
ids
实现如果没有指定
ids
,则会删除满足 where 的所有数据
改:update()
集合的修改也是通过指定 id
实现,如果 id
不存在,则会报错。
如果更新的内容是 documents
,则连同对应的 embeddings
都一并更新。
查:query
和 get()
两个接口
where
和 where_document
分别对元信息和文本进行过滤
get()
更像是传统意义上的 select
操作,同样也支持 where
和 where_document
两个过滤条件。
Embedding(嵌入)
嵌入是表示任何类型数据的 AI 原生方式,非常适合使用各种 AI 驱动的工具和算法。它们可以表示文本、图像,很快还可以表示音频和视频。
Chroma 有许多选项可用于创建嵌入,无论是在本地使用已安装的库,还是通过调用 API。
默认:all-MiniLM-L6-v2
默认情况下,Chroma 使用 all-MiniLM-L6-v2 的 Sentence Transformers 来创建 Embedding,如下所示:
默认的嵌入函数如下所示:
嵌入函数可以链接到集合,并在调用 add 、 update upsert 或 query 时使用。您也可以直接使用它们,这对于调试非常方便。
其他 Sentence Transformer
Chroma 还可以使用任何 Sentence Transformer 模型来创建嵌入:
您可以传入一个可选 model_name
参数,该参数允许您选择要使用的句子转换器模型。默认情况下,Chroma 使用 all-MiniLM-L6-v2
。
您可以在 这里 查看所有可用模型的列表。
自定义 Embedding Function
此外,Chroma 还可以与多种不同的嵌入模型进行集成,如下图所示:
例如,与 HuggingFace 模型进行集成:
您可以创建自己的嵌入函数以与 Chroma 一起使用,它只需要实现 EmbeddingFunction
即可:
下面使用 text2vec
库中的嵌入模型来定义 EmbeddingFunction
的例子:
Multi-modal(多模态)
Chroma 支持多模态集合,即可以存储多种数据模态并可由多种模式数据查询的集合。
除了对于文本(Document)数据的嵌入,Chroma 还可以处理图像(Image)、视频(Video)、语音(Audio)等多模态数据。
多模态的 Colab Demo
多模态嵌入函数
Chroma 支持多模态嵌入功能,可用于将来自多个模态的数据嵌入到单个嵌入空间中。
Chroma 内置了 OpenCLIP 嵌入函数,支持文本和图像。
数据加载器
Chroma 支持数据加载器,用于通过 URI 存储和查询存储在 Chroma 本身之外的数据。
Chroma 不会存储此数据,而是存储 URI,并在需要时从 URI 加载数据。
Chroma 有一个数据加载器(data loader),用于从内置的文件系统加载图像。
多模态集合
可以通过传入多模态嵌入函数来创建多模态集合(multi-modal collection)。
为了从 URI 加载数据,还必须传入数据加载器。
往集合中添加 numpy 类型的图片:
与文本检索类似,只是变成了 query_images
而已
Integration(集成)
Chroma 与许多流行的 LLM 工具保持集成。这些工具可用于定义 AI 原生应用程序的业务逻辑、管理数据、微调嵌入空间等。包括:
LangChain
参考:
LlamaIndex
参考:
参考
文档信息
- 本文作者:Bookstall
- 本文链接:https://bookstall.github.io/2024/04/14/chroma-database/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)