【RAG 博客】RAG 应用中的 Routing

Blog:Routing in RAG-Driven Applications
⭐⭐⭐⭐

根据用户的查询意图,在 RAG 程序内部使用 “Routing the control flow” 可以帮助我们构建更实用强大的 RAG 程序。路由模块的关键实现就是一个 Router,它根据 user query 的查询意图,来将该请求的处理转发到多个下游 handlers 之一。

1. 不同的应用场景

1.1 路由到 data source

用户想进行交互的数据可能有多种来源,Query Router 可以用于根据 user query 路由到不同的 data source:

20240511194228

1.2 路由到不同的 component

还可以根据问题的性质,将 query 路由到不同的组件类型,比如可能交给 Agent 处理、Vector Store 处理或者直接由 LLM 处理:

20240511194735

1.3 路由到不同的 prompt template

可以根据 question 的不同来定制 prompt template:

20240511194845

1.4 小结

Router 在本质上就是我们可以用于控制 query control flow 的 “if / else” 语句,不过它的特点在于是基于自然语言输入来做出决策

很多 routing 的逻辑都是基于 LLM 或者 ML 算法,这些算法本质上是非确定性的,所以我们无法保证 router 总是能做出 100% 正确的选择。此外,我们也不太可能预测所有进入路由器的不同查询变体。但是,通过采用最佳实践和进行一些测试,我们可以使用路由器来帮助创建更强大的 RAG 应用程序。

2. Natural Language Routers

这里探讨一下由不同的第三方库所实现的 Natural Language Router:

  • LLM Completion Routers
  • LLM Function Calling Routers
  • Semantic Routers
  • Zero Shot Classification Routers
  • Language Classification Routers

2.1 LLM Completion Router

利用 LLM 的 Chat Completion 的功能,以对话的形式要求 LLM 从 prompt 中提供的一组单词或 topics 中选择一个来作为 routing 的结果。如下图的示例程序所示:

1715431892457

这种思路也是 LlamaIndex 的 LLM Selector router 的工作思路。

2.2 LLM Function Calling Router

这种方法利用 LLM 的 Function Calling 能力来选择 routing 的路线结果。在 LLM 函数调用中,将不同的 routing 路线设置为具有相应描述的函数,然后,根据向 LLM 传递的 query,它能够返回正确的函数(即路线)供我们使用。

这是 LlamaIndex 中的 Pydantic Router 的内部工作方式。

2.3 Semantic Router

这种路由器类型利用嵌入式表示和相似度搜索来选择最佳的 routing 方式。

每条路由都有一组与其相关联的示例查询,这些查询会做 embedding 并作为 vector 存储。将新来的 query 也进行 embedding,然后对其他来自 router 中的示例查询进行相似性搜索,与 query 匹配度最相近的 routing 路线将被选中。

Python 库 semantic-router 就实现了这一点,下图是官网的示例:

1715434301179

embedding 模型可以选择 OpenAI 提供的 encoder,其实也可以选用其他的 text embedding 模型。

由此,对于一个 user query,semantic_router 就可以将其分为 politics 或者 chitchat 两者之一的 routing 结果。

2.4 Zero Shot Classification Router

Zero Shot Classification 是 NLP 的一类 task,其中 model 在一组 labeled data 上训练后,能够对来自以前未见过的类的新示例进行分类。

在这里,我们的 router 可以利用 zero-shot classification 的 model 为一段 text 分配一个 label,这个 label 是 router 预先定义的标签集。

Haystack 的 ZeroShotTextRouter 就是利用的 Hugging Face 的 zero shot 分类模型来实现的 routing。

2.5 Language Classification Router

这类 router 可以识别出查询语言的语言种类,并根据语言种类对 query 进行路由。如果您的应用程序需要多语言解析能力,那么这种路由器就非常有用。

比如 Haystack 的 TextClassificationRouter 就是利用了 python 的 langdetect 库实现的检索文本的语言,该库本身使用朴素贝叶斯算法来检测语言种类。

2.6 Keyword Router

LlamaIndex 创始人的文章 Unifying LLM-powered QA Techniques with Routing Abstractions 中就提到了 keyword router,它会尝试通过在查询和路由列表之间匹配关键字来选择路由。

这种关键词路由器可以由LLM(语言模型)或其他关键词匹配库来识别关键词。目前未找到相关实现。

2.7 Logical Routers

这些逻辑检查会针对变量进行,比如字符串长度、文件名以及值的比较等,用于处理如何路由查询。它们与编程中常用的 if/else 条件非常相似。

换句话说,它们不是基于理解自然语言查询的意图,而是基于现有的、离散的变量来做出选择。

比如来自 Haystack 的 ConditionalRouter 和 FileTypeRouter。

3. 结论

router 作为基本的构建块,在 RAG 系统中可以发挥很大的作用,它可以将自然语言请求路由到你的应用程序的正确位置,以便尽可能地满足用户的查询需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/324853.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker私有仓库registry

简介 Docker私有仓库的Registry是一个服务,主要用于存储、管理和分发Docker镜像。具体来说,Registry的功能包括: 存储镜像:Registry提供一个集中的地方来存储Docker镜像,包括镜像的层次结构和元数据。 版本控制&…

【Unity 实用工具篇】 | UIEffect 实现一系列UGUI特效,灰度、负片、像素化特效

前言【Unity 实用工具篇】 | UIEffect 实现一系列UGUI特效,灰度、负片、像素化特效一、UGUI特效插件:UIEffect1.1 介绍1.2 效果展示1.3 使用说明及下载二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 使用灰度特效做头像(关卡)选择总结

【C/C++笔试练习】DNS设置文件、应用层、Dos攻击、DNS服务、DNS、子网划分、http状态、路由设置、TCP连接、HTTP状态码、剪花布条、客似云来

文章目录 C/C笔试练习选择部分(1)DNS设置文件(2)应用层(3)Dos攻击(4)DNS服务(5)DNS(6)子网划分(7)http状态&am…

日报表定时任务优化历程

报表需求背景 报表是一个很常见的需求,在项目中后期往往会需要加多种维度的一些统计信息,今天就来谈谈上线近10个月后的一次报表优化优化之路(从一天报表跑需要五分钟,优化至秒级) 需求:对代理商进行日统计…

视频合并有妙招:视频剪辑一键操作,批量嵌套合并的必学技巧

在数字时代的今天,视频已经成为我们日常生活和工作中不可或缺的一部分。无论是记录生活点滴,还是制作专业项目,视频合并都是一个常见的需求。然而,对于许多人来说,视频合并却是一个复杂且繁琐的过程。现在有云炫AI智剪…

第七届精武杯部分wp

第一部分:计算机和手机取证 1.请综合分析计算机和手机检材,计算机最近一次登录的账户名是 答案:admin 创建虚拟机时直接给出了用户名 2. 请综合分析计算机和手机检材,计算机最近一次插入的USB存储设备串号是 答案&#xff1a…

6.python网络编程

文章目录 1.生产者消费者-生成器版2.生产者消费者--异步版本3.客户端/服务端-多线程版4.IO多路复用TCPServer模型4.1Select4.2Epoll 5.异步IO多路复用TCPServer模型 1.生产者消费者-生成器版 import time# 消费者 def consumer():cnt yieldwhile True:if cnt < 0:# 暂停、…

创新指南 | 生成式AI如何引领企业创新未来?

2023年麦肯锡全球数字战略调查了1000多名受访者&#xff0c;发现&#xff1a;建立创新文化的组织与它们应用包括生成式AI在内的最新数字技术提高产出的能力之间有着惊人的强关联。 本文探讨了顶尖创新企业采取的五项行动&#xff0c;使它们与同行之间拉开距离&#xff0c;并在使…

【Linux系统】进程

本篇博客整理了进程的多方面知识&#xff0c; 旨在从进程的概念、管理、属性、创建等方面让读者更加全面系统地理解进程和操作系统的管理设计。 目录 一、进程是什么 二、操作系统如何管理进程 1.描述进程 PCB 2.组织进程 3.再谈进程和进程管理 三、Linux下的进程管理 1…

Docker Compose:简化多容器应用部署

序言 在当今的软件开发中&#xff0c;容器化技术的使用已经很普遍了。而 Docker 作为其中最流行的容器化平台之一&#xff0c;为开发者提供了方便、快捷、一致的开发和部署环境。但是&#xff0c;当我们的应用开始变得更加复杂&#xff0c;涉及到多个容器时&#xff0c;手动管…

在 Kubernetes 上运行 Apache Spark 进行大规模数据处理的实践

在刚刚结束的 Kubernetes Community Day 上海站&#xff0c;亚马逊云科技在云原生分论坛分享的“在 Kunernets 上运行 Apache Spark 进行大规模数据处理实践”引起了现场参与者的关注。开发者告诉我们&#xff0c;为了充分利用 Kubernetes 的高可用设计、弹性&#xff0c;在越来…

AI + Web3 如何打造全新创作者经济模型?

可编程 IP 的兴起&#xff0c;借助人工智能极大提高创作效率和效能&#xff0c;让 Web3 用户体会到了自主创作和产品制作的乐趣。然而&#xff0c;你知道 AI 时代来临的背景下&#xff0c;创作者经济模型又该如何在 Web3 技术的加持下走向更成熟的运作轨道吗&#xff1f;第 43 …

再谈毕业论文设计投机取巧之IVR自动语音服务系统设计(信息与通信工程A+其实不难)

目录 举个IVR例子格局打开&#xff0c;万物皆能IVR IVR系统其实可盐可甜。还能可圈可点。 戎马一生&#xff0c;归来依然IVR。 举个IVR例子 以下是IVR系统的一个例子。 当您拨打电话进入IVR系统。 首先检验是否为工作时间。 如是&#xff0c;您将被送入ivr-lang阶段&#xff0…

QT day5 作业

服务器头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QList> //链表类 #include <QMessageBox> //消息对话框类 #include <QDebu…

【C语言】精品练习题

目录 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 题目七&#xff1a; 题目八&#xff1a; 题目九&#xff1a; 题目十&#xff1a; 题目十一&#xff1a; 题目十二&#xff1a; 题目十…

大文件传输的好帮手Libarchive:功能强大的开源归档文件处理库

在数字化时代&#xff0c;文件的存储和传输对于企业的日常运作至关重要。但是&#xff0c;服务器中的压缩文件往往无法直接查看或预览&#xff0c;这给用户带来了不便。为了解决这一问题&#xff0c;在线解压功能的开发变得尤为重要。接下来&#xff0c;小编将介绍一个能够实现…

RabbitMQ(安装配置以及与SpringBoot整合)

文章目录 1.基本介绍2.Linux下安装配置RabbitMQ1.安装erlang环境1.将文件上传到/opt目录下2.进入/opt目录下&#xff0c;然后安装 2.安装RabbitMQ1.进入/opt目录&#xff0c;安装所需依赖2.安装MQ 3.基本配置1.启动MQ2.查看MQ状态3.安装web管理插件4.安装web管理插件超时的解决…

使用xtuner微调InternLM-Chat-7B

1. 安装xtuner #激活环境 source activate test_llm # 安装xtuner pip install xtuner#还有一些依赖项需要安装 future>0.6.0 cython lxml>3.1.0 cssselect mmengine 2. 创建一个ft-oasst1 数据集的工作路径&#xff0c;进入 mkdir ft-oasst1 cd ft-oasst1 3.XTune…

MySQL系列之索引

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

【Linux】环境变量是什么?如何配置?详解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …