朴素RAG简明回顾

背景:回顾一下RAG.

RAG

检索增强生成(Retrieval-Augmented Generation,RAG)是一种模型架构。它结合了检索和生成的思想,核心思路是通过检索召回相关内容(检索),结合用户相关信息输入大模型(增强),最终生成答案(生成)。

本质是通过对外部知识来源的集成在大模型交互过程中的prompt增加相关性信息,使得大模型生成更精确和上下文感知的响应,同时也有效抑制幻觉。

Naive RAG(朴素RAG)

检索外部知识,添加相关上下文。

流程

朴素RAG的三个步骤:

  1. 索引(indexing):索引过程是离线执行的关键初始步骤。

    • 输入标准化,清理和提取原始数据,将各种文件格式(如PDF、HTML和Word)转换为标准化的纯文本;

    • 文本切块(chunk),以适应语言模型的上下文约束;

    • Embedding,使用Embedding模型将这些块转换为向量表示;

    • 索引构建,将这些文本块及其向量Embeddings存储为键值对,从而实现高效和可扩展的搜索功能。

  2. 检索(Retrieval):用户查询用于从外部知识来源检索相关上下文。

    • 用户查询由编码模型处理,该模型生成语义相关的Embeddings;
    • 在向量数据库上进行相似性搜索,检索最接近的k个数据对象(top k)。
  3. 生成(Generation):将用户查询和检索到的附加上下文填充到prompt模板中。最后,将检索步骤得到的增强prompt输入到LLM中。

示例Prompt

    请回答后面用三个反引号 ```{query}``` 包围的问题
    回答时参考用三个反引号 ```{context}``` 包围的参考信息
    如果提供的上下文中没有相关信息尝试自己回答但要告诉用户你没有相关的上下文作为回答的依据
    回答要简洁输出的答案少于80个token

问题

朴素RAG在上面提到的所有三个步骤中都存在一定问题。

Indexing(索引)

Retrieval(检索)

Generation(生成)

增强式生成过程所面临的主要挑战是:如何将检索到的文段的上下文有效融入当前的生成任务。

如果处理不得当,生成的内容可能显得杂乱无章。当多个检索到的文段包含相似信息时,冗余和重复成为问题,这可能导致生成内容的重复。

最后,三个步骤的问题会统一在响应上爆发,因此 工程环节上的链路Trace是必要的。

如果LLM响应了一个不相关回答,可能是LLM本身提取能力问题,也可能是数据源文本提取、Embedding模型无法准确捕获语义、索引检索、索引召回等。