LLM的出现引发了热潮,但是不可忽视的是LLM的“幻觉”问题,而RAG(检索增强生成,Retrieval Augmented Generation)刚好提供了应对之法:通过检索外部数据并将其整合到生成过程中,从而增强了模型回复的准确性和相关性。
1 初级RAG
1.1 RAG工作流
- 1 索引构建:语料库被划分为离散的块,然后使用编码器模型构建向量索引
- 2 查询:RAG根据查询与索引块(Indexed Chunk)的向量相似度识别并对块进行检索。
- 3 生成:模型根据检索块(Retrieved Chunk)中获取的上下文信息生成回复。
1.2 RAG(检索,增强,生成)的三大困境
- 1 检索:精确率低和召回率低的问题。
- 精确率低:检索得到的索引块和上下文不相关;
- 召回率低:检索的索引块不全,向量库中还有大量索引块未被检索得到;
- 2 增强:检索得到的多个索引块之间如何进行合并重复内容,将上下文和当前用户询问进行整合。
- 3 生成:如何保证生成内容的质量。
2 高级RAG
高级RAG在检索,增强,生成三个方面都针对做了改进。
2.1 检索改进
2.1.1 增强语义表示
- 块优化;
- 微调嵌入模型;
2.1.2 对齐查询和文档的语义空间
- 查询和prompt重写;
2.1.3 微调检索器
- 微调检索器使其输出与LLM偏好对齐;
2.2 增强改进
- 1 增强阶段
- 2 增强源
- 3 增强过程
2.3 生成改进
- 1 信息压缩
- 2 rerank
- 3 微调LLM