大数跨境

颠覆 PG RAG 架构:关键词、语义共用一个倒排索引-Postgres Evoke:语义,像关键词一样建立索引

颠覆 PG RAG 架构:关键词、语义共用一个倒排索引-Postgres Evoke:语义,像关键词一样建立索引 苏哲管理咨询
2026-11-01
18
导读:还在用 Postgres 做 RAG 语义检索的团队,大多要搭一套复杂外部系统:单独 Embedding 模型、向量索引,还要同步维护关键词 + 向量两套检索,最后合并打分结果,运维成本很高。

编者摘要:还在用 Postgres 做 RAG 语义检索的团队,大多要搭一套复杂外部系统:单独 Embedding 模型、向量索引,还要同步维护关键词 + 向量两套检索,最后合并打分结果,运维成本很高。

Evoke(II-42)这款 Postgres 开源扩展,直接把关键词检索和语义检索合并到同一个索引里。它内置 30M 轻量模型,在数据库内部 CPU 运行,文本不用传出数据库,也不需要 GPU。

原理是学习型稀疏检索:模型把文档生成额外的概念词,和原文关键词放进倒排索引的不同命名空间,查询时两类证据合并算出单一分数,省去双索引结果融合。写入时关键词实时入库,语义编码后台异步处理,不阻塞业务。

实测在英文数据集上,它召回效果接近参数量大 20 倍的稠密向量模型。适合内网隔离场景,用来做知识库、法规、病历、企业文档检索,给 AI 智能体 /rag 提供高质量检索源。开源协议 Apache2.0,支持 PG17/18。

10 个关键问题 Q&A

  1. Evoke 是什么?
    PostgreSQL 开源扩展(II-42),在数据库内同时实现关键词 + 语义检索,不用单独向量库。
  2. 它和 pgvector 最大区别?
    pgvector 存稠密向量,通常需要关键词 + 向量两套索引,结果要融合;Evoke 用稀疏词项,单倒排索引,统一打分。
  3. 什么是稀疏语义检索 SSR?
    模型输出一批带权重的概念词(不一定原文存在),和 BM25 关键词放在同一个倒排索引,合并计算相关性分数。
  4. 需要 GPU 吗?
    不需要,纯 CPU 运行,模型打包在数据库扩展内。
  5. 数据会离开数据库吗?
    不会,编码推理在数据库内部完成,支持物理隔离离线部署。
  6. 写入文档后多久能语义检索到?
    关键词立刻生效;语义编码走后台队列,存在短暂最终一致性延迟。
  7. 性能水平怎么样?
    30M 小模型,召回效果接近 0.6B 稠密 Embedding 模型,显著优于传统 BM25 关键词检索。
  8. 支持中文吗?
    当前版本面向英文文本,暂不主打中文场景。
  9. 哪些场景最适合 Evoke?
    企业知识库、临床指南、法规判例,给 RAG、AI 智能体做检索,重视召回率;内网隔离环境优势明显。
  10. 使用门槛?
    PostgreSQL17/18,Linux x86-64;一条 SQL 创建索引,用 ii42_query 函数检索,Apache2.0 开源免费。
附录 Postgres Evoke:语义,像关键词一样建立索引

Evoke(项目代号 II-42)是PostgreSQL 开源扩展,核心创新:关键词检索 + 语义检索共用同一个倒排索引,不需要单独向量库、不需要外部 Embedding 流水线,30M 小模型直接在数据库内 CPU 运行,协议 Apache-2.0。

一、核心概念:Learned-Sparse Retrieval(学习型稀疏检索)

传统 RAG / 语义检索方案:

  1. 文本 → 外部 Embedding 模型 → 稠密向量(dense vector)
  2. 存入独立向量索引
  3. BM25 关键词索引与向量索引是两套系统,两套打分,最后要做结果融合(Rerank/Fusion),容易出现分数尺度不一致、同步维护成本高。

Evoke 的思路: 用 IBM Granite-Embedding-30M-Sparse(30.3M 参数)稀疏编码器,把文档 / 查询转换成带权重的词项集合,而不是稠密向量。

  • 词项分为两个命名空间:
    • 关键词词项:原生文本分词(BM25)
    • 语义词项:模型生成的相关术语(原文里没有出现的同义词、专业同义概念)

示例:查询heart attack warning signs关键词词项:heart、attack、warning、signs 语义词项:myocardial infarction、symptoms、chest pain、cardiac

两类词项写入同一个倒排索引,查询时两类证据叠加,输出单一统一分数,不再需要多索引结果合并。

技术名:SSR,Sparse Semantic Retrieval,通过 sae=true开启。

二、读写链路

查询链路(对比传统方案)

✅ 传统 Postgres 混合检索:文本输入 → 外部 Embedding API → 关键词检索 + 向量检索(双索引)→ 两套分数融合 → 返回结果,5 步。 ✅ Evoke:文本输入 → 数据库内模型编码 → 单索引查找 → 统一打分,3 步,无融合步骤。 模型跑在数据库共享后台 worker,数据不出库,不需要 GPU,纯 CPU。

写入链路(写入低延迟)

  1. INSERT / UPDATE
    提交事务:关键词索引立即写入提交,不阻塞业务写入;
  2. 文档丢入队列,由数据库共享后台 worker 异步做语义编码;
  3. 语义词项延迟写入索引;

特点:写请求不会等待模型推理,保证 OLTP 写入性能;语义索引最终一致性。

查询时会校验行可见性,删除的数据不会从旧索引 “复活”,兼容 PG 原生 MVCC、崩溃恢复、物理复制。

三、评测数据(P2.1 模型,发布版为 P2.2)

评测集:BEIR15、MTEB10

  • BM25(纯关键词)BEIR15 Recall@100:0.563
  • Evoke(P2.1,30.3M) BEIR15 Recall@100:0.667
  • 0.6B 稠密 Embedding 模型 (pplx-embed-v1-0.6B) BEIR15 Recall@100:0.671

结论:30M 稀疏模型,效果接近 20 倍参数量的稠密向量模型,差距仅 0.004;MTEB10 上同样大幅超越纯 BM25。 Recall@100:前 100 条结果中召回相关文档比例;CUB@1000:在 1000 候选池内召回相关文档比例。 价值:检索第一阶段召回上限提升,后续 Reranker/Agent 才有更多相关文档可用。

四、适用场景 & 约束

✅ 适合场景

  1. Postgres 存量英文文档,想升级语义检索,但不想搭建向量数据库、维护 Embedding 同步流水线;
  2. 内网 / 物理隔离(air-gapped)环境,数据不能出数据库服务器;
  3. Agent、RAG 检索:内部文档、政策手册、临床指南、判例、法规文档;
  4. 人工审阅场景:需要尽可能召回全部相关文档(重视召回率),后续交给重排器或人工筛选。

⚠️ 限制

  1. 当前面向英文文本;
  2. 语义编码是异步写入,新插入文档语义检索会短暂延迟;
  3. 依赖 PG17/PG18,Linux x86-64;
  4. 稀疏检索不是稠密向量,不适合需要跨模态、长距离精细语义相似度的场景。

五、快速上手示例

Docker 镜像:

docker pull ghcr.io/intelligent-internet/ii-42:pg18-v0.2.5

创建索引(开启 SSR 稀疏语义检索)

CREATE INDEX docs_semantic_idx ON docs USING ii42 (body) WITH (sae = true);

SELECT d.id, d.title,
       ii42_query('docs_semantic_idx'::regclass, 'database search architecture') AS score
FROM docs AS d
ORDER BY score DESC LIMIT 10;
  • ii42
    扩展名称;
  • sae=true
    开启稀疏语义检索;关闭就是原生 BM25 关键词检索。

六、架构亮点

  1. 单索引统一打分
    :BM25 关键词 + 稀疏语义词项共用倒排索引,消除双索引融合痛点;
  2. 数据库内模型推理
    :ONNX Runtime 打包,共享 worker 池,CPU 运行,数据不出库,离线可用;
  3. 写不阻塞
    :关键词实时落索引,语义编码后台异步完成;
  4. 轻量化
    :30M 小模型,召回能力逼近 0.6B 稠密 Embedding;
  5. 完全复用 Postgres 原生 MVCC、备份、复制,不需要额外向量存储运维。

七、和主流向量 PG 扩展对比简要对比

方案
索引类型
模型位置
是否需要融合
硬件
pgvector
稠密向量索引
外部 / 独立推理
关键词 + 向量需要融合
CPU/GPU
Evoke(ii42)
倒排稀疏索引
数据库内共享 worker
不需要融合
仅 CPU



【声明】内容源于网络
0
0
苏哲管理咨询
为企业及组织提供AI+战略、数智化转型咨询及观点、建议等
内容 2437
粉丝 0
苏哲管理咨询 为企业及组织提供AI+战略、数智化转型咨询及观点、建议等
总阅读77.9k
粉丝0
内容2.4k