Semantic Kernel:使用PostgreSQL作为向量化库

在前面的《Semantic Kernel:用Embedding做客服(RAG)》中,我们是用Redis作为向量库的,这次,换成pg,看看怎么实现。

首先要引入Nuget包:

Microsoft.SemanticKernel.Connectors.Postgres
PostgreSQL本身安装后本身是不支持向量化(vector)的,需要安装扩展才可以。下面是github上pg的向量化扩展,并且这个扩展是需要自己用源码编辑并安装,官方给出的步骤如图一所示。但根据这个粗略的步骤,对像我这样的C++小白,还是费了点小周折的,所以把更明确的步骤分享出来。

github地址:https://github.com/pgvector/pgvector

(图一:pg的vector护展)

编译pgvector

1、首先要有Visual Studio,并安装C++开发套件,可以通过下面的bat文件来确认编译环境:C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat

2、其次配置两个环境变量nmake和PGROOT

nmake.exe所在路径:

把下面路径追加到Path列表中,C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.42.34226\bin\Hostx86\x64

和pg库所在路径:

添加如下节点PGROOT=C:\Program Files\PostgreSQL\16

3、再就是下载pgvector源码了,可以用git来clone或直接下载,并且放在一个路径下

4、最后使用x64 Native Tools Command Prompt for VS 2022 Preview来编译和安装。

在开始菜单的Visual Studio的安装目录下找到“x64 Native Tools Command Prompt for VS 2022 Preview”,如果看的更清晰一些,可以打开这个快捷方式的所在位置,从属性中查看

(图二:x64 Native Tools Command Prompt for VS 2022 Preview)

目标:%comspec% /k “C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat”。

其中指定了一个脚本文件 vcvars64.bat 的完整路径。vcvars64.bat 是一个 Visual Studio 提供的批处理文件,用于配置命令提示符的环境变量,使其适合于 64 位的 Visual C++ 开发。运行此脚本可以设置编译和构建所需的路径、库和工具链。

打开x64 Native Tools Command Prompt for VS 2022 Preview,并且进入pgvector所在路径,用下面命令编译:

nmake /F Makefile.win

(图三:nmake编译信息)

安装pgvector

用下面命令安装pgvector

nmake /F Makefile.win install

(图四:安装信息)
通过安装信息可知,安装的过程是在下面三个路径放了对应的文件:

A、动态库vector.dll:C:\Program Files\PostgreSQL\16\lib

(图五:vector.dll路径)

B、35个vector 扩展文件:C:\Program Files\PostgreSQL\16\share\extension

(图六:vector扩展文件)

C、三个类型定义文件:C:\Program Files\PostgreSQL\16\include\server\extension\vector

(图七:三个类型定义文件)

在PG中安装vector扩展

最后一步,打开pg,安装vector扩展:

CREATE EXTENSION vector;
安装扩展后,可查看安装结果,如图八红色部分。

(图八:安装vector结果)

如果想直接安装vector扩展,可以从下面地址下载对应文件,然后放在对应路径中,安装即可:

https://github.com/axzxs2001/Asp.NetCoreExperiment/blob/master/Asp.NetCoreExperiment/SemanticKernelArticle/pgvector.zip

保存完数据后的结果:

(图九:向量化表数据)

声明:文中观点不代表本站立场。本文传送门:http://eyangzhen.com/420896.html

联系我们
联系我们
分享本页
返回顶部