RAG 学习笔记(六)

2024-01-23  本文已影响0人  啊阿伟啊

基于博文 Advanced RAG Techniques: an Illustrated Overview 的学习和练习的记录。

中文内容可以查看博主@宝玉的译文 高级 RAG 技术:图解概览 [译]

系列笔记:
RAG 学习笔记(一)
RAG 学习笔记(二)
RAG 学习笔记(三)
RAG 学习笔记(四)
RAG 学习笔记(五)

参考引用

用户最终获得的回答来自于多个源:

  1. 复杂查询:使用多个子查询检索获得的上下文整合为一个回答
  2. 单个查询:从各种文档中检索到的相关上下文合并成一个回答

问题:如何准确回溯回答内容的来源

方法:

  1. 将内容引用的任务增加到 prompt 中,让 LLM 来提示内容引用来源的 id
  2. 将生成的回答与检索到的文本块匹配

参考引用是一个工具,并不是改进检索性能的方法。

对话引擎(Chat Engine)

RAG 系统,只有单次查询是不够的。一个优秀的 RAG 系统需要支持对话逻辑,在查询的时候能够将对话的上下文考虑在内。

技术点

查询压缩技术(query compression)

实现方法

两种方法的图示
  1. ContextChatEngine:简单且流行的方法

    • 使用用户查询语句获取相关内容
    • 将检索结果和对话历史一并发送给 LLM,用于生成回答
  2. CondensePlusContextMode:更为复杂的实现

    • 将用户查询语句和对话历史一并发送给 LLM,生成一个新的查询语句
    • 使用新的查询语句获取检索结果
    • 将检索结果和用户的原始查询语句一并发送给 LLM,生成回答
  3. ReAct Agent:内容和 Agent 相关,后面一并介绍

动手练习

LangChain ConversationalRetrievalChain 对话方法实现

查询路由(Query Routing)

  1. 由 LLM 支持的决策步骤
  2. 用来决定根据用户的查询,下面要做什么事情。通常有以下任务:
    • 内容总结
    • 从某个数据源检索数据(关系型数据库,图数据库,向量数据库等)
    • 执行多个不同的路由,并将各个路由的执行结果合并,提供给 LLM 生成回答。

技术说明

  1. 查询路由的定义中包含可以执行的选项,可以是
    • 检索某个数据源的数据
    • 如果是 Agent 应用,可能是执行子任务链或者其他的 Agent(如多文档 Agent,后面会介绍)
  2. 通过 LLM 决定具体执行的选项,返回的结果是预先定义的格式,方便程序调用方法执行具体任务。

实现

  1. LangChain: Dynamically route logic
  2. LlamaIndex: Routers
上一篇下一篇

猜你喜欢

热点阅读