大模型 RAG 知识总结

RAG(Retrieval-Augmented Generation)面

一、LLMs 已经具备了较强能力了,存在哪些不足点?

在 LLM 已经具备了较强能力的基础上,仍然存在以下问题:

  • 幻觉问题:LLM 文本生成的底层原理是基于概率的 token by token 的形式,因此会不可避免地产生“一本正经的胡说八道”的情况;
  • 时效性问题:LLM 的规模越大,大模型训练的成本越高,周期也就越长。具有时效性的数据无法参与训练,因此无法直接回答时效性问题,例如“帮我推荐几部热映的电影?”;
  • 数据安全问题:通用 LLM 缺乏企业内部数据和用户数据。企业若想保证数据安全,需将数据全部本地化处理,而在线大模型仅完成归纳功能。

二、什么是 RAG?

RAG(Retrieval Augmented Generation,检索增强生成)即 LLM 在回答问题或生成文本时,先从大量文档中检索相关信息,再基于这些信息生成回答或文本,从而提高预测质量。


2.1 R:检索器模块

在 RAG 技术中,“R”代表检索,其作用是从知识库中检索最相关的前 k 个文档。构建高质量检索器的关键问题如下:

2.1.1 如何获得准确的语义表示?

语义空间是查询和文档被映射的多维空间。构建方法包括:

  1. 块优化

    • 处理外部文档的第一步是分块,以获得更细致的特征。分块策略需考虑内容特点、嵌入模型、用户查询复杂度等。
    • 实际应用中需灵活选择分块策略,没有“最佳策略”,只有“最适合的策略”。
  2. 微调嵌入模型

    • 分块后,使用嵌入模型(如 UAE、Voyage、BGE)将 Chunk 和查询嵌入到语义空间。

2.1.2 如何协调查询和文档的语义空间?

协调方法包括:

  1. 查询重写

    • 利用大模型生成伪文档,结合原始查询形成新查询;
    • 多查询检索:生成多个搜索查询,并行处理结果。
  2. 嵌入变换

    • 在查询编码器后加入适配器并微调(如 Llamalndex);
    • 结构化信息处理(如 SANTA 方法):通过对比学习和实体掩码策略优化检索。

2.1.3 如何对齐检索模型的输出和大语言模型的偏好?

  • 监督训练:如 REPLUG,通过 KL 散度计算监督训练,利用大模型作为监督信号;
  • 适配器附加:在检索模型上附加适配器,避免直接微调嵌入模型;
  • 知识注入:如 PKG,通过指令微调将知识注入白盒模型。

2.2 G:生成器模块

2.2.1 生成器介绍

  • 作用:将检索到的信息转化为自然流畅的文本。输入包括上下文和检索到的文本片段,确保生成内容与检索信息一致。

2.2.2 如何通过后检索处理提升检索结果?

  • 后检索处理策略
    • 信息压缩:减少冗余;
    • 重新排序:根据相关度调整结果顺序。

2.2.3 如何优化生成器应对输入数据?

  • 输入处理:对检索到的文档进行清洗、格式化和结构化;
  • 微调方式:与普通大模型微调类似,包括对比学习等。

三、使用 RAG 的好处?

  • 可扩展性:减少模型大小和训练成本,支持知识扩展;
  • 准确性:引用信息源增强可信度;
  • 可控性:允许更新或定制知识;
  • 可解释性:检索结果作为预测来源参考;
  • 及时性:识别最新信息;
  • 安全性:通过数据库角色控制数据访问。

四、RAG V.S. SFT

维度 RAG SFT
外部知识 依赖外部资源,适合结构化/非结构化数据 依赖静态数据,知识记忆能力有限
模型定制 关注信息检索与整合 支持语义对齐,但对复杂数据不实用
减少幻觉 基于检索结果生成 可通过规则降低幻觉
技术复杂度 需高效检索策略和大数据技术 需定义目标并分配计算资源

五、RAG 典型实现方法

5.1 如何构建数据索引?
  1. 数据提取

    • 多格式数据加载(PDF、Word、数据库等);
    • 使用开源工具解析复杂文档(如 PP-StructureV2 处理 PDF 版面)。
  2. 文本分割(Chunking)

    • 分块策略:固定大小分块(如 256 tokens)或基于意图分块(句分割、递归分割);
    • 工具:langchain.text_splitter 库。
  3. 向量化及创建索引

    • 嵌入模型:BGE、ERNIE-Embedding 等;
    • 数据库:FAISS、ChromaDB、Milvus 等。
5.2 如何对数据进行检索?
  • 元数据过滤:提升检索效率;
  • 图关系检索:利用知识图谱处理多跳问题;
  • 检索技术:向量相似度、关键词检索、全文检索;
  • 重排序:调整结果顺序以匹配业务需求。
5.3 如何生成正确回复?
  • Prompt Engineering:组合查询与检索文本输入模型;
  • 框架示例(Langchain):
    llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
    rag_chain = {"context": retriever, "question": RunnablePassthrough()} | rag_prompt | llm
    rag_chain.invoke("What is Task Decomposition?")
    
    

六、RAG 典型案例

6.1 ChatPDF 及其复刻版
流程:

文本提取与清洗;

分块并向量化;

相似度检索(余弦相似度);

调用大模型生成答案。

6.2 Baichuan
模块:指令意图理解、智能搜索、结果增强;

效果:减少模型幻觉,提升回答可靠性。

6.3 多模态检索增强模型(RA-CM3)
架构:CLIP 检索器 + CM3 Transformer 生成器;

应用:结合外部知识实现高精度多模态生成。

七、RAG 存在的问题

检索效果依赖嵌入模型和算法:可能检索到无关信息;

信息利用不透明:生成文本可能与检索结果冲突;

效率问题:无差别检索 k 个片段增加输入长度;

来源引用缺失:真实性依赖数据源和检索算法。

你可能感兴趣的:(解决方法,prometheus,kubernetes)