人工智能 频道

RAG四个层次与技术实现

参考论文:https://arxiv.org/pdf/2409.14924v1

我本篇文章会整合到github的repo文章:

https://github.com/xinyuwei-david/david-share/tree/master/LLMs/RAG-Best-Practice

虽然4o和O1很强,但它的知识也不可能是最新的。以往我们介绍LLM使用中的工程化技术,往往把prompt engineering、RAG以及微调三者当成并行的手段,实际上这三种技术可以结合。我阅读的这篇论文思路就很好,把RAG分为四个阶段。

一、显性事实查询(Explicit Fact Queries)

1.1 特点

  • 简单性:直接从提供的数据中检索明确的事实信息,无需复杂的推理或多步处理。

  • 需求:高效、准确地检索相关内容,并生成精确的回答。

1.2 技术与工程建议

a. 基本的RAG方法

  • 数据预处理与分块(Chunking):将长文本或文档进行适当的分块,便于索引和检索。常用的分块策略包括:

    • 固定长度分块:将文本按固定长度切分,但可能会打断句子或段落。

    • 基于段落或语义的分块:根据文本的自然段落或语义边界进行分块,保持内容的完整性。

  • 索引构建

    • 稀疏索引:使用传统的信息检索方法,如TF-IDF、BM25,基于关键词匹配。

    • 密集索引:使用预训练的语言模型(如BERT)生成文本向量嵌入,进行向量检索。

  • 检索技术

    • 利用向量相似度计算或关键词匹配,从索引中检索与查询最相关的文本片段。

  • 答案生成

    • 将检索到的文本片段作为上下文,输入到LLM中,生成最终的回答。

      b. 改进检索和生成阶段

  • 多模态数据处理:如果数据包含表格、图片等非文本信息,需要将其转换为文本形式,或使用多模态模型进行处理。

  • 检索优化

    • 递归检索:当一次检索不足以找到答案时,可进行多轮检索,逐步缩小范围。

    • 检索结果重排序:使用模型对检索结果进行评分或重排序,优先使用最相关的内容。

  • 生成优化

    • 过滤无关信息:在生成阶段前,过滤掉与问题无关的检索内容,避免干扰模型生成。

    • 控制回答格式:通过精心设计的提示,确保模型生成的答案格式正确,内容准确。

1.3 工程实践示例

 
示例:构建一个问答系统,回答关于公司产品的常见问题

  • 数据准备

    • 收集所有产品的相关文档、FAQ、使用手册等。

    • 对文档进行清洗、分块和索引。

  • 系统实现

    • 用户提出问题后,使用密集向量检索,从索引中找到最相关的文本片段。

    • 将检索到的片段作为上下文,输入到LLM,生成回答。

  • 优化策略

    • 定期更新文档和索引,确保信息的时效性。

    • 监控用户反馈,改进检索策略和提示设计,提高回答质量。

二、隐性事实查询(Implicit Fact Queries)

2.1 特点

  • 复杂性增加:需要对检索到的数据进行一定程度的推理或多步推导。

  • 需求:模型需要将问题分解为多个步骤,分别检索和处理,然后综合得到答案。

2.2 技术与工程建议

a. 多跳(Multi-hop)检索和推理

  • 迭代式RAG

    • IRCoT(Iterative Retrieval Chain-of-Thought):利用链式思维,引导模型在每一步检索相关信息,逐步逼近答案。

    • RAT(Retrieve and Answer with Thought):在回答过程中,引入检索步骤,使模型在需要时检索新的信息。

  • 问题分解

    • 将复杂问题分解为更简单的子问题,分别检索和回答,然后综合结果。

      b. 图结构或树结构的检索和推理

  • 构建知识图谱

    • 从数据中抽取实体和关系,构建知识图谱,帮助模型理解复杂的依赖关系。

  • 图搜索算法

    • 使用深度优先搜索(DFS)或广度优先搜索(BFS)等算法,在知识图谱中寻找与问题相关的路径或子图。
      c. 使用SQL等结构化查询

  • 文本到SQL的转换

    • 将自然语言问题转换为SQL查询,从结构化数据库中获取答案。

  • 工具支持

    • 使用现有的文本到SQL转换工具,如Chat2DB,实现自然语言到数据库查询的转换。

2.3 工程实践示例

  • 场景:用户询问“过去五年中,公司X的股价在哪些季度超过了公司Y?”

问题分解:

  1. 获取公司X和公司Y过去五年的季度股价数据。

  2. 比较每个季度的股价。

  3. 找出公司X股价超过公司Y的季度。

实现步骤:

  • Step 1:使用文本到SQL工具,将自然语言转换为SQL查询,检索数据库中相关的数据。

  • Step 2:利用编程语言(如Python)处理和比较数据。

  • Step 3:将结果整理成用户可读的格式。

回答生成:将整理好的结果作为上下文,输入到LLM中,生成自然语言的回答

三、可解释的推理查询(Interpretable Rationale Queries)

3.1 特点

  • 需要应用领域特定的规则和指南:模型需要理解并遵循这些规则,通常未在预训练数据中涵盖。

  • 需求:将外部的规则、指南或流程整合到模型中,使其在回答时能够按照指定的逻辑和步骤进行。

3.2 技术与工程建议

a. 提示工程(Prompt Engineering)和提示优化

  • 设计有效的提示

    • 在提示中明确提供规则或指南,让模型按照指定的步骤进行回答。

  • 自动化提示优化

    • 使用优化算法(如强化学习)自动搜索和优化提示,提高模型在特定任务上的表现。

  • OPRO(Optimization with Prompt Rewriting)

    • 通过模型自身生成和评估提示,迭代优化,找到提示组合。

      b. 链式思维(Chain-of-Thought, CoT)提示

  • 引导模型进行多步骤的推理

    • 在提示中要求模型展示推理过程,确保其按照指定的逻辑思考。

  • 手动设计或自动生成CoT提示

    • 根据任务需求,设计合适的CoT提示,或者使用算法自动生成。

      c. 遵循外部流程或决策树

  • 将规则和流程编码为可执行的格式

    • 将决策流程转换为状态机、决策树或伪代码,供模型执行。

  • 模型调整

    • 使模型能够解析和执行这些编码的规则。

3.3 工程实践示例

 
示例:客服机器人处理退货请求

  • 场景:客户要求退货,客服机器人需要根据公司的退货政策,指导客户完成相应流程。

    技术实现:

  1. 规则整合:将公司的退货政策和流程整理成清晰的步骤或决策树。

  2. 提示设计:在提示中包含退货政策的关键点,要求模型按照步骤指导客户。

  3. 模型执行:LLM根据提示,按照退货流程与客户交互,提供明确的指引。

  • 优化策略

    • 提示优化:根据客户反馈,调整提示,使模型更准确地理解和执行退货流程。

    • 多轮对话:支持与客户的多轮对话,处理各种可能的问题和异常情况。

四、隐藏的推理查询(Hidden Rationale Queries)

4.1 特点

  • 最高的复杂性:涉及领域特定的、未明确指出的推理方法,模型需要从数据中发现并应用这些隐含的逻辑。

  • 需求:模型必须具备从大量数据中挖掘模式和推理方法的能力,类似于领域专家的思维过程。

4.2 技术与工程建议

a. 离线学习和经验积累

  • 从数据中学习模式和经验

    • 通过训练模型,让其从历史数据、案例中归纳出潜在的规则和逻辑。

  • 自监督学习

    • 使用模型生成的推理过程(如Chain-of-Thought),作为辅助,优化模型的推理能力。


      b. 上下文学习(In-context Learning, ICL)

  • 提供示例和案例

    • 在提示中包含相关的示例,让模型参考类似案例进行推理。

  • 检索相关案例

    • 使用检索模块,从数据库中找到与当前问题类似的案例,提供给模型。

      c. 模型微调

  • 领域特定的微调

    • 使用大量的领域数据,对模型进行微调,使其内化领域知识。

  • 强化学习

    • 使用奖励机制,鼓励模型产生符合期望的推理过程和答案。

4.3 工程实践示例

示例:法律助理AI处理复杂案件

  • 场景:用户咨询一项复杂的法律问题,AI需要提供建议,引用相关法律条款和判例。

    技术实现:

  1. 数据准备:收集大量的法律文档、案例分析、专家意见等。

  2. 模型微调:使用法律领域的数据,对LLM进行微调,使其具备法律推理能力。

  3. 案例检索:使用RAG,从数据库中检索与当前案件类似的判例和法律条款。

  4. 答案生成:将检索到的案例和条款作为上下文,输入到微调后的LLM中,生成专业的法律建议。


  • 优化策略

    • 持续学习:定期更新模型,加入新的法律案例和法规变化。

    • 专家审核:引入法律专家对模型的输出进行审核,确保准确性和合法性。

五、综合考虑:微调LLM与RAG的结合

虽然微调LLM可以增强模型的推理能力和领域适应性,但并不能完全替代RAG的作用。RAG在处理动态、海量、实时更新的知识方面具有独特的优势。将微调和RAG结合起来,可以发挥各自的优势,使模型既具备强大的推理能力,又能够访问最新和完整的外部知识。

5.1 结合的优势

  • 增强推理能力:通过微调,模型学习到领域特定的推理方法和逻辑。

  • 实时访问知识:RAG允许模型在生成答案时,实时检索最新的外部数据。

  • 灵活性和可扩展性:RAG系统可以方便地更新数据源,无需重新训练模型。

5.2 实际应用建议

  • 针对复杂任务,综合使用微调和RAG:利用微调提升模型的推理和逻辑能力,同时通过RAG获取具体的知识和信息。

  • 评估投入产出比:考虑微调的成本和收益,针对核心的推理能力进行微调,而将知识获取交给RAG处理。

  • 持续更新和维护:建立RAG系统的数据更新机制,确保模型获取的外部数据是最新和准确的


0
相关文章