一、RAG是什么
前面的AI文章,我们看到了大模型(如文心一言、通义千问等)的对话能力,这些大模型的能力是依赖预训练阶段所学的知识来进行文本生成任务的,如问答,翻译等。然而这些模型的知识是静态的,受限于预训练数据的时间点,无法动态获取最新的知识内容。大模型的预训练数据更多来自公开的通用知识,它们并不能访问个人或企业的私有数据,因此我们可以发现大模型缺乏对特定领域知识的响应能力。同时因为大模型的训练数据很多且很广,它的回答容易产生不准确的答案,大家称这种现象为幻觉。
检索增强生成RAG(Retrieval-Augmented Generation)的引入解决了这些问题。它允许生成模型在生成文本时动态地从外部知识库中检索相关信息,并将这些信息整合到生成过程中。这样一来,生成模型不仅能够利用其内部的知识,还能实时地从外部资源中获取最新的、最相关的信息,从而提高了生成内容的准确性和时效性。具体来说,RAG的工作流程如下:
Retrieval(检索):
在这个阶段,系统从外部知识库中检索与当前任务相关的文档或片段。检索的目标是找出最相关的背景信息,以便为生成模型提供额外的支持。
Augmentation(增强):
在检索到相关信息之后,这些信息需要与原始输入进行融合。这一步骤被称为“增强”,因为它通过加入检索到的高相关性信息,增强了生成模型的输入上下文,使其能够更好地生成高质量的文本。
Generation(生成):
最后,增强后的上下文被输入到生成模型中,生成模型根据增强后的信息生成最终的文本。这个过程利用了检索到的信息,确保生成的内容更加准确和相关。
二、使用LangChain实现RAG
下面是我们使用千帆大模型的RAG示例,代码如下(示例):
import os
from langchain.schema.runnable import RunnablePassthrough, RunnableMap, RunnableLambda
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain_community.embeddings