HuggingFists-低代码玩转LLM RAG(2) --Query

        继上一篇文章我们探讨了如何使用HuggingFists实现文本的Embedding后。这一次我们将介绍如何使用HuggingFists实现LLM RAG的查询部分。

        首先我们回顾一下RAG的结构,如下图:

基于向量数据库的RAG结构图

    我们在上篇文章中介绍了如何使用HuggingFists实现结构图右半部分的文档向量化入库的过程。本文我们将着重介绍如何使用HuggingFists从向量库检索数据并交由大模型根据跟定数据回答问题的过程。由图可知,实现用户的检索过程主要由以下几步组成:

  1. 获取用户输入检索条件
  2. 对检索条件进行向量化
  3. 用向量化条件查询向量库
  4. 将用户问题、检索结果合并构成Prompt
  5. 将Prompt输入LLM等待LLM返回结果
  6. 向用户返回结果

基于以上过程,我们使用HuggingFists构建了如下流程:

问题检索流程图

    这个流程由8个算子组成,下面我们详细阐述一下各算子的用途及我们在落地实现时的思考。

1.交互式数据输入:该算子用于模拟用户的输入,如上图,我们设定用户输入的问题为“数据安全治理有哪些框架?特点是什么?”。由于真实情况下,用户提出的问题是变化的,所以我们可以在这里将问题写成变量的形式。HuggingFists支持的变量格式为”${varName}”。在驱动流程运行时,HuggingFists会将变量替换为运行时指定的具体值,从而可以将不同的问题带入流程。配置如下图:

交互式数据输入

阿里文本Embedding

2.阿里文本Embedding:选取向量类型为“查询向量”,将输入的问题按查询向量进行向量化。需要特别注意的是,这里的向量类型必须为“查询向量”,在进行文本向量入库时选择的类型为“底库向量”。

Milvus读取

3.Milvus读取:根据输入的向量,从Milvus向量库中查询匹配的数据。这里使用SQL语句方式访问。由于Milvus本身不支持SQL的访问方式,所以这里使用的是基于开源项目MOQL对Milvus支持的语法格式。在SQL语句中我们使用了@{embeddings}变量,该变量表示上下文变量,上下文变量可以与算子的输入列做绑定映射。该算子有一个名为embeddings的输入列,所以从配置中可以看到,变量embeddings与embeddings列做了映射绑定。运行时,变量会被输入列的值替换掉,从而生成可运行的SQL语句。当输入为多条记录时,每条记录都会驱动一次SQL的生成与检索。

过滤

4.过滤:通过过滤,获得与问题相关度较高的数据。流程里过滤条件设定为只保留相关度值<5000的数据。为什么将值设置为5000,主要是因为在这个示例中,我们发现打分在5000以下的内容跟问题的相关度最高。另外,需要注意的是,问题的长短,陈述方式会对检索出的结果有一定的影响。如果需要更精准的检索问题相关内容,此时可以加入一个步骤,让大语言模型帮忙聚焦问题,然后再对问题进行检索。

列添加

5.列添加:列添加在这里是一个技巧型的应用。主要是因为流程后面的“大语言模型提示”算子使用的提示模板中需要将内容和问题一起组合成为一个提示。而在上一步通过过滤获得的输出信息中只有数据信息,没有问题信息。所以,在这里为数据添加一个问题列。问题列的值使用${question}变量描述,该值与算子1中的变量值一致,会一同被替换。

聚合

6.聚合:将过滤后符合条件的文本数据合并在一起,形成一个大的文本。关于如何构造Prompt,有两种不同的实现策略。一是合并所有文本然后构造一个完整的Prompt,一次性提交给大语言模型处理,这种方式相对更节省tokens,但很容易超出大语言模型的tokens限制;二是以会话方式,将数据一点、一点输送给大语言模型。该方式由于需要多次提交,且每次提交都保持会话历史,所以消耗的tokens数量比较大。但该方式可以采用些技巧,比如定期总结之前的历史输入,从而降低历史会话总量,实现较大信息的输入。由于HuggingFists目前还不支持会话模式的大语言模型访问,故此我们采用了第一条技术路线,向大模型发一个完整的Prompt。

大语言模型提示

7.大语言模型提示:从提示库中选择合适的提示模板。HuggingFists内置了提示模板库,方便使用者积累提示模板。提示模板库的功能在“资源”菜单下。它支持对提示模板增、删、改、查以及分组管理。以下是我们在本流程中使用的提示模板的截图:

提示模板

        模板内容为:“请根据以下内容回答问题:\n @{text} \n问题: @{question} “。需要为模板中的变量设定列映射。运行时,HuggingFists用列值替换模板中的变量,从而生成最终输入到大语言模型的提示。

阿里大语言模型

8.阿里大语言模型:根据提示信息回答问题。

最终的运行效果如下图:

运行结果

        Prompt列输出的是输入到大模型的提示信息;mooOutput列输出的是大模型回答的答案。经确认答案无误,是基于输入的提示信息生成的,不含模型学到的通用知识。

结语

        以上展示了如何使用HuggingFist实现RAG的查询。与上一篇文章一起,全面介绍了RAG的低代码实现。但作为一个完整的项目落地实践,目前还没有结束。因为尚缺用户的问答系统界面与HuggingFists整合没有介绍。目前,HuggingFists正在研发对外的API访问接口。当该接口部分开发完成,使用者就可以通过这些接口驱动流程的执行,实现查询界面与HuggingFists的整合了。下一篇文章,我们就将介绍如何使用开源的聊天界面与HuggingFists整合,实现完整的RAG落地实现。

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

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

相关文章

GNN 学习笔记

稍微看一下之后备用。 【图神经网络综述】GNN原理&#xff0b;落地应用实现框架全解_gnn实现-CSDN博客 GNN相比CNN最大的区别在于数据结构&#xff0c;CNN一般作用在二维、三维数据里&#xff0c;如图像、表格数据等&#xff0c;可以进行卷积操作。而GNN作用在一个由节点和边…

PaddleSpeech的TTSAndroid编译armv7版本

1.下载docker镜像 docker pull paddlepaddle/paddle-lite:2.0.0_beta2.克隆代码 git clone https://github.com/PaddlePaddle/Paddle-Lite.git3.运行容器 docker run -it --name paddlelite_docker -v $PWD/Paddle-Lite:/Paddle-Lite --nethost paddlepaddle/paddle-lite …

ISP去噪(1)

#灵感# 因为理解的2DNR、3DNR 和当前调试平台标注的2DNR、3DNR 作用有很大差异&#xff0c;所以在网上广撒网&#xff0c;搜集知识。 目前收集出来一个这样的文章&#xff0c;有点像大学生的论文“取其精华&#xff0c;合成糟粕”。------权当一个记录册 目录 运动阈值&…

【华为鸿蒙系统学习】- HarmonyOS4.0开发工具和环境配置问题总结|自学篇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 官方链接 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装教程 &#xff08;…

[GFCTF 2021]文件查看器

文章目录 前置知识可调用对象数组对方法的调用GC回收机制phar修改签名 解题步骤 前置知识 可调用对象数组对方法的调用 我们先来看下面源码 <?phperror_reporting(0);class User{public $username;public $password;public function check(){if($this->username"…

flutter的ListView和SingleChildScrollView有什么区别?他们的使用场景有什么不一样?

文章目录 简介ListViewSingleChildScrollView使用场景的不同 简介 ListView和SingleChildScrollView都是在Flutter中用于处理滚动内容的组件&#xff0c;但它们有一些关键的区别。 ListView 多个子元素&#xff1a; ListView是一个滚动的可滚动组件&#xff0c;通常用于包含多…

接口管理——Swagger

Swagger是一个用于设计、构建和文档化API的工具集。它包括一系列工具&#xff0c;如Swagger Editor&#xff08;用于编辑Swagger规范&#xff09;、Swagger UI&#xff08;用于可视化API文档&#xff09;和Swagger Codegen&#xff08;用于根据API定义生成客户端库、server stu…

Web安全之XXE漏洞原理及实践学习

一、原理&#xff1a; XXE漏洞全称即XML外部实体注入漏洞。 攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件)&#xff0c;导致可加载恶意外部文件&#xff0c;利用file协议造成文件读取、命令执行、内网端口扫描、攻击内网网站等…

OCRmyPDF让你能搜索扫描版PDF文档

什么是 OCRmyPDF &#xff1f; PDF 是存储和交换扫描文档的最佳格式。不幸的是&#xff0c;PDF 可能很难修改。OCRmyPDF 是一个 Python 应用程序和库&#xff0c;可以轻松地将图像处理和 OCR&#xff08;可识别、可搜索的文本&#xff09;应用于现有 PDF&#xff0c;通过向扫描…

奥比中光 Femto Bolt相机ROS配置

机械臂手眼标定详解 作者&#xff1a; Herman Ye Auromix 测试环境&#xff1a; Ubuntu20.04/22.04 、ROS1 Noetic/ROS2 Humble、X86 PC/Jetson Orin、Kinect DK/Femto Bolt 更新日期&#xff1a; 2023/12/12 注1&#xff1a; Auromix 是一个机器人爱好者开源组织。 注2&#…

环境安全之配置管理及配置安全设置指导

一、前言 IT运维过程中&#xff0c;配置的变更和管理是一件非常重要且必要的事&#xff0c;除了一般宏观层面的配置管理&#xff0c;还有应用配置参数的配置优化&#xff0c;本文手机整理常用应用组件配置项配置&#xff0c;尤其安全层面&#xff0c;以提供安全加固指导实践。…

Apache Kafka JNDI注入注入漏洞(CVE-2023-25194)

基于Vulhub搭建的环境 一、漏洞概述 Apache Kafka是一个开源分布式消息队列&#xff0c;Kafka clients是相对应的Java客户端。 在版本3.3.2及以前&#xff0c;Apache Kafka clients中存在一处JNDI注入漏洞。如果攻击者在连接的时候可以控制属性的值为&#xff0c;则可以发起…

Redis与MySQL双写一致性如何保证?

前言 四月份的时候&#xff0c;有位好朋友去美团面试。他说&#xff0c;被问到Redis与MySQL双写一致性如何保证&#xff1f;这道题其实就是在问缓存和数据库在双写场景下&#xff0c;一致性是如何保证的&#xff1f;本文将跟大家一起来探讨如何回答这个问题。 谈谈一致性 一致…

如何使用内网穿透实现iStoreOS软路由R4S公网远程访问局域网电脑桌面

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址…

vue.js纯前端处理如何将后台返回来的csv数据导出成csv文件

需要实现一个下载csv文件的功能&#xff0c;但后台没有对这个下载文件进行处理&#xff0c;而是将csv数据传给前台而已&#xff0c;需要前台做一下处理。 这是按钮的代码&#xff1a; <a> <el-button size"mini" class"custom-confirm" click&quo…

安科瑞出席宁波市建筑电气2023年年会-安科瑞 蒋静

12月1日&#xff0c;宁波市建筑电气2023年年会在宁波市海曙天港禧悦酒店成功举办。作为推动宁波市建筑电气行业技术发展的专业交流会&#xff0c;吸引了建筑电气行业领导、专家、设计师、厂家等300多名代表参会。期间&#xff0c;安科瑞电气股份有限公司携智能楼宇、智慧校园、…

vue3父组件调用子组件el-dialog对话框

vue3父组件调用子组件el-dialog对话框 在写项目的时候&#xff0c;经常要使用父子组件通讯&#xff0c;我已经写了很多篇博客来介绍父子组件通讯了&#xff0c;vue中的父子组件通讯方式有差不多10来种&#xff0c;最常用的就那么一两种&#xff0c;这里我介绍其中我认为最基础…

19、命令模式(Command Pattern,不常用)

命令模式&#xff0c;将一个请求封装为一个对象&#xff08;命令&#xff09;&#xff0c;使发出请求的责任和执行请求的责任分割开&#xff0c;有效降低系统的耦合度。这样两者之间通过命令对象进行沟通&#xff0c;这样方便将命令对象进行储存、传递、调用、增加与管理。命令…

【flutter对抗】blutter使用+ACTF习题

最新的能很好反编译flutter程序的项目 1、安装 git clone https://github.com/worawit/blutter --depth1​ 然后我直接将对应的两个压缩包下载下来&#xff08;通过浏览器手动下载&#xff09; 不再通过python的代码来下载&#xff0c;之前一直卡在这个地方。 如果读者可以…

等保2.0的一些问题

测评机构的主要问题 目前国内的测评机构有199家&#xff0c;测评机构主要分为以下几类: 1)北京地区国字头的测评机构&#xff1a;全国199家测评机构中北京就占了30多家&#xff0c;几乎都是国字头的背景&#xff0c;很多挂着都是行业或者部委的名头&#xff0c;这些测评机构基本…