【代码评审】生产级 RAG 助手:混合检索、RRF、父子分块与 Promptfoo 评估(Python/FastAPI/Postgres)
摘要
一位开发者分享了一个基于 Python/FastAPI 构建的生产级 RAG 助手,该助手采用混合检索(pgvector + Postgres 全文搜索,通过 RRF 融合)、父子分块、交叉编码器重排序以及基于 Promptfoo 的评估体系,正在寻求代码评审和架构方面的反馈。
大家好,我最近用 Python/FastAPI 构建了一个端到端的企业级 RAG 助手,旨在针对复杂的多页财务报表(10-K)和法律合同回答有据可查的问题。我已经搭建了一套完整的混合检索和评估流程,但非常希望能有人以全新的视角来审视架构和代码库,看看有哪些可以改进的地方。GitHub 仓库:[链接见评论]
**核心架构亮点:**
- **数据摄取与解析:** 使用 pdfplumber 进行表格感知解析(可重建碎片化的多栏 PDF 表格)。
- **检索管线:** 父子分块(子块约 200 token,父块约 700 token)+ 混合搜索(稠密向量 pgvector + 稀疏 Postgres 全文搜索),通过倒数排名融合(RRF)进行融合,并使用交叉编码器(bge-reranker-base)进行重排序。
- **保证排名槽位:** 实现了自定义的保证槽位(RERANK_GUARANTEED_PER_LIST),防止交叉编码器对签名行、表格行等短文本片段评分过低。
- **评估:** 自动化的免 LLM 检索评估脚本(Recall@K、MRR)+ Promptfoo 端到端测试套件(20 条断言,检查上下文忠实度和数值精确度)。
- **安全护栏:** 多租户隔离(X-Tenant-ID)、PII 脱敏,以及引用/数值输出防护。
**我特别希望获得的反馈:**
- **交叉编码器延迟与优化:** 在更高并发负载下,你会如何优化或扩展交叉编码器这一步骤?
- **表格提取边界情况:** 你是否使用过更优雅的模式或库来重构被拆分的表格,而不浪费 token 预算?
- **Python / FastAPI 代码组织:** 对 backend/app/ 目录下的代码结构、异步执行或配置模式的任何反馈都会非常有帮助。
提前感谢大家的关注!也非常欢迎直接在 GitHub 上对 PR 或 Issue 提出反馈。
相似文章
@LearnWithBrij:别再像2022年那样构建RAG了。分块→嵌入→检索→生成 这条流水线能用……直到你尝试上线……
一个帖子解释了构建生产级RAG超越简单分块-嵌入-检索-生成所需的四个关键层次:智能查询路由、高级索引、多类型检索和持续评估。
从三个生产网站测试的分块与嵌入数据。[P]
在三个生产网站上测试了用于RAG检索的分块与嵌入,发现收益率分数(高/中块的比例)可以预测语料库质量和重排序效果。
为语义代码搜索构建 RAG 流水线
JetBrains 开发者分享了构建生产级语义代码搜索(Air Context)RAG 流水线的实战笔记,涵盖解析、分块和向量化,这是该系列文章的第一部分,旨在为 LLM 编程智能体提供来自大型代码库的精确、可引用的证据。
记录了不断破坏我的RAG系统的故障模式:分块、过期索引、混合搜索等
一位开发者分享了调试RAG系统时遇到的故障模式,包括分块、过期索引和混合搜索的问题,以及滑动窗口分块和上下文检索等实用修复方法。
能坦承"我不知道"的生产级 RAG 流水线
介绍如何用 Postgres + pgvector、FastAPI、Gemini、Celery 和 Redis 构建生产级 RAG 流水线:答案引用来源、在不知道时拒绝回答,并在数据库层面强制执行行级安全。