如何将常规关系型数据库转换为向量数据库以存储嵌入向量

将关系型数据库转换为向量数据库以存储嵌入向量的方法

在如今的生成式人工智能世界中,向量数据库已成为设计基于LLM的应用程序的重要组成部分之一。无论您计划使用OpenAI或Google的生成式AI构建应用程序,还是考虑解决设计推荐引擎或构建计算机视觉(CV)或向量数据库等用例,都需要考虑向量数据库。

什么是向量数据库,它们与传统数据库有何不同?

在机器学习领域,向量或嵌入表示数据的数值或数学形式,可以是文本、图像或媒体内容(音频或视频)。OpenAI或其他机构的LLM可以将常规数据转换为具有高级多维度的向量嵌入,并将其存储在向量空间中。这些数值形式有助于确定数据之间的语义含义、识别模式或聚类,或者绘制关系。常规的基于列的关系型数据库(RDBMS)或NoSQL数据库无法存储具有多个维度的向量嵌入数据,并且在需要时无法有效扩展。这就是我们需要向量数据库的原因,它是一种特殊类型的数据库,专门设计用于处理和存储这种类型的嵌入数据,并同时提供高性能和可扩展性。

在数据检索或索引搜索过程中,传统数据库返回与查询完全匹配的结果,而向量数据库使用诸如最近邻算法(K-NN)或近似最近邻算法(A-NN)来查找在相同维度中具有相似向量或应用余弦算法计算最短距离的向量,并返回具有相似结果的结果。这有助于解决一些用例,例如在一组拍摄的照片中查找相似图像、基于某种使用情况构建推荐引擎或在大量数据集中识别模式。

正如您所看到的,向量数据库具有高效存储和搜索向量数据的能力,这对于使用大型语言模型(LLM)设计和构建AI应用程序至关重要。我们有许多向量数据库,包括On-Premise用途的Redis Enterprise或Milvus,以及Pinecone等SAAS提供的数据库。在本文中,我们将探讨最受欢迎的关系型数据库Postgres以及如何将其转换为能够与其他企业级热门向量数据库性能相匹配的完整向量数据库。

如何将Postgres转换为向量数据库?

Postgres是一种流行的关系型数据库管理系统(RDBMS),它是开源的,但性能与许多企业级RDBMS相似。它已经在市场上存在很长时间,以其性能、易用性和健壮性而主导。

开源社区构建了一个名为pgvector的扩展,当安装和激活后,它可以将常规的Postgres安装转换为具有支持任何LLM生成的任何维度的嵌入数据存储和索引的向量数据库。最好的部分不仅是嵌入数据,常规数据也可以存储和索引在同一个数据库中。Pgvector在查询数据时使用精确和近似最近邻算法,因此有时它的性能超过其他数据库。

以下是我用于启动已经打包了pgvector扩展的Postgres Docker版本的Docker组合文件。在Docker组合文件中,我还添加了Pgadmin作为数据库客户端,以便您可以访问您的数据库。

图1:运行具有pgvector的Postgres的Docker组合命令。

图2:PGAdmin客户端(通过端口5050可访问)

一旦添加Postgres运行服务器,使用以下SQL命令启用向量扩展:

结论

在本文中,我们探讨了如何利用开源社区的力量,基于传统的关系型数据库管理系统构建一个可扩展、健壮且高性能的向量数据库。如果您是数据科学工程师、软件工程师,或者只是为下一个基于AI的项目设计或探索解决方案,那么带有pgvector的Postgres绝对可以帮助解决一些用例,如相似性搜索、推荐引擎和异常检测。我们还演示了如何使用Docker组合等简单工具轻松安装和配置具有pgvector扩展,并将其与现有微服务框架集成。