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作用在一个由节点和边…

《每天一个Linux命令》 -- (12) file命令

欢迎阅读《每天一个Linux命令》系列 &#xff01;在本篇文章中&#xff0c;将说明file命令用法。 概念 file命令是Linux系统下的文件类型识别命令&#xff0c;用于识别文件的类型。 命令操作 file命令的语法如下&#xff1a; file [选项] 文件命令详细解释 以下是 file 命…

矩阵的相似标准型2

矩阵的相似标准型2 文章目录 矩阵的相似标准型24.1 方阵的特征矩阵【定义】方阵的特征矩阵【定理】方阵与其特征矩阵的关系【定理】可通过初等变换相互转化的矩阵等价的推广【定义】矩阵相似【定理】等价与相似间的充要关系 4.2 方阵的三种因子【定义】方阵的行列式因子、不变因…

ShellExecute的用法

1、标准用法 ShellExecute函数原型及参数含义如下&#xff1a; function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall; ●hWnd&#xff1a;用于指定父窗口句柄。当函数调用过程出现错误时&#xff0c;它将…

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协议造成文件读取、命令执行、内网端口扫描、攻击内网网站等…

第二百零三回 修改组件风格的另外一种方法

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了WebView组件相关的内容&#xff0c;本章回中将介绍如何在图标旁边添加小红点.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 在实际项目中有时候需要在图标旁边显示小红点&#xff0c;而且小红点内还有数…

云原生 | Docker 和容器技术的核心概念及应用实践

在当今快速发展的软件行业中&#xff0c;Docker 和容器技术已成为必不可少的工具。它们为应用的打包、分发和运行提供了革命性的方法。本文旨在深入解析 Docker 和容器技术的核心概念、工作原理及应用实践&#xff0c;为开发者提供全面的指南和实用示例。 容器技术概述 什么是…

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;则可以发起…

uni-app获取response header响应头(h5/app/小程序三端)

h5、app获取方式&#xff1a;getResponseHeader(key) 示例&#xff1a;参考&#xff1a;HTML5 API Reference // 创建xhr实例&#xff1a; // #ifdef APP-VUE let xhr new plus.net.XMLHttpRequest(); // #endif // #ifdef H5 let xhr new window.XMLHttpRequest(); // #en…

【华为OD题库-088】数字最低位排序-Java

题目 给定一个非空数组(列表)&#xff0c;元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素&#xff0c;相对位置保持不变 当数组元素为负值时&#xff0c;十进制最低位等同于去除符号位后对应十进制值最低位 输入描述 给定一个非空数组…

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

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