基于 PostgreSQL 的向量计算引擎

安装

直接 Docker pull `pgvector:

docker run -d \
  --name pgvector\
  -e POSTGRES_USER=postgres\
  -e POSTGRES_PASSWORD="YOUR_PASSWORD"\
  -e POSTGRES_DB=postgres\
  -p 5432:5432\
  pgvector/pgvector:0.8.0-pg17

然后便可使用 PostgreSQL 相关的方法连接与管理。

创建 Vector 字段

-- 创建表前加入此句,检查 vector 插件是否存在
CREATE EXTENSION IF NOT EXISTS vector;
 
CREATE TABLE embeddings (
    id SERIAL PRIMARY KEY,
    content_id TEXT NOT NULL,
    content_type TEXT NOT NULL,
    embedding vector(1536),  -- 指定向量维度,如OpenAI嵌入模型的1536维,也可以不指定,使用可变向量维度
    metadata JSONB,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
 
-- 创建 IVFFlat 索引用于 L2 距离搜索
CREATE INDEX ON embeddings USING ivfflat (embedding vector_l2_ops) WITH (lists = 100);

检索

-- 使用 L2 距离搜索最相似的向量
SELECT content_id, content_type, metadata, embedding <-> '[查询向量]' AS distance
FROM embeddings
ORDER BY distance
LIMIT 10;

不同距离的表示: