看到不少朋友在抱怨:“明明给 AI 喂了文档(RAG),怎么它表现得还是像猪一样笨?”
别急着怪大模型,这很可能不是模型的问题,而是你的 RAG 流程(Pipeline) 出了岔子。作为一名深耕数据库与 AI 结合的技术人,我把这篇关于 RAG 评测与优化的核心精要为你总结如下:
核心观点:为什么你的 RAG 效果差?
RAG(检索增强生成)本质上是开卷考试。如果 AI 答得烂,通常只有三个原因:
- 书找错了:检索回来的内容牛头不对马嘴(召回率/精度低)。
- 书找全了,但干扰项太多:塞给 AI 的无效信息太多,它被绕晕了。
- 书没问题,但学生太笨:给它正确答案,它也理解不了(模型能力上限)。
一、 拒绝“感觉”,用数据说话(Ragas 评测法)
优化 RAG 的第一步不是改代码,而是量化。我推荐使用 Ragas 框架,从两个维度死磕数字化指标:
1. 生成质量(Answer Correctness)
- 语义相似度:回答和标准答案意思像不像?
- 事实准确度:把回答和标准答案拆成一个个“观点”,像做
Full Outer Join 一样去对比,算 F1 Score。
2. 检索质量(Context)
- 召回率 (Context Recall) :标准答案里的知识点,你搜出来的文档片段里覆盖了多少?
- 召回精度 (Context Precision) :搜出来的片段相关吗?最重要的那个片段是不是排在最前面?
二、 解决之道:全链路优化全景图
如果你的 AI 表现不佳,请对号入座进行优化:
1. 基础建设:解析与切分
- 精准解析:PDF 的双栏排版、图片、公式,如果解析乱了,后面全白搭。
- 科学切分:别只用固定长度切分。尝试父子模式(小块检索,大块喂给模型)或语义切分,确保上下文不丢失。
2. 数据库端的“降维打击”
身为数据库专家,我建议在 PostgreSQL/PolarDB 中利用插件实现多路召回。直接在熟悉的 数据库 环境中集成 RAG 能力,可以大幅简化技术栈:
- 向量检索:用最新的 Embedding 模型(如 BGE 系列)。
- 全文/模糊检索:利用
pg_jieba 或 pg_bigm 补齐关键词匹配的短板。
- KV 标签:让 AI 提前给分片打标(人物、地点等),检索时强制过滤。
3. 杀手锏:Rerank(重排序)与 BM25
- BM25 算法:这是老牌但极其有效的相关性打分算法,能兼顾词频和稀有度。
- Rerank 模型:先粗排搜出 top 100,再用专门的 Rerank 模型精排选出 top 5。
- 滑动窗口:召回片段后,自动带出它前后的邻居片段,补齐上下文语义。
三、 总结:RAG 是一项系统工程
RAG 不是简单的“把文档向量化存进数据库”就完事了。它涉及文档清洗、结构化标注、多路召回、重排序、以及上下文扩充等一系列精细操作。
我的经验总结:如果召回精度低,就上 Rerank 和 BM25;如果召回覆盖率低,就调整切分粒度和 TopN;如果都做好了还不行,那可能真的要考虑换个参数量更大的模型(如 DeepSeek、Qwen 等)。
希望这篇从评测到优化的全链路指南能帮你避开 RAG 实践中的那些“坑”。想了解更多前沿的数据库与 AI 结合实践,欢迎持续关注 云栈社区 的相关讨论。
|