背景
最近 2 年比较火的知识库和 RAG。底层的知识的检索功能都会用到向量数据库来做知识的匹配。
如图所示是 RAG 的一个架构,一般都会搭配一个向量数据库。
常见的向量数据库有:FAISS、Milvus、Weaviate、PGVector 等
Postgresql可以安装pgvector插件将Postgresql扩展成一个向量数据库。
作为一个后端程序员对 Postgresql 还是比较熟悉的,上手起来也比较快。
本文将介绍pgvector的安装与使用。
安装pgvector
pgvector是在 github 上开源项目。
我们可以访问 github.com/pgvector/pg…
去查看pgvector 的相关文档。
pgvector的安装方式有很多,可以使用 Linux、Mac、Windows 命令安装。也可以通过 Docker等其他的方式进行安装。
本文将介绍通过 Linux 命令的方式安装。
Linux中安装pgvector
本文介绍在 linux 机器上通过源代码安装的方式安装pgvector插件。
在正式安装之前需要确保在Linux 机器上安装好 Postgresql 的服务。
这里已经提前在Debian的机器上安装了 Postgresql 16 的服务。
然后直接在命令行中执行如下命令
cd /tmp
git clone --branch v0.8.0 <https://github.com/pgvector/pgvector.git>
cd pgvector
make
make install # may need sudo
在安装过程可能会遇到下面的报错
需要安装 Postgresql 相关的开发包,命令如下:
sudo apt install postgresql-server-dev-16
然后在执行
make
make install # may need sudo
pgvector入门
启用 pgvector 插件
在postgresql中启用pgvector需要在需要存储向量的数据库中执行如下命令:
CREATE EXTENSION vector;
创建可存储的向量表
创建一个存储向量的数据表,包含可以存储3 个维度的向量数据的字段embedding。
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
向量的数据插入
插入一些测试数据
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
向量的检索
向量的检索主要是通过向量的距离函数来计算两个向量的距离来进行检索。
两个向量的距离越近表示两个向量相似度越高。
pgvector支持的距离函数如下:
<->- L2 distance(欧几里得距离)<#>- (negative) inner product<=>- cosine distance(余弦)<+>- L1 distance (added in 0.7.0)<~>- Hamming distance (binary vectors, added in 0.7.0)<%>- Jaccard distance (binary vectors, added in 0.7.0)
下面以余弦相似度的为例来对向量[3,1,2]进行检索
SELECT id,embedding,embedding <=> '[3,1,2]' as similarity
FROM items ORDER BY embedding <=> '[3,1,2]' LIMIT 5;
similarity代表余弦相似度的值,如果余弦相似度值接近1,则表示相似度更高