Appearance
一般把RAG拆成 数据处理、检索召回、重排、生成、评测闭环 五层
第一层 数据处理
先做文档清洗、去重、结构化切分,然后给每个chunk打元数据,比如
- 文档来源
- 时间
- 业务类型
- 权限标签
- 标题层级
- chunk顺序
切分不会按照固定长度切,更倾向于语义块+长度上限结合,因为纯定长切片容易把一个完整的语义拆断,后面召回效果会差
语义块+长度上限结合, 可以怎么切
先利用语义切分, 利用文档天然结构,把内容拆分成语义完整单元,比如常见边界
- 标题、段落、表格、代码块、html dom block
如果某个语义块太长,再在块内部按句子或者段落继续拆,保证每块的长度合适,相邻块之间保留少量overlap
第二层 检索召回
召回一般做混合检索
- 向量召回语义相近内容
- BM25召回关键词强匹配内容
第三层 重排
召回出来的候选通常比较粗,所以加rerank
原因是向量检索更适合“快速粗筛”,但它对细粒度相关性判断不够稳定。重排模型可以把 query 和候选文档一起看,判断谁更适合排在前面。
第四层 生成
把 top-k 的结果喂给模型时,不会无脑全塞,而是做:
- 去重
- 按来源可信度排序
- 控制总 token
- 冲突信息标记
- 必要时加引用来源
这样能降低幻觉,也能减少无关上下文干扰。
第五层 评测闭环
检索层指标
- Recall@k
- Precision@k
- MRR
- nDCG
生成层指标
- 是否答对
- 是否引用到了正确证据
- 是否有幻觉
- 是否回答完整
- 响应时延
- 用户满意度
优化思路
优化 RAG,一般从 4 个方向看:
1)数据侧
- 清洗脏数据、重复数据
- 优化 chunk 粒度
- 补标题、标签、时间等元信息
- 给高质量文档更高优先级
2)召回侧
- 混合检索替代单一路径
- query 改写
- 多路召回后融合
- 按业务字段做过滤
3)重排侧
- 调整 rerank top-k
- 对不同业务场景用不同重排阈值
- 对时间敏感问题,把时间信息纳入重排特征
4)生成侧
- 限制只能基于检索结果回答
- 没有证据时允许拒答
- 输出附带引用
- 对冲突内容提示不确定性