在前面的《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
保存完数据后的结果:
(图九:向量化表数据)