大模型的“局限”与RAG的“破局”

大语言模型的强大与不足

强大之处:

  • LLM在理解、生成自然语言方面表现非常出色,能够进行对话、翻译以及摘要等多种任务。

不足之处(“幻觉”与知识时效性):

  • LLM的知识源于训练数据,可能会存在知识截止日期(训练数据不够新),或者在特定领域、最新信息时会“胡说八道(hallucination,幻觉)”,生成一些听起来很合理但实际上错误或者不准确的内容。

RAG 的应运而生

RAG 作为一种解决方案,旨在弥补 LLM 的这些不足,让模型能够访问外部的更新的、或者在特定领域的知识,从而生成出更加准确的回答。


RAG 的工作原理

RAG 是一个结合力信息检索系统和生成时大语言模型的 AI 框架。我们提供一个外部的知识库,LLM 可以在这个外部知识库中去检索知识,并结合自身的训练数据去生成内容,这样就不会像传统 LLM 那样仅仅依赖自身训练数据了。

下图展示了 RAG 的整体工作流程:

RAG 工作流程图


RAG 的核心组件和流程

通常分为两大阶段:索引阶段(预处理)检索-生成阶段(运行时)

1. 索引阶段 (Ingestion / Indexing Phase)

  • 数据源
    • 数据源可以是任何非结构化或者半结构化的内容,比如:pdf、word、网页、数据库、聊天记录、API返回的数据等等。
  • 文档切割 (Chunking)
    • 原始文档可能会很长,直接作为上下文可能会超出大模型的输入限制,并且文档中可能只有一小部分是相关的,需要将文档分割成更小的数据块。可以按照段落、句子、固定长度(结合重叠长度)进行切割。
  • 嵌入(Embedding)生成
    • 将数据块转换成向量值,这些向量能够在高纬空间中捕捉文本的语义信息,语义相近的文本在向量空间中的距离就会更近。这里可以使用嵌入模型(Embedding Model)比如 OpenAI 的 text-embedding-ada-002 等模型。
  • 向量存储 (Vector Storage)
    • 使用向量数据库将数据块的内容以及其对应的向量存储起来,以便快速搜索。

2. 检索-生成阶段 (Retrieval-Augmentation / Runtime Phase)

  • 用户查询
    • 用户输入问题
  • 查询嵌入
    • 使用与索引阶段相同的嵌入模型,将用户查询转换成一个向量嵌入
  • 相似度搜索
    • 在向量数据库中搜索出来 k 个相近的数据块
  • 提示增强
    • 将搜索出来相近的数据块作为上下文,与用户的查询内容构建出一个新的更加丰富的 prompt
  • 内容输出
    • 将增强后的提示发送给 LLM 来输出最终的内容

RAG 的优势与适用场景

优势

  • 提高准确性、减少幻觉:通过事实依据,显著降低LLM生成错误信息的风险。
  • 访问最新和特定领域的知识:LLM无需重新训练即可获得实时或者专有数据。
  • 可追溯性/可解释性:可以方便展示答案来源于那些文档。
  • 数据隐私和安全:可以在本地或者云中构建知识库,避免敏感数据暴露。

使用场景

  • 企业内部知识库
  • 客户服务聊天机器人
  • 法律/医疗信息检索
  • 研究辅助,从大量文献中提取关键信息进行总结
  • 个性化内容推荐

RAG 的进阶优化

  • 重排序:在检索出 k 个数据块时,在用一个更精细的模型对它们进行再次排序选出相关的少量数据块。
  • 查询拓展/重写:对用户原始查询进行改写或者增加相关词汇,以提高检索效果。
  • 多跳检索:对于复杂问题可能需要多次检索,甚至结合LLM的推理能力和指导检索过程。
  • Agentic RAG:结合LLM的规划和工具使用能力,让LLM决定何时、如何进行检索。