基于 RAG(Retrieval-Augmented Generation)引擎的企业级 AI 业务,对向量的存储和检索是至关重要的,各种类型的数据(文本、图像、声音和视频)都可以转换为向量,从而为复杂的数据结构提供了一种强大的数据表示能力,使其在机器学习和人工智能领域有着广泛的适用性和重要性。目前支持向量操作的解决方案有很多,这里介绍的是通过 PostgreSQL 数据库加插件的方式来支持向量操作。
操作系统为 Ubuntu os 22.04 64 位操作系统,首先安装数据库、附加组件包(包括一系列扩展模块、工具、插件和额外功能),以及数据库的软件开发包(包括开发工作所需要的头文件和各类函数)。
sudo apt-get install postgresql postgresql-contrib postgresql-server-dev-14
如果整个安装过程正常结束的话,可以通过指令查看和操作数据库服务状态,也可以根据监听端口(默认端口 5432)查看服务状态。
# 查看
sudo systemctl status postgresql.service
# 停止
sudo systemctl stop postgresql.service
# 启动
sudo systemctl start postgresql.service
# 重启
sudo systemctl restart postgresql.service
接下来执行 sudo -i -u postgres 命令,使用用户 postgres 登录数据库,执行 createuser --interactive 命令后并输入新的用户名,并根据情况赋予用户角色权限,更可以通过命令 alter role 用户名 with password '123456' 来设置新用户的密码。
(Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y)
然后可以准备安装插件了,经过下载、编译、部署,以及重启数据库服务,向量插件就算安装完成了。
# 临时安装路径
cd /tmp
# 下载插件源码
git clone --branch v0.5.1 https://github.com/pgvector/pgvector.git
# 进入安装路径
cd pgvector
# 编译插件源码
make
# 安装部署组件
sudo make install
# 重启数据服务
sudo systemctl restart postgresql.service
另外还有二个地方的配置需要做个调整,/etc/postgresql/14/main/pg_hba.conf 文件的 98 行,以及 /etc/postgresql/14/main/postgresql.conf 文件的 60 行;
# /etc/postgresql/14/main/pg_hba.conf
# 原始配置
host all all 127.0.0.1/32 scram-sha-256
# 变更配置(允许所有地址以用户名密码方式登录数据库)
host all all 0.0.0.0/0 md5
# /etc/postgresql/14/main/postgresql.conf
# 原始配置
listen_addresses = 'localhost' # what IP address(es) to listen on;
# 变更配置
listen_addresses = '*' # what IP address(es) to listen on;
最后再次登录数据库,执行命令 CREATE EXTENSION IF NOT EXISTS vector ,完成整个安装过程,下面是一个包含 vector 类型字段的建表 SQL 供参考。
CREATE TABLE "public"."my_table"
(
"id" bigserial NOT NULL ,
"doc_id" varchar(64) ,
"embedding" vector(1024)
)
WITH (
FILLFACTOR = 100,
OIDS = FALSE
)
;
ALTER TABLE "public"."my_table" OWNER TO dev;
COMMENT ON COLUMN "public"."my_table"."doc_id" IS '文档 ID';
COMMENT ON COLUMN "public"."my_table"."embedding" IS '向量';