Sign inSign up

coryrowe/pg-rag-stack

By coryrowe

•Updated 2 months ago

具有 zhparser 的 pgvector 镜像版本

Image
Databases & storage
0

2.8K

coryrowe/pg-rag-stack repository overview

po-rag-stack 是一个具有向量检索、全文搜索、中文分词、Token 统计、消息队列于一体的 PostgreSQL 镜像版本,兼顾关系型数据库与向量检索场景,开箱即用。

⁠功能特性

  • pgvector: 向量存储和相似度搜索
  • pgvectorscale: 基于 DiskANN 的高性能向量索引,提升 pgvector 搜索性能
  • pg_search: BM25 全文检索引擎(Elasticsearch 同级),支持模糊搜索、混合检索
  • pg_tiktoken: 在数据库内统计 token 数量,方便管理 LLM 上下文窗口
  • pgmq: 消息队列,支持异步 RAG 任务处理
  • zhparser: 中文全文检索解析器,支持中文分词和搜索
  • PostgreSQL 17/18**: 基于最新的 PostgreSQL 版本

⁠使用场景

  • RAG (Retrieval Augmented Generation): 结合向量搜索和中文分词,提升检索效果
  • AI 应用: 为 AI 应用提供高效的向量存储和中文搜索能力
  • 内容管理: 中文内容的全文检索和相似度匹配
  • 推荐系统: 基于向量相似度的内容推荐

⁠构建与发布

本项目通过 GitHub Actions 自动构建和发布镜像。

  • 定时检测:每天凌晨 3 点(UTC)检测上游更新,有新版本时自动构建
  • 多架构:同时构建 linux/amd64 和 linux/arm64
  • 预装扩展:pgvector、pgvectorscale、pg_search、pg_tiktoken、pgmq、zhparser
  • 标签规范:以 PostgreSQL 主次版本号作为镜像标签(如 17.2)
⁠发布地址
  • GitHub Container Registry:ghcr.io/cnrot/pg-rag-stack
  • Docker Hub:coryrowe/pg-rag-stack

⁠快速开始

⁠使用 Docker Compose (推荐)
# 克隆项目
git clone https://github.com/cnrot/postgres-rag-stack.git
cd postgres-rag-stack

# 启动服务
docker-compose up -d

# 等待服务启动完成
docker-compose logs -f postgres
⁠直接使用 Docker
# 构建镜像
docker build -t postgres-rag-stack .

# 运行容器
docker run -d \
  --name postgres-rag-stack \
  -e POSTGRES_DB=postgres \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=postgres \
  -p 5432:5432 \
  -v postgres_data:/var/lib/postgresql/data \
  postgres-rag-stack

⁠部署场景

⁠场景1:替换现有 PostgreSQL 服务

安全地将现有 PostgreSQL 服务无缝替换为此镜像,查看发布镜像:https://ghcr.io/cnrot/pg-rag-stack⁠

# 在你的 docker-compose.yml 中
services:
  postgres:
    image: coryrowe/pg-rag-stack:17.10-amd64  # 替换为本镜像
    environment:
      POSTGRES_DB: your_database  # 仅在首次初始化时生效
      POSTGRES_USER: your_user    # 仅在首次初始化时生效
      POSTGRES_PASSWORD: your_password  # 仅在首次初始化时生效
    volumes:
      - your_existing_data_volume:/var/lib/postgresql/data  # 保持现有数据

重要:环境变量仅在首次初始化时生效,使用现有数据卷时会被忽略。

⁠场景2:新部署 RAG 项目

直接在 RAG 项目中使用:

services:
  rag-postgres:
    image: coryrowe/pg-rag-stack:17.10-amd64
    environment:
      POSTGRES_DB: rag_database
      POSTGRES_USER: rag_user
      POSTGRES_PASSWORD: rag_password
    volumes:
      - rag_postgres_data:/var/lib/postgresql/data
    ports:
      - "5433:5432"  # 避免端口冲突

  rag-app:
    build: .
    depends_on:
      - rag-postgres
    environment:
      DATABASE_URL: postgresql://rag_user:rag_password@rag-postgres:5432/rag_database

⁠启用扩展

⁠1. 检查容器启动时设置的用户名

查看您的 docker run 命令或 docker-compose.yml 文件中的环境变量:

docker inspect postgresql | grep POSTGRES_USER
⁠2. 使用查询到的用户连接数据库

很多镜像默认使用 root 作为 superuser:

# 使用 psql 连接
docker exec -it -u root postgresql psql -U root -d postgres
⁠查看当前启用扩展
SELECT extname FROM pg_extension;
⁠启用扩展

虽然扩展已经预安装,但如果需要在特定数据库中手动创建:

-- 启用 pgvector 扩展
CREATE EXTENSION IF NOT EXISTS vector;

-- 启用 pgvectorscale 扩展
CREATE EXTENSION IF NOT EXISTS vectorscale;

-- 启用 pg_search 扩展
CREATE EXTENSION IF NOT EXISTS pg_search;

-- 启用 pg_tiktoken 扩展
CREATE EXTENSION IF NOT EXISTS pg_tiktoken;

-- 启用 pgmq 扩展
CREATE EXTENSION IF NOT EXISTS pgmq;

-- 启用 zhparser 扩展
CREATE EXTENSION IF NOT EXISTS zhparser;
⁠验证扩展状态
-- 查看所有已安装的扩展
\dx

-- 查看特定扩展
SELECT extname FROM pg_extension WHERE extname IN ('vector', 'vectorscale', 'pg_search', 'pg_tiktoken', 'pgmq', 'zhparser');

⁠验证功能

⁠验证 pgvector
-- 检查扩展是否可用
SELECT extname FROM pg_extension WHERE extname = 'vector';

-- 测试向量功能
SELECT '[1,2,3]'::vector <-> '[4,5,6]' AS distance;
⁠验证 pgvectorscale
-- 检查扩展是否可用
SELECT extname FROM pg_extension WHERE extname = 'vectorscale';
-- 检查扩展是否可用
SELECT extname FROM pg_extension WHERE extname = 'pg_search';
⁠验证 pg_tiktoken
-- 检查扩展是否可用
SELECT extname FROM pg_extension WHERE extname = 'pg_tiktoken';

-- 测试 token 计数
SELECT tiktoken_count('cl100k_base', 'Hello, world');
⁠验证 pgmq
-- 检查扩展是否可用
SELECT extname FROM pg_extension WHERE extname = 'pgmq';

-- 测试消息队列功能
SELECT pgmq.create('test_queue');
SELECT pgmq.send('test_queue', '{"message": "hello"}');
SELECT pgmq.drop_queue('test_queue');
⁠验证 zhparser
-- 检查扩展是否可用
SELECT extname FROM pg_extension WHERE extname = 'zhparser';

-- 测试中文分词
SELECT to_tsvector('chinese', '中文搜索测试') @@ to_tsquery('chinese', '中文');

⁠环境变量

变量名默认值说明
POSTGRES_DBpostgres数据库名称(仅在首次初始化时生效)
POSTGRES_USERpostgres数据库用户名(仅在首次初始化时生效)
POSTGRES_PASSWORDpostgres数据库密码(仅在首次初始化时生效)

⁠端口映射

  • 5432: PostgreSQL 默认端口

⁠数据持久化

数据将持久化存储在 Docker volume 中,确保数据不会因容器重启而丢失。

⁠参考来源

以下是各扩展的相关资料,可点开查看详情:

Tag summary

Content type

Image

Digest

sha256:dee013db2…

Size

236.4 MB

Last updated

2 months ago

docker pull coryrowe/pg-rag-stack:18.6-amd64