【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 系统中可以发挥很大的作用,它可以将自然语言请求路由到你的应用程序的正确位置,以便尽可能地满足用户的查询需求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VTK官方示例

VTK官方示例 -vtk字體 #!/usr/bin/env python# noinspection PyUnresolvedReferences import vtkmodules.vtkInteractionStyle # noinspection PyUnresolvedReferences import vtkmodules.vtkRenderingFreeType # noinspection PyUnresolvedReferences import vtkmodules.vtk…

【MySQL】基本操作

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:MySQL 目录 👉🏻创建和删除数据库👉🏻数据库编码集和数据库校验集校验规则对数据库的影响 👉&…

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型 GT2505HS-VTBD参数,GT2505HS-VTBD用户手册,GT2505HS-VTBD使用手册GT2505HS-VTBD参数说明:手持式5.7吋型,VGA 640*480,TFT彩色液晶屏,65536色,内存32MB,DC24V,内置以太网接口。 GT2505HS-VT…

【GlobalMapper精品教程】079:投影坐标系转地理坐标系(UTM转WGS1984/2000)

文章目录 一、矢量UTM转WGS1984/20001. UTM转WGS19842. UTM转CGCS2000二、栅格UTM转WGS1984/2000一、矢量UTM转WGS1984/2000 加载配套实验数据(data079.rar)中的矢量数据,如下所示: 查看源坐标系:双击图层的,图层投影选项卡,为UTM投影,Zone48N。 设置系统坐标系:点击…

jupyter_lab修改默认目录

1、新版本的jupyter如果按照网上说的只修改jupyter_notebook_config.py这个文件没啥用,我在实际修改过程中遇到了如下报错。 经过各种尝试,还需要修改jupyter_notebook_config.py这个配置文件 2、不废话,直接上步骤 在Jupyter Notebook或者c…

2024年10大AI动画工具

在当今快节奏的数字环境中,动画师和内容创作者不断寻求创新工具来提高他们的工作效率和创造力。随着人工智能的出现,动画发生了显着的转变,因此提供了大量的选项,使图像无缝地栩栩如生。 无论你是一位有抱负的动画师还是经验丰富…

#include《初见C语言之顺序表的增删查改》

目录 一、顺序表 二、顺序表的分类 三、顺序表的实现前期准备 第一步,确定需要的文件 第二步,开始分析 四、顺序表的实现 1.初始化 2.销毁 3.申请空间 4.打印 5.尾插 6.头插 7.尾删 8.头删 9.指定位置之前插入 10.指定位置之前删除 11.…

grid的常见使用场景

场景1&#xff1a;固定几列显示&#xff0c;显示不下会自动换行 <div id"container"><div class"item item-1">1</div><div class"item item-2">2</div><div class"item item-3">3</div>&l…

vscode go语言开发中在任意包运行和调试代码 Example使用方法

一般情况下我们在进行go语言开发的时候我们都需要创建一个main方法和main包才能运行go代码&#xff0c; 针对这个问题&#xff0c;go语言给我们内置了功能强大的testing测试框架&#xff0c; 其中一个很有意思的Example测试就非常的方便使用。 他不管你在什么包&#xff0c;也…

LNMP环境部署WordPress——使用源码包安装方式部署环境

目录 一.前提准备 二.源码安装Mysql 1.MySQL类型 2.MySQL 版本说明 3.MySQL 安装方式 3.1 yum 安装 3.2 编译安装 3.3 二进制安装 3.4 rpm 安装 4. 编译安装MySQL5.7 4.1 清理安装环境 4.2 创建mysql用户 4.3 从官网下载tar包 4.4 安装编译工具 4.5 解压 4.6 …

Vue3:路由

1. 路由简介 在Vue3中&#xff0c;路由是一个核心概念&#xff0c;特别是在构建单页面应用程序&#xff08;SPA&#xff09;时。以下是Vue3中路由的基本概念&#xff1a; 1. **路由&#xff08;Route&#xff09;**&#xff1a;在Vue3中&#xff0c;路由是指根据特定的规则将用…

i春秋-Backdoor

题目 考点 git源码泄露 Linux文件恢复 代码审计 http 解题 参考wp https://blog.csdn.net/cbhjerry/article/details/105791056https://www.pianshen.com/article/19461342501/扫描 题目给出提示&#xff1a;敏感文件泄漏 于是使用dirsearch扫一下 python dirsearch.py -…

如何到《新英格兰医学杂志》 NEJM查找下载文献

《新英格兰医学杂志》NEJM是世界上阅读、引用最广泛、影响力最大的综合性医学期刊之一。NEJM集团出版的期刊还包括NEJM Journal Watch、NEJM Catalyst及NEJM Evidence。NEJM是一份全科医学周刊&#xff0c;出版对生物医学科学与临床实践具有重要意义的一系列主题方面的医学研究…

废品回收微信小程序基于FastAdmin+ThinkPHP+UniApp(源码搭建/上线/运营/售后/更新)

一款基于FastAdminThinkPHPUniApp开发的废品回收系统&#xff0c;适用废品回收站、再生资源回收公司上门回收使用的小程序。 一、FastAdmin框架特色功能及优势 模块化开发&#xff1a;控制器、模型、视图、JS一一对应&#xff0c;使用RequireJS进行插件机制&#xff0c;支持插…

QX----mini51单片机学习---(7)矩阵键盘

目录 1矩阵键盘的识别 2相关c语言 3实践编程 1矩阵键盘的识别 假设按列扫描按下S6P30&#xff1a;0P34&#xff1a;1然后高流向低&#xff0c;P34&#xff1a;0&#xff0c;刚开始是0xf0&#xff1a;1111 0000 后面是0xe0&#xff1a;1110 0000 &#xff0c;当是0xe0能确…

如何通过AI技术实现员工培训的革命性变革

AI个性化培训&#xff1a;开启员工潜力的新篇章 在当今这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术的影响力已经渗透到社会的各个层面&#xff0c;包括教育与培训行业。AI技术正在彻底改变我们获取知识与技能的方式&#xff0c;特别是在员工培训领域…

Offline: Overcoming Model Bias for Robust Offline Deep Reinforcement Learning

EAAI 2023 paper Intro model-free的离线强化学习由于价值函数估计问题存在训练的稳定性以及鲁棒性较低。本文提出基于模型的方法&#xff0c;同构构建稳定的动力学模型帮助策略的稳定训练。 method 本文基于模型的方法&#xff0c;所构造的转移模型输入状态动作&#xff0…

【python】python中的argparse模块,教你如何自定义命令行参数

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

C++容器——list

目录 list容器 list容器使用流程 加入头文件 定义 list容器的使用 添加元素&#xff1a; 删除元素&#xff1a; 访问元素&#xff1a; 容器大小&#xff1a; 迭代器操作&#xff1a; 其他操作&#xff1a; list容器 功能&#xff1a;将数据进行链式存储 链表(list…

数据结构--队列

一、认识队列 队列&#xff08;Queue&#xff09;是一种 受限的线性数据结构&#xff0c;具有 先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的特点。 受限之处&#xff1a; 只允许在表的前端&#xff08;front&#xff09;进行删除操作。只允许在表…