llamaindex实战-QueryEngine-查询引擎使用概述

概述

查询引擎是一个通用接口,允许您对数据提出问题。 查询引擎接受自然语言查询,并返回丰富的响应。它通常(但并非总是)通过检索器构建在一个或多个索引上。您可以组合多个查询引擎来实现更高级的功能。

注意:如果您想与数据进行对话(多次来回而不是单次问答),请查看ChatEngine相关内容。

使用范式

常规使用
query_engine = index.as_query_engine()
response = query_engine.query("Who is Paul Graham.")

流式输出

流式输出时当大模型有内容时就先输出,然后连续输出,这样可以提升用户体验。

query_engine = index.as_query_engine(streaming=True)
streaming_response = query_engine.query("Who is Paul Graham.")
streaming_response.print_response_stream()

使用流程

开始使用

从索引构建查询引擎:

query_engine = index.as_query_engine()

对您的数据提出问题

response = query_engine.query("Who is Paul Graham?")

配置查询引擎

高层API

您可以通过 1 行代码直接从索引构建和配置查询引擎:

query_engine = index.as_query_engine(response_mode="tree_summarize",verbose=True,
)

响应模式(response_mode)在后面章节说明。

低层次组合API

如果您需要更精细的控制,可以使用层次组合API。具体来说,您将显式构造一个 QueryEngine 对象,而不是调用 index.as_query_engine(...)。

from llama_index.core import VectorStoreIndex, get_response_synthesizer
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
​
# 构建索引
index = VectorStoreIndex.from_documents(documents)
​
# 配置检索器
retriever = VectorIndexRetriever(index=index,similarity_top_k=2,
)
​
# 配置返回器
response_synthesizer = get_response_synthesizer(response_mode="tree_summarize",
)
​
# 组合成查询引擎
query_engine = RetrieverQueryEngine(retriever=retriever,response_synthesizer=response_synthesizer,
)
​
# 通过查询引擎进行查询
response = query_engine.query("What did the author do growing up?")
print(response)

流式响应

要启用流式传输,您只需传入 Streaming=True 标志

query_engine = index.as_query_engine(streaming=True,
)
streaming_response = query_engine.query("What did the author do growing up?",
)
streaming_response.print_response_stream()

响应模式(response_mode)说明

目前,支持以下选项:

  1. refine(完善)响应

通过顺序浏览每个检索到的文本块来创建和完善回答。这会对每个节点/检索到的块(Node/retrieved chunk)进行单独的LLM调用。

详细过程如下:第一个块在使用 text_qa_template 提示词的查询中使用。然后,回答和下一个块(以及原始问题)将在另一个具有refine_template提示词的查询中使用。依此类推,直到解析完所有块。

如果块太大而无法容纳在窗口中(考虑提示词大小),则使用 TokenTextSplitter 对其进行分割(允许块之间有一些文本重叠),(新的)附加块被视为原始块集合的块(因此也可以使用refine_template进行查询)。

该选项,适合更详细的答案。

  1. compact (紧凑)响应

compact响应模式类似于refine,但会预先压缩(拼接)块,从而减少 LLM 调用。

详细过程如下:填充尽可能多的文本(对检索到的数据块进行 拼接/打包),使其适合上下文窗口(考虑text_qa_template和refine_template 的最大提示词size的值)。如果文本太长而无法容纳在一个提示中,则会根据需要将其拆分为多个部分(使用 TokenTextSplitter,从而允许文本块之间存在一些重叠)。

每个文本部分都被视为一个chunk(块),并被发送到refine合成器。 简而言之,它从原理上基本上和refine相同,但 LLM 调用较少。

  1. tree_summarize 响应模式

根据需要多次使用summary_template提示词模板来查询LLM,以便查询所有串联的块,从而产生尽可能多的答案,这些回答本身在使用tree_summarize模板来调用LLM时,递归地被作一个数据块来使用,依此类推,直到只剩下一个块,因此只有一个最终答案。

详细过程如下:使用summary_template提示词模板尽可能多地拼接数据块以适应上下文窗口,并在需要时分割它们(再次使用TokenTextSplitter和一些文本重叠)。然后,根据summary_template查询每个生成的块/分割(没有细化查询!)并获得尽可能多的答案。

如果只有一个答案(因为只有一大块),那么它就是最终答案。

如果有多个答案,这些本身将被视为块并递归发送到 tree_summarize 进程(连接/拆分以适合/查询)。

总的来说,该选项,适合总结目的。

  1. simple_summarize:模式截断所有文本块以适合单个 LLM 提示。适合快速总结,但可能会因截断而丢失细节。

  2. no_text:仅运行检索器来获取本应发送到 LLM 的节点,而不实际发送它们。然后可以通过检查response.source_nodes来检查。

  3. accumulate:给定一组文本块和查询,将查询应用于每个文本块,同时将响应累积到数组中。返回所有响应的串联字符串。适合当您需要对每个文本块单独运行相同的查询时。

  4. compact_accumulate:与accumulate 相同,但会像compact 一样“压缩”每个LLM 提示,并对每个文本块运行相同的查询。

小结

本文说明了查询引擎(QueryEngine)的使用范式,并说明了不同响应模式的实现逻辑。

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

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

相关文章

【maven-5】Maven 项目构建的生命周期:深入理解与应用

1. 生命周期是什么 ​在Maven出现之前,项目构建的生命周期就已经存在,软件开发人员每天都在对项目进行清理,编译,测试及部署。虽然大家都在不停地做构建工作,但公司和公司间,项目和项目间,往往…

LLamafactory API部署与使用异步方式 API 调用优化大模型推理效率

文章目录 背景介绍第三方大模型API 介绍LLamafactory 部署API大模型 API 调用工具类项目开源 背景介绍 第三方大模型API 目前,市面上有许多第三方大模型 API 服务提供商,通过 API 接口向用户提供多样化的服务。这些平台不仅能提供更多类别和类型的模型…

【Python网络爬虫笔记】6- 网络爬虫中的Requests库

一、概述 Requests 是一个用 Python 语言编写的、简洁且功能强大的 HTTP 库。它允许开发者方便地发送各种 HTTP 请求,如 GET、POST、PUT、DELETE 等,并且可以轻松地处理请求的响应。这个库在 Python 生态系统中被广泛使用,无论是简单的网页数…

【AI技术赋能有限元分析应用实践】Abaqus有限元分析到深度学习方法应用全过程——汽车刹车片热力耦合分析

目录 一、项目实现介绍**项目背景****项目目标****项目流程概述****技术融合****项目价值** 二、实现流程**Step 1: 分析问题构建方法,寻找主要分析目标,确定初步目标****Step 2: 使用 Abaqus 完成有限元仿真,后处理并保存数据为 odb 格式***…

【人工智能-科普】深度森林:传统机器学习与深度学习的创新结合

文章目录 深度森林:传统机器学习与深度学习的创新结合一、什么是深度森林?二、深度森林的工作原理1. **特征提取和转换**2. **多层级训练**3. **最终分类**三、深度森林的关键组成部分1. **森林层(Forest Layer)**2. **级联结构(Cascade Structure)**3. **特征增强(Feat…

Netty的内存池机制怎样设计的?

大家好,我是锋哥。今天分享关于【Netty的内存池机制怎样设计的?】面试题。希望对大家有帮助; Netty的内存池机制怎样设计的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 的内存池机制设计是为了提高性能&…

Postman设置接口关联,实现参数化

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 postman设置接口关联 在实际的接口测试中,后一个接口经常需要用到前一个接口返回的结果, 从而让后一个接口能正常执行,这…

七牛云成功保存但无法显示和访问{“error“:“download token not specified“}

在使用七牛云存储图片时,前端通过链接访问图片时遇到错误: {"error":"download token not specified"} 具体表现为: 后端通过 access_key 和 secret_key 生成了上传和下载的 Token。前端将域名与 res.key 拼接后生成图…

《实战OpenCV系列》专栏介绍

简介 本专栏由浅入深,详细介绍了使用OpenCV进行图像/视频处理的各方面知识,包括:图像显示、图像的数学运算、图像的裁剪与拼接、图像的像素操作、几何变换、直方图、图像滤波、色彩空间转换、边缘检测、形态学操作、模板匹配、视频处理、图像…

常用函数的使用错题汇总

#include <iostream> #include <fstream> #include <string>int main() {std::ifstream fin("example.txt"); // 创建 ifstream 对象并打开文件// 检查文件是否成功打开if (!fin) {std::cerr << "Error opening file!" << s…

曲面单值化定理

曲面单值化定理&#xff08;Uniformization Theorem&#xff09;是复分析、几何和拓扑学中的一个重要结果。它为紧致黎曼曲面提供了标准化的几何结构&#xff0c;是研究复几何和代数几何的基础。以下是对曲面单值化定理的详细介绍以及其应用场景。 曲面单值化定理的陈述 基本版…

【初阶数据结构和算法】二叉树顺序结构---堆的定义与实现(附源码)

文章目录 一、堆的定义与结构二、堆的实现1.堆的初始化和销毁堆的初始化堆的销毁 2.向上调整算法和入堆向上调整算法入堆 3.向下调整算法和出堆顶数据向下调整算法出堆 4.堆的有效数据个数和判空堆的有效数据个数堆的判空 5.取堆顶数据 三、堆的源码 一、堆的定义与结构 本篇内…

进程的知识

1. 冯诺依曼体系结构 输入设备&#xff1a;键盘&#xff0c;话筒&#xff0c;网卡&#xff0c;磁盘&#xff08;外存&#xff09; 外设&#xff1a; 输出设备&#xff1a;显示器&#xff0c;磁盘&#xff0c;网卡&#xff0c;打印机 CPU运算器控制器 存储器&#xff1a…

创建HTTPS网站

每天&#xff0c;我们都会听到网络上发生身份盗窃和数据侵权的案例&#xff0c;这导致用户对自己访问的网站更加怀疑。他们开始更加了解自己将个人信息放在哪里以及信任哪些类型的网站。了解如何使网站使用HTTPS变得比以往任何时候都更加重要。 解读缩略词&#xff1a;HTTP与HT…

pytest+allure生成报告显示loading和404

pytestallure执行测试脚本后&#xff0c;通常会在电脑的磁盘上建立一个临时文件夹&#xff0c;里面存放allure测试报告&#xff0c;但是这个测试报告index.html文件单独去打开&#xff0c;却显示loading和404, 这个时候就要用一些办法来解决这个报告显示的问题了。 用命令产生…

如何使用ST7789展现图片?[ESP--4]

本节我们继续ESP和ST 7789的话题&#xff0c;这节课我们来学学如何展示图片,话不多说&#xff0c;先上效果 好&#xff0c;教程开始~前情提要&#xff0c;要看懂这篇&#xff0c;建议搭配楼主的前两期文章 使用ESP32驱动LCD-ST7789屏幕[ESP–2] 加速你的LCD-ST7789屏幕&#xf…

南京仁品耳鼻喉专科医院:12月启动公益义诊月

专业医疗资源送至“家门口”&#xff01;南京仁品耳鼻喉专科医院启动公益义诊月 随着2024年即将步入尾声&#xff0c;南京仁品耳鼻喉医院为回馈社会&#xff0c;提升公众健康福祉&#xff0c;将于12月隆重推出“三甲专家公益义诊月”活动。此次活动旨在通过汇聚众多耳鼻喉领域…

数据结构—排序算法(python实现)

数据结构 脑图排序算法1.冒泡排序1.1步骤1.2python代码实现冒泡&#xff1a;1.3分析冒泡 2.插入排序2.1步骤2.2python代码实现插入排序&#xff1a;2.3分析插入 3.选择排序3.1步骤3.2python代码实现&#xff1a;3.3分析选择 4.快速排序4.1步骤4.2python代码实现&#xff1a;4.3…

Pinia管理用户数据

Pinia 是 Vue3 的新一代状态管理库&#xff0c;提供了更简单的 API 和更好的 TypeScript 支持。它作为 Vuex 的替代方案&#xff0c;成为了管理 Vue 应用状态的首选。Pinia 是 Vue3 的新一代状态管理库。与 Vuex 相比&#xff0c;Pinia 提供了更简单的 API、更好的性能&#xf…

远程协助软件Todesk免费版有什么限制

大名鼎鼎的远程todesk也开始出限制了&#xff0c;国内远程协助一直是向日葵一家独大&#xff0c;todesk起来以后慢慢占领了部分市场&#xff0c;随用户越来越多&#xff0c;其服务器也开始不堪重负了&#xff0c;于2024年的6月发了公告&#xff0c;出告了限制发表的措施具体如下…