RAG 技术通过在 AI 生成过程中引入外部知识检索,从基础的文档查询发展到多模态、Multi-Agent 体协同的智能架构,让 AI 回答更准确、更全面
核心组件
- 嵌入模型: 将文本转换为向量表示
- 生成模型: 负责最终的内容生成
- 重排序模型: 优化检索结果的相关性
- 向量数据库: 存储和检索向量化的内容
- 提示模板: 规范化的查询处理模板
- AI Agent: 智能决策和任务协调
图例 1
一、Naive RAG
Naive RAG(Retrieval-Augmented Generation)是最基础的一种架构,用于结合检索和生成来处理复杂的任务,比如问答或内容生成。
其基本架构如下:
1.检索模块(Retriever)
- 负责从知识库(如文档集合或数据库)中找到与输入查询相关的上下文。
- 通常基于向量检索技术,使用嵌入模型(如 Sentence Transformers 或 OpenAI Embeddings)将查询和文档嵌入到向量空间中,计算相似性并返回最相关的文档。
2.生成模块(Generator)
- 接收用户输入和检索到的上下文,生成最终的回答或内容。
- 通常使用大型语言模型(如 GPT 或 T5)来生成自然语言输出。
3.流程
- 用户输入一个查询(如问题)。
- 检索模块从知识库中找出与查询相关的文档片段。
- 将检索结果连同查询一起传递给生成模块。
- 生成模块基于上下文生成回答或内容。
特点
- 简单高效:由于模块化设计,容易实现和调试。
- 可扩展性强:检索模块和生成模块可以独立优化或替换。
- 存在局限性:Naive RAG 通常假设检索的上下文是完备的,这在知识库更新不及时或检索效果不佳时可能导致生成结果不准确。
应用场景
- 文档问答:基于企业内部文档或外部知识库回答用户提问。
- 内容生成:辅助生成新闻、摘要等需要结合外部信息的内容。
- 技术支持:从常见问题解答(FAQ)库中检索答案并生成自然语言响应。
Naive RAG 是 RAG 系列架构的起点,更复杂的变种(如使用多轮交互或强化学习优化)通常在此基础上扩展。
二、Retrieve-and-rerank
Retrieve-and-Rerank 是在基础 RAG 架构上的增强版本,通过引入重排序(Reranking)步骤,进一步优化检索结果的相关性。这种方法非常适合在需要高精度答案的任务中使用。
架构增强点:重排序步骤
在基础 RAG 的检索阶段(Retriever)之后,加入一个额外的重排序模块,以更好地筛选检索结果,提高传递给生成模块(Generator)上下文的质量。
核心流程
- 初步检索(Initial Retrieval)
- 检索模块从知识库中找到一批初步相关的文档(例如,前 50 个文档)。
- 使用向量检索(如基于余弦相似度或欧几里得距离)快速生成候选文档集合。
- 重排序(Rerank)
- 传统方法:BM25、TF-IDF 等。
- 深度学习模型:基于 BERT 的交互式检索模型(如 Cross-Encoder)。
- 混合方法:将检索分数与语义模型得分结合。
- 将初步检索到的候选文档集合交给一个专门的重排序模型。
- 重排序模型可以是:
- 输出一个按相关性排序的高质量文档列表。
- 生成模块(Generator)
- 仅使用重排序后的前 N 个文档作为上下文,生成回答或内容。
- 高相关性的上下文能显著提升生成质量。
Retrieve-and-Rerank 优势
- 提升检索精度
初步检索模块通常快速但粗略,可能引入较多噪声;重排序能更精准地选择最相关的文档。 - 减少生成错误
提供高相关性上下文,避免生成模块在不相关或错误信息基础上生成答案。 - 模块灵活性
重排序模块可以独立优化,例如微调 BERT 模型,加入领域知识等。 - 适配长尾查询
对于少见或复杂的查询,重排序能进一步优化初步检索效果。
应用场景
- 问答系统
在文档问答中,Retrieve-and-Rerank 常用于优化检索阶段,确保提供与问题高度相关的上下文。 - 推荐系统
在搜索和推荐场景中,重排序步骤可以显著提高最终推荐内容的相关性和用户满意度。 - 技术支持
从技术文档或 FAQ 中筛选最相关的答案,减少生成模块的错误回答率。
示例技术栈
- 检索模块
FAISS、ElasticSearch、BM25 等。 - 重排序模块
BERT、MiniLM、ColBERT(使用 Cross-Encoder)等。 - 生成模块
GPT、T5、LLaMA 等。
通过这种方式,Retrieve-and-Rerank 在原始 RAG 架构的基础上增强了检索的相关性,显著提升了最终生成的质量。
三、Multimodal RAG
与基础 RAG 类似,Multimodal RAG 也由检索模块(Retriever)和生成模块(Generator)组成,但增强了对多模态数据的支持:
- 多模态检索模块
- 能处理和索引不同模态的数据,如图像、视频或音频的特征。
- 通常利用预训练模型将非文本模态(如图像)转换为嵌入向量,存储在统一的向量数据库中。
- 检索时,将用户输入(文本或其他模态)编码为嵌入向量,与数据库中的嵌入进行匹配。
- 多模态生成模块
- 接受多模态的上下文,例如文本和图像的组合。
- 利用专门设计的多模态生成模型(如 Flamingo、BLIP-2)生成回答或内容。
- 能够根据上下文模态灵活调整生成策略。
- 流程
- 用户输入可以是文本(如问题)或其他模态(如图像)。
- 多模态检索模块找到与输入相关的多模态上下文。
- 将检索结果传递给生成模块,结合上下文生成多模态回答或内容。
关键技术点
- 模态对齐
- 在多模态数据之间建立共同表示,例如将图像特征和文本特征映射到同一个向量空间。
- 常用技术:CLIP、Align-before-Fuse、BLIP 等。
- 模态融合
- 将检索到的不同模态的上下文信息进行有效融合,为生成模块提供统一的输入。
- 方式:早期融合(将模态特征直接拼接)、晚期融合(分别处理后再结合)。
- 生成模型支持
- 多模态生成需要具备同时处理文本和非文本模态的能力。
- 模型:Flamingo、BLIP-2、Visual ChatGPT 等。
Multimodal RAG 的优势
- 支持多种输入类型
- 不仅可以回答文本问题,还能处理图像相关的查询,如“这张图片中的物体是什么?”。
- 丰富的信息来源
- 检索和利用跨模态的信息,比如从图片和相关描述中生成答案。
- 增强的上下文理解
- 将文本、图像等模态上下文结合起来,生成更精确、更有深度的内容。
- 广泛的应用场景
- 可用于医学影像分析、教育、内容创作等需要多模态数据结合的任务。
应用场景
- 多模态问答
- 结合文本和图像回答问题,例如“这张 X 光片有什么异常?”
- 图像描述生成
- 为图像生成自然语言描述,适用于教育或辅助工具。
- 跨模态搜索
- 用户输入文本,系统从图像库中检索相关图像(或反之)。
- 医疗诊断
- 结合医学文本和影像数据,生成诊断报告或建议。
- 内容生成
- 从视频或音频中提取关键信息并生成摘要或分析报告。
技术实现示例
- 检索模块
- 图像:使用 CLIP、DINO 等模型提取图像特征。
- 文本:使用 Sentence Transformers 或 OpenAI Embeddings。
- 生成模块
- 使用多模态生成模型,如 Flamingo、BLIP-2、Visual ChatGPT 等。
- 数据库
- 存储跨模态嵌入的向量数据库,如 FAISS、Weaviate。
通过 Multimodal RAG,可以实现复杂的跨模态任务,为各种应用提供更强大的解决方案。