982 words
5 minutes
每日 Skill 推荐:pgvector — 让 PostgreSQL 成为向量数据库

前言#

在 AI 应用时代,向量数据库几乎是构建 RAG(检索增强生成)系统的标配。Pinecone、Weaviate、Chroma 这些专用向量数据库固然强大,但对于已经在使用 PostgreSQL 的团队来说,有没有更轻量的方案?

答案是:pgvector

pgvector 是 PostgreSQL 的一个扩展,让你可以直接在 Postgres 中存储向量、执行相似性搜索,完全无需引入新的数据库基础设施。

今天我要介绍的,是 Hermes Agent 生态中的 pgvector Skill——它把 pgvector 的所有核心能力封装成了可直接使用的步骤和命令,让我一起来看看它的功能和使用方法。


功能介绍#

1. 向量存储#

使用 vector(1536) 数据类型存储文本嵌入(1536 维是 OpenAI text-embedding-3-small 的维度),每条记录还可以附带 JSONB 格式的元数据:

CREATE TABLE IF NOT EXISTS documents (
id BIGSERIAL PRIMARY KEY,
content TEXT NOT NULL,
embedding vector(1536) NOT NULL,
metadata JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);

2. 高性能索引#

支持两种索引策略:

  • HNSW(默认推荐):搜索精度高,适合对质量要求高的场景
  • IVFFlat:构建速度快,适合超大规模数据集
-- HNSW 索引
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);

3. 向量相似搜索#

支持三种距离计算方式:

操作符说明
<->欧几里得距离(Euclidean)
<=>余弦距离(Cosine)
<#>内积(Inner Product)
-- 余弦相似度搜索
SELECT id, content, (1 - (embedding <=> '[query_embedding]')) AS similarity
FROM documents
ORDER BY embedding <=> '[query_embedding]'
LIMIT 5;

4. 混合搜索(向量 + 关键词)#

pgvector 的另一个强大之处在于可以结合 PostgreSQL 原生的全文搜索(ts_rank),实现混合检索:

SELECT id, content,
(1 - (embedding <=> '[query_embedding]')) AS vector_score,
ts_rank(to_tsvector('english', content), plainto_tsquery('english', 'search terms')) AS text_score
FROM documents
WHERE content ILIKE '%search terms%'
ORDER BY (vector_score * 0.7 + text_score * 0.3) DESC
LIMIT 10;

5. RAG 管道支持#

Skill 内置了完整的 RAG 检索流程示例,包括文档分块(chunking)和上下文组装:

-- 检索相关片段作为 LLM 上下文
SELECT chunk_text
FROM document_chunks
WHERE document_id = ?
ORDER BY chunk_embedding <=> '[question_embedding]'
LIMIT 5;

使用方法#

环境配置#

Terminal window
# 默认连接参数(已预配置)
psql -h localhost -p 5433 -U damien -d postgres
# 或设置环境变量
export PGHOST=localhost
export PGPORT=5433
export PGUSER=damien
export PGDATABASE=postgres

基本工作流#

  1. 连接数据库 — 使用上面的连接命令
  2. 建表 — 创建 documents 表(含 vector 列)
  3. 创建索引 — HNSW 或 IVFFlat 加速搜索
  4. 插入向量 — 来自 OpenAI、Cohere 或本地模型
  5. 执行检索 — 相似度查询或混合搜索
  6. 集成 RAG — 将结果注入 LLM 上下文

Skill 中还提供了 Python 批量插入示例,直接复制即可使用。


我的评价#

优点#

  • 零基础设施:不需要额外部署 Pinecone 或 Qdrant,直接用已有的 Postgres
  • 功能完整:HNSW/IVFFlat 索引、余弦/欧氏/内积三种距离、混合搜索,全部具备
  • RAG 友好:内置分块检索示例,拿来就能接 LLM
  • 运维简单:一个数据库同时管关系数据和向量数据,备份、权限、监控全部统一

缺点#

  • 相比专用向量数据库(如 Pinecone),在超大规模(亿级向量)场景下性能有差距
  • 需要手动管理嵌入向量,不支持自动向量化

适用场景#

个人项目 / 中小规模应用(百万级向量以内)
已有 PostgreSQL 基础设施的团队
需要关系数据 + 向量混合查询的场景
超大规模向量检索(建议用 Pinecone / Weaviate)


总结#

pgvector 是我目前见过最优雅的”渐进式 AI 能力扩展”方案——不需要学新工具,不需要改变架构,直接在熟悉的 PostgreSQL 上开启向量能力。

如果你正在构建 RAG 应用、又不想引入额外的数据库依赖,强烈推荐安装这个 Skill,连接你的 Postgres,立刻开始向量搜索。


📦 Skill 安装方式:在 Hermes 中运行 /skill pgvector 即可加载。

每日 Skill 推荐:pgvector — 让 PostgreSQL 成为向量数据库
https://maomaoz.org/posts/daily-skill-2026-06-03/
Author
讨厌猫猫雨
Published at
2026-06-03
License
CC BY-NC-SA 4.0