使用Azure AI Search和LlamaIndex构建高级RAG应用

RAG 是一种将公司信息合并到基于大型语言模型 (LLM) 的应用程序中的常用方法。借助 RAG,AI 应用程序可以近乎实时地访问最新信息,团队可以保持对其数据的控制。

在 RAG 中,您可以评估和修改各个阶段以改进结果,它们分为三类:预检索、检索和检索后。

  1. 预检索可提高使用查询重写等技术检索的数据的质量。
  2. 检索使用混合搜索和语义排序等高级技术改进结果。
  3. 检索后侧重于优化检索信息和增强提示。

LlamaIndex 为初学者和有经验的开发人员提供了一个全面的框架和生态系统,以在其数据源上构建 LLM 应用程序。

Azure AI Search是一个信息检索平台,具有尖端的搜索技术和无缝的平台集成,专为任何规模的高性能生成式 AI 应用程序而构建。

我们在预检索中使用LlamaIndex 进行查询转换,并使用 Azure AI 搜索进行高级检索,可以生成构建更好的RAG应用程序。

预检索技术和优化查询编排

为了优化预检索,LlamaIndex 提供了查询转换,这是一项优化用户输入的强大功能。一些查询转换技术包括:

  • 路由:保持查询不变,但标识查询应用到的相关工具子集。将这些工具输出为相关选项。
  • 查询重写:保持工具不变,但以各种不同的方式重写查询,以针对相同的工具执行。
  • 子问题:将查询分解为不同工具上的多个子问题,由其元数据标识。
  • ReAct 代理工具选取:给定初始查询,确定 (1) 要选取的工具,以及 (2) 要在工具上执行的查询。

以查询重写为例:查询重写使用 LLM 将初始查询重新表述为多种形式。这使开发人员能够探索数据的不同方面,从而产生更细致和准确的响应。通过重写查询,开发人员可以生成多个查询,用于集成检索和融合检索,从而获得更高质量的检索结果。利用 Azure OpenAI,可以将初始查询分解为多个子查询。

请考虑以下初始查询:

“作者怎么了?”

如果问题过于宽泛,或者似乎不太可能在我们的语料库文本中找到直接的比较,建议将问题分解为多个子查询。

子查询:

  1. “作者最近写的一本书是什么?”
  2. “作者获得过什么文学奖吗?”
  3. “有没有即将举行的活动或对作者的采访?”
  4. “作者的背景和写作风格是什么?”
  5. “围绕作者有什么争议或丑闻吗?”

子问题查询引擎

LlamaIndex 的一大优点是,像这样的高级检索策略是内置在框架中的。例如,可以使用子问题查询引擎在一个步骤中处理上述子查询,该引擎将问题分解为更简单的问题,然后将答案组合成一个响应。

 response = query_engine.query("What happened to the author?")

  

使用 Azure AI 搜索进行检索

为了增强检索功能,Azure AI 搜索提供混合搜索和语义排名。混合搜索同时执行关键字和向量检索,并应用融合步骤(倒数秩融合 (RRF))从每种技术中选择最佳结果。

语义排名器在初始 BM25 排名或 RRF 排名结果上添加辅助排名。该二级排名使用多语言深度学习模型来推广语义上最相关的结果。

通过将“query_type”参数更新为“semantic”,可以很容易地启用语义排名器。由于语义排名是在 Azure AI 搜索堆栈中完成的,因此我们的数据显示,语义排名器与混合搜索相结合是提高相关性的最有效方法。

此外,Azure AI 搜索还支持矢量查询中的筛选器。您可以设置筛选器模式,以便在矢量查询执行之前或之后应用筛选器:

  • 预筛选模式:在查询执行前应用筛选,减少向量搜索算法查找相似内容的搜索表面积。预滤波通常比后滤波慢,但有利于召回率和精确度。
  • 筛选后模式:在查询执行后应用筛选器,缩小搜索结果范围。后过滤比选择更注重速度。

总结

通过与 LlamaIndex 的协作,可以提供更简单的方法来优化预检索和检索,以实现高级 RAG应用。

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

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

相关文章

ExcelVBA把当前工作表导出为PDF文档

我们先问问Kimi Excel导出为PDF的方法有多种,以下是一些常见的方法: 1 使用Excel软件的内置功能: 打开Excel文件,点击“文件”菜单。选择“另存为”,在“保存类型”中选择“PDF”。设置保存路径和文件名,点…

Node.js -- path模块

path.resolve(常用) // 导入fs const fs require(fs); // 写入文件 fs.writeFileSync(_dirname /index.html,love); console.log(_dirname /index.html);// D:\nodeJS\13-path\代码/index.html 我们之前使用的__dirname 路径 输出的结果前面是正斜杠/ ,后面部分是…

Jenkins CI/CD 持续集成专题二 Jenkins 相关问题汇总

一 问题一 pod [!] Unknown command: package 1.1 如果没有安装过cocoapods-packager,安装cocoapods-packager,sudo gem install cocoapods-packager 1.2 如果已经安装cocoapods-packager,还是出现上面的错误,有可能是pod的安…

文件摆渡:安全、高效的摆渡系统助力提升效率

很多组织和企业都会通过网络隔离的方式来保护内部的数据,网络隔离可以是物理隔离,也可以是逻辑隔离,如使用防火墙、VPN、DMZ等技术手段来实现,隔离之后还会去寻找文件摆渡方式,来保障日常的业务和经营需求。 进行网络隔…

Python 网络与并发编程(一)

文章目录 并发编程介绍串行、并行与并发的区别进程、线程、协程的区别进程线程协程 并发编程解决方案同步和异步介绍 并发编程介绍 串行、并行与并发的区别 有任务A、B、C,一个CPU去执行他们,有几种方式 1、一个cpu按顺序执行ABC,这就是串行…

apache和IIS区别?内网本地服务器项目怎么让外网访问?

Apache和IIS是比较常用的搭建服务器的中间件,它们之间还是有一些区别差异的,下面就详细说说 Apache和IIS有哪些区别,以及如何利用快解析实现内网主机应用让外网访问。 首先说说apache和IIS最基本的区别。Apache运行的操作系统通常为Unix或Lin…

Mac和VScode配置fortran

最近更换了mac电脑,其中需要重新配置各类软件平台和运行环境,最近把matlab、gmt、VScode、Endnote等软件全部进行了安装和配置。但是不得不说,mac系统对于经常编程的人来说还是非常友好的! 由于需要对地震位错的程序进行编译运行…

53、图论-课程表

思路: 其实就是图的拓扑排序,我们可以构建一个图形结构,比如[0,1]表示1->0,对于0来说入度为1。 遍历结束后,从入度为0的开始遍历。引文只有入度为0的节点没有先决条件。然后依次减少1。直到所有节点入度都为0.然后…

如何判断一个服务是否适合于公司项目使用

判断一个服务是否适合公司项目使用是一个涉及多方面因素的决策过程。这个过程通常包括对服务的全面评估,确保它能够满足项目的需求、与公司的技术栈兼容,并且从长远来看是经济效益和安全性的最佳选择。以下是一些主要的考虑因素和评估步骤: …

【Python-Spark(大规模数据)】

Python-Spark(大规模数据) ■ Spark■ PySparl编程模型■ 基础准备■ 数据输入■ RDD的map成员方法的使用■ RDD的flatMap成员方法的使用■ RDD的reduceByKey成员方法的使用■ 单词计数统计■ RDD的filter成员方法的使用■ RDD的distinct成员方法的使用■…

微信小程序:基于MySQL+Nodejs的汽车品牌管理系统

各位好,接上期,今天分享一个通过本地MySQLNodejs服务器实现CRUD功能的微信小程序,一起来看看吧~ 干货!微信小程序通过NodeJs连接MySQL数据库https://jslhyh32.blog.csdn.net/article/details/137890154?spm1001.2014.3001.5502 …

详解Qt中实现树状结构图

在Qt中,实现树状结构图通常采用QTreeWidget或QTreeView组件。这两个组件都允许我们创建具有层次结构的列表,但它们之间存在一些差异。QTreeWidget提供了更简单的API,适用于轻量级、快速开发的需求;而QTreeView则更为灵活和可定制&…

day07 51单片机-串口通信

51 单片机-串口通信 1 串口通信 1.1 需求描述 本案例讲解如何通过串口和PC以9600波特率,无校验位、1停止位通信。最终实现PC向单片机发送字符串,单片机回复PC。本案例中采用串口1通信。 1.2 硬件设计 1.2.1 串口工作原理 串口是将数据按照比特逐一发送的通信接口。在串…

Vs Code npm install 报错解决方法

用的人家的前端框架发现是封装过的,要修改人家前端的话还得把前端源码放在Vs Code 上运行,后端放在IDEA上运行,然后前后端并行开发,在配置前端环境时遇到: npm install 这个的原因是我把node下载到D盘了权限不够框框爆…

css 文字左右抖动效果

<template><div class"box"><div class"shake shape">抖动特效交字11</div></div> </template><script setup></script><style scope> .shape {margin: 50px;width: 200px;height: 50px;line-heigh…

yolov5 的几个问题,讲的比较清楚

yolov5, 几个问题 【BCELoss】pytorch中的BCELoss理解 三个损失函数原理讲解 https://zhuanlan.zhihu.com/p/458597638 yolov5源码解析–输出 YOLOv5系列(十) 解析损失部分loss(详尽) 1、输入数据是 xywh, 针对原图的, 然后,变成 0-1, x/原图w, y/原图h, w/原图w, h/原图h,…

助力突发异常事件预警保障公共安全,基于YOLOv7【tiny/l/x】模型开发构建公共生活场景下危险人员持刀行凶异常突发事件检测预警识别系统

基于AI目标检测模型的暴力持刀行凶预警系统是当下保障人民生命安全的新途径&#xff0c;近年来&#xff0c;公众场合下的暴力袭击事件频发&#xff0c;不仅给受害者及其家庭带来了深重的伤害&#xff0c;也对社会的稳定和安全造成了极大的威胁。在这种背景下&#xff0c;如何有…

思维树(Tree of Thoughts)的概念

思维树&#xff08;Tree of Thoughts&#xff0c;简称ToT&#xff09;是一种利用大型语言模型进行问题解决的框架。这个框架借鉴了人类认知研究的成果&#xff0c;特别是关于人类在做决策时的两种思维方式&#xff1a;快速、自动、无意识的模式&#xff08;称为“系统1”&#…

Mysql 在Windows Server系统下修改数据文件存储路径遇到的坑

因项目需要搭建一个Mysql数据库&#xff0c;为了方便日常运维操作开始选择了Windows Server 2012R2(已有的虚拟机)&#xff0c;考滤到要300G空间&#xff0c;原来的盘空间不够了,就是给虚拟机加了磁盘&#xff0c;Mysql 8.0.26社区版安装路径没得选择&#xff0c;默认就装在C&a…

微服务两种方式登录

目录 1.restTemplate方式 1.1页面 1.2消费者 1.3生产者 1.4效果 2.Feign方式 2.1Service 2.2生产者 三个生产者 一个消费者&#xff0c;三个生产者需要用mysqlmybatis 三个不同的数据库。 页面输入用户名和密码&#xff0c;提交到后端消费者&#xff0c;消费者传到生产…