从零搭 RAG 太折腾?pgEdge RAG Server 把检索、融合、流式全打包了

2026-05-21 33 预计阅读时间:1 分钟
来源:postgr.es AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:11 分钟

如果你最近访问过 docs.pgedge.com,大概率已经碰到了 Ellie——一个只从文档里找答案、不瞎编的 AI 助手。问她"多主复制怎么配"或"MCP Server 监听哪个端口",她会把相关文档片段拉出来拼成上下文,再交给 LLM 生成带来源引用的回答。Ellie 不是魔法,它背后跑的就是 pgEdge 刚开放出来的 RAG Server:一个把混合检索、排序融合、token 预算、流式输出全部塞进单个 Go 二进制的生产级 RAG 管线。

手搓 RAG 管线时你会踩的坑

做过 RAG 的人都知道,坑不是单个出现的,是叠着来的:

  • 纯向量检索漏精确词。用户问"error code 4012"或"订单 ABC-1234",语义搜索返回的是"概念相近"的文档,而不是真正提到这个字符串的那一条。
  • 加了 BM25 还要融合。两套排序列表摆在你面前,怎么合并才能不让任何一方主导?你得实现 Reciprocal Rank Fusion 或类似算法。
  • token 预算不控就烧钱。一次查询把整个文档库塞给 LLM,API 费用直接爆炸。
  • 流式响应是刚需。用户盯着 spinner 等八秒,体验已经崩了。
  • 还有健康检查、连接池、错误处理、监控…… 每一项都能做,但加在一起,你还没写用户要的功能,工程量已经堆到天花板。

pgEdge RAG Server 把这些全部内置了。Ellie 是第一个部署实例,现在任何人都可以用同样的管线跑自己的数据。

管线怎么跑:从问题到带引用的回答

整个流程是串行的,但每一步都有明确职责:

  1. Embedding 提供者把用户问题转成向量。
  2. pgvector 向量相似度搜索在 Postgres 表里找语义最接近的文档块。
  3. BM25 关键词搜索同时跑,抓精确词匹配——向量搜索容易漏的那些。
  4. Reciprocal Rank Fusion (RRF) 合并两套结果:每篇文档按它在两个列表里的排名位置计分,两边都靠前的文档自然浮到顶部,不需要跨方法归一化分数。
  5. Token 预算裁剪:只保留 top 结果到你配置的上限,成本可控。
  6. 裁剪后的上下文 + 原问题一起发给 completion LLM。
  7. LLM 返回带来源引用和相关性分数的回答,你的应用可以直接展示出处。

整个管线跑在单个容器里,暴露 RESTful API,支持 Server-Sent Events (SSE) 流式输出。

自托管:一个 Go 二进制指向你的 Postgres

RAG Server 100% 开源(PostgreSQL License),GitHub 上直接拿。它是单个 Go 二进制,指向任何装了 pgvector 的 PostgreSQL 14+ 数据库,用 YAML 配置,填上你自己的 LLM API key 就能跑。支持 OpenAI、Anthropic、Voyage 做嵌入/补全,也支持本地 Ollama——不想把数据发到外部 API 的团队有出路。

下面是一个最小可用的自托管配置示例:

# rag-server.yaml — 自托管 RAG Server 最小配置
database:
  host: "localhost"
  port: 5432
  name: "my_docs_db"
  user: "rag_admin"
  password: "${DB_PASSWORD}"   # 建议用环境变量,不要硬写

embedding:
  provider: "voyage"           # 可选: openai, voyage, ollama
  model: "voyage-3"
  api_key: "${VOYAGE_API_KEY}"

completion:
  provider: "anthropic"        # 可选: openai, anthropic
  model: "claude-sonnet-4-20250514"
  api_key: "${ANTHROPIC_API_KEY}"

tables:
  - name: "support_docs"
    text_column: "content"     # 文档原文列
    vector_column: "embedding" # pgvector 向量列
  - name: "kb_articles"
    text_column: "body"
    vector_column: "vec"

hybrid_search:
  enabled: true                # 开启向量+BM25 混合检索
  vector_weight: 0.7           # 向量权重,0-1 之间,剩余给 BM25

token_budget: 4000             # 单次查询发给 LLM 的最大 token 数

streaming: true                # 开启 SSE 流式响应

启动命令:

# 拉取二进制(假设已编译好或从 GitHub Releases 下载)
./rag-server --config rag-server.yaml

# 服务默认监听 8080,可通过配置修改
# 确保目标 Postgres 已启用 pgvector 扩展:
# CREATE EXTENSION IF NOT EXISTS vector;

关键约束:如果你用 pgEdge Vectorizer 在入库时生成文档向量,RAG Server 配置的 embedding provider 和 model 必须和 Vectorizer 用的一致。入库时的向量空间和查询时的向量空间必须匹配,否则相似度搜索返回的是噪声。

云托管:十分钟从配置到可用 API

不想自己运维?pgEdge Cloud 里直接部署托管版。流程:

  1. 进入 Cloud 控制台,找到你的数据库,打开 Services 标签。
  2. 部署一个 RAG Server,选 embedding provider(OpenAI 或 Voyage)和 completion provider(Anthropic 或 OpenAI),可以混搭——比如 Voyage 做嵌入、Anthropic 做补全,很多团队就是这么用的。
  3. 指定表:每个表声明 text 列和 vector 列。一个管线可以搜同一数据库里的多张表——支持文档、知识库、产品手册全喂给一个检索端点。
  4. 调混合检索开关、向量权重、token 预算。
  5. 平台生成 bearer token,你拿到一个现成的 API 端点。

调用示例:

# 基本问答请求(返回单个 JSON)
curl -X POST "https://<your-rag-endpoint>/v1/query" \
  -H "Authorization: Bearer <your-bearer-token>" \
  -H "Content-Type: application/json" \
  -d '{"question": "如何配置跨区域多主复制?"}'

# 流式响应(SSE)——加 /stream 路径
curl -X POST "https://<your-rag-endpoint>/v1/query/stream" \
  -H "Authorization: Bearer <your-bearer-token>" \
  -H "Content-Type: application/json" \
  -d '{"question": "MCP Server 默认监听端口是多少?"}'
# 返回 Server-Sent Events,前端可以逐块渲染回答

平台处理 TLS 终止、入口层 token 校验、健康监控。如果你的文档已经嵌入好了,从配置到可用端点十分钟以内。

从原始文档到可问答 API:全链路在 Postgres 内完成

RAG Server 不是孤立的,它背后有一套工具链把"原始文档 → 可检索 → 可问答"的路径全部留在 Postgres 里:

工具 职责 开源
Docloader HTML/Markdown/rST 等原始文档 → Postgres,带格式转换和元数据提取 ✅ PostgreSQL License
Vectorizer 在 Postgres 内做分块 + 异步嵌入生成 ✅ PostgreSQL License
pg_semantic_cache 向量相似度键控缓存,意思相同的不同表述直接返回缓存结果 ✅ PostgreSQL License
RAG Server 检索、融合、token 管理、LLM 编排 ✅ PostgreSQL License

全部开源,自托管跑在任何 Postgres 14+ 集群上行为一致;pgEdge Cloud 只是替你跑运维层。

生产场景:不只是文档问答

三个典型用法,本质是同一个模式——让数据库里已有的知识通过自然语言可访问:

  • 客户支持团队:文档已分块嵌入在 Postgres 里,部署一个 bot 给客户带引用的回答,而不是关键词匹配的 FAQ 列表。用户能直接验证答案来源。
  • 金融合规团队:每个回答追溯到具体法规条款或政策章节。受监管行业里,审计追溯不是可选的。RAG Server 返回来源文档和相关性分数,你的应用决定怎么展示出处。
  • 产品文档站:替换基础关键词搜索。"怎么配复制"和"跨区域多主怎么搞"应该返回同一批文档——混合检索让语义理解 + 关键词匹配同时生效。

上手清单

在动手之前确认这几项:

  1. ✅ Postgres 14+ 已启用 pgvector 扩展。
  2. ✅ 文档已入库并有预计算的向量嵌入(用 Docloader + Vectorizer,或自己跑嵌入脚本)。
  3. ✅ Embedding provider/model 和入库时一致——向量空间不匹配,检索就是垃圾。
  4. ✅ LLM API key 已准备(OpenAI / Anthropic / Voyage / Ollama)。
  5. ✅ 表里有明确的 text 列和 vector 列,RAG Server 配置里要指向它们。

托管版对所有 pgEdge Cloud 客户免费开放(你自带 LLM API key,直接付提供商费用;部署、容器、入口、认证、监控全包含)。自托管版从 GitHub 拉二进制,零许可费。

先去 docs.pgedge.com 问 Ellie 一个问题,感受一下成品 RAG 从用户侧是什么体验。然后要么注册 pgEdge Cloud 在 Services 标签里部署,要么从 GitHub 拉二进制指向你自己的 Postgres——十分钟内你就能有一个不瞎编、带引用、可流式的问答 API。


相关推荐