初识RAG

RAG: Retrieval Augmented Generation检索增强生成

  • 任务说明:了解到现有大模型的缺陷和RAG的优点和流程

  • 任务要求:

    • 了解大模型现有的缺点
    • 理解RAG的流程和实现步骤
    • 清楚RAG的需要的技术
  • 打卡要求:阅读LangChain与RAG的文章 579和LangChain的官方文档 228,列举LangChain能实现的功能。

当前大模型的缺点:

  • 只能基于大模型训练时所提供的知识进行回答,如果想要定制私人化的知识,需要使用特定的外挂信息来增强模型的知识

大模型现存问题:

  1. 模型幻觉问题:生成的内容可能不一致或不准确
  2. 时效性问题:不满足当下的时效性,因为模型训练时使用的数据时很老的
  3. 安全性问题:可能存在敏感信息泄露风险(RAG如何规避这个风险?)

RAG的优点:

  1. 提高准确性和相关性
  2. 改善时效性,是模型能适应当前事件和知识
  3. 降低生成错误的风险,依赖检索提供准确信息

image

LangChain提供以下组件来帮助构建RAG应用:

  • DocumentLoader: 负责加载文档,包括 page_content(str) + metadata(dict),为文本内容和元数据
  • DocumentSpliter: 负责分割文档,小段落的文档更容易检索,且聊天模型的输入窗口是有限制的
  • Embeddings: 将文本转化为向量
  • VectorStore: 负责向量的存储和检索,如Faiss 、 Annoy
  • Retriever: 负责取回符合搜索条件的内容,通过输入找到对于文档
  • ChatModel: 聊天模型,负责生成答案,如GPT

image

LangChain和RAG的优势和应用场景

LangChain和RAG的结合可以带来以下的优势:

  • 灵活性:你可以根据你的需求和数据源选择不同的组件和参数,定制你的RAG应用。你也可以使用自定义的组件,只要它们遵循LangChain的接口规范。
  • 可扩展性:你可以使用LangChain的云服务来部署和运行你的RAG应用,无需担心资源和性能的限制。你也可以使用LangChain的分布式计算功能来加速你的RAG应用,利用多个节点的并行处理能力。
  • 可视化:你可以使用LangSmith来可视化你的RAG应用的工作流程,查看每个步骤的输入和输出,以及每个组件的性能和状态。你也可以使用LangSmith来调试和优化你的RAG应用,发现和解决潜在的问题和瓶颈。

LangChain和RAG的结合可以应用于多种场景,例如:

  • 专业问答(Professional Question Answering):你可以使用LangChain和RAG来构建一个专业领域的问答应用,例如医疗、法律或金融。你可以从专业领域的数据源中检索相关的信息,帮助大模型回答用户的问题。例如,你可以从医学文献中检索疾病的诊断和治疗方案,帮助大模型回答医疗相关的问题。
  • 文本摘要(Text Summarization):你可以使用LangChain和RAG来构建一个文本摘要应用,例如新闻摘要或论文摘要。你可以从多个数据源中检索相关的文本,帮助大模型生成一个综合的摘要。例如,你可以从多个新闻网站中检索关于同一事件的报道,帮助大模型生成一个全面的摘要。
  • 文本生成(Text Generation):你可以使用LangChain和RAG来构建一个文本生成应用,例如诗歌生成或故事生成。你可以从不同的数据源中检索灵感,帮助大模型生成更有趣和更有创意的文本。例如,你可以从诗歌、歌词或小说中检索相关的文本,帮助大模型生成一首诗、一首歌或一个故事。

RAG 的三个流程

  1. 问题理解:准确把握用户的意图 – 挑战:但是,用户有时候提问的描述不准确,比较难以识别,比如提问的内容是很短的几个关键字,或者模糊提问,但是知识库中的文档却是长文档;
  2. 知识检索:用户提问可能以多种方式表达,需要检索的文档类型也可能是多种多样的,如PDF,Doc,html等
  3. 答案生成

在RAG技术流程中,涉及多个关键模块,每个模块承担着特定的任务,协同工作以实现准确的知识检索和生成自然语言回答。

技术模块描述
意图理解意图理解模块负责准确把握用户提出的问题,确定用户的意图和主题。处理用户提问的模糊性和不规范性,为后续流程提供清晰的任务目标。
文档解析文档解析模块用于处理来自不同来源的文档,包括PDF、PPT、Neo4j等格式。该模块负责将文档内容转化为可处理的结构化形式,为知识检索提供合适的输入。
文档索引文档索引模块将解析后的文档分割成短的Chunk,并构建向量索引。或通过全文索引进行文本检索,使得系统能够更快速地找到与用户问题相关的文档片段。
向量嵌入向量嵌入模块负责将文档索引中的内容映射为向量表示,以便后续的相似度计算。这有助于模型更好地理解文档之间的关系,提高知识检索的准确性。
知识检索知识检索模块根据用户提问和向量嵌入计算的相似度检索或文本检索打分。这一步骤需要解决问题和文档之间的语义关联,确保检索的准确性。
重排序重排序模块在知识检索后对文档库进行重排序,以避免“Lost in the Middle”现象,确保最相关的文档片段在前面。
大模型回答大模型回答模块利用大型语言模型生成最终的回答。该模块结合检索到的上下文,以生成连贯、准确的文本回答。
其他功能模块可根据具体应用需求引入其他功能模块,如查询搜索引擎、融合多个回答等。模块化设计使得系统更加灵活,能够根据不同场景选择合适的功能模块组合。