RAG 专题
问题:简述下RAG是什么
RAG 就是检索增强生成,为了解决大模型对未训练数据的知识缺失问题而生 一般叫做知识截止,模型在没有依据时也会尝试生成,就会产生幻觉
所以需要 RAG 把缺失的这些知识补给大模型
问题:主要流程是什么
粗分有 索引阶段、检索阶段、生成阶段
索引就是把知识整理起来供查询使用
检索就是 把索引的知识查出来
生成就是把检索知识放到 prompt 里让大模型生成答案
再细分:索引包括 数据清洗、文档切割、向量化、存入向量库
检索包括:用户问题处理,例如向量化、查询改写等;然后检索,检索可以向量检索、关键字(BM25)、混合检索、多路检索与结果融合(RRF)、知识图谱检索;也可以假设文档嵌入,让模型先构造可能的答案
最基本的是向量检索,一般也会加上BM25
然后是重排序(Rerank),这是一种优化,从 top-K 中提取最相似的文档
最后就是生成,把找到的文档给模型,让模型生成答案
问题:每个流程的标准优化
索引阶段: 数据清洗有优化空间、例如版面识别、OCR等,图文混合怎么保留结构等
文档分割阶段: 有多种切割策略:固定长度、递归字符、语义分块、滑动窗口、文档结构等,可以根据文档结构来选,如法律条文直接文档结构 对于 chunk_size 和 chunk_overlap 的选择,一般尽量让一个chunk包含一个完整的命题,overlap 10-20%
我们还用了父子chunk 的策略
向量化 就根据情况选 embedding 模型
如果是多语言文本,最好选多语言模型,因为单语言模型对不同语言相同语义映射不到一个空间
维度选择,纬度越高语义特征越丰富,但存储和检索的成本越高 视你的文本语义丰富度来选 384 ~ 1024 即可
然后就是向量库 这个我研究不多,一般用 Milvus,还有用 pg 的,主要看运维成本和数据量吧
检索阶段 多种检索一起上:向量、关键字 检索还可以改写query或构造答案,以获取更多可能的文档 还可以加入知识图谱,找有关系的实体
然后rerank RRF、corss-encoder
然后就是构造propmt,调大模型 最原始的就调一次,但如果优化这个过程,改为一个agent,让模型自己决策,优化空间很大,但速度慢的多,现在有自反思、纠正 等策略,agrntic RAG
问题:评估方式
一般有以下几个指标
检索的指标 召回率、精确率
生成的指标 忠实度 相关性 答案正确性
问题:幻觉怎么解决
两种幻觉 检索到了,但生成结果矛盾 没检索到,生成幻觉
最简单就是提示词约束,要求不要瞎编
然后就是强制要求引用
再调一次大模型来输出自校验
问题:知识库更新怎么做
新增的文档直接加到库里
修改就根据 doc_id 删除向量再插入
知识库效果不佳怎么排查
先检查每个节点,判断哪个节点出了问题 再针对问题优化