llama_index中query_engine的response_mode详解

news2024/11/24 7:45:58

文章目录

        • 0. 前言
        • 1. ResponseMode: tree_summarize (总结摘要-最优)
        • 2. ResponseMode: generation
        • 3. ResponseMode: no_text
        • 4. ResponseMode: simple_summarize (最省token)
        • 5. ResponseMode: refine (基于关键词询问-最优)
        • 6. ResponseMode: compact (较省token)

0. 前言

在使用llama_index进行内容提炼、文章总结时,我们可以通过设置不同的ResponseMode来控制生成响应的结果。

在上篇“使用langchain及llama_index实现基于文档(长文本)的相似查询与询问”博客中,我们给出了如下代码(部分):

llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name=model_name,max_tokens=1800))
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)
query_str = "美女蛇的故事是什么?"
response_mode = "compact"
"""
    REFINE = "refine"
    COMPACT = "compact"
    SIMPLE_SUMMARIZE = "simple_summarize"
    TREE_SUMMARIZE = "tree_summarize"
    GENERATION = "generation"
    NO_TEXT = "no_text"
"""
documents = fileToDocuments("./data")
index = GPTListIndex.from_documents(documents,service_context=service_context)
query_engine = index.as_query_engine(
    response_mode=response_mode
)
response = query_engine.query(query_str)
print(response)

其中列举了6种response_mode:

在这里插入图片描述
我们也可以通过导入如下代码来观察其中的值:ResponseMode.xx

from llama_index.indices.response.type import ResponseMode

在研究源码及实践后,本篇将介绍这几种不同的response_mode的意义。

在代码中,我们可以找到相应的响应器responseBuilder,其源码位置为llama_index/indices/response/response_builder.py。下面我们将介绍几种常用的ResponseMode及其意义。

1. ResponseMode: tree_summarize (总结摘要-最优)

当设置ResponseMode为tree_summarize时,ChatGPT会对每一段文本进行最大长度的分割,并进行连续的读取和询问。这种模式的优点是可以保证对文本的完整理解和回答,但如果没有正确处理分割段落的情况,可能会导致错误的生成结果。我们可以通过下面这幅图来理解它的执行流程:

在这里插入图片描述

理解:选择这种模式比较适合做文章总结,但是不适合做基于关键词的查询或询问。

2. ResponseMode: generation

当设置ResponseMode为generation时,生成的回答不依赖于文档的内容,只基于提供的问题进行生成。这种模式适用于纯粹的问题回答场景,不考虑文档的影响。

理解:与文档割裂,纯粹只是普通问答。

3. ResponseMode: no_text

当设置ResponseMode为no_text时,生成的回答中不包含任何内容,仅作为占位符使用。

理解:目前暂时未发现其他用途。

4. ResponseMode: simple_summarize (最省token)

当设置ResponseMode为simple_summarize时,ChatGPT会截取每段文本的相关句子(通常是第一句),并进行提炼生成回答。这种模式适用于对结果要求不高的场景。我们可以通过下面这幅图来理解它的执行流程:

在这里插入图片描述
理解:因为只需要进行一次API调用,所以也比较省费用。但是由于提炼过程可能会不精确,所以上下文的丢失情况有时比较严重。

5. ResponseMode: refine (基于关键词询问-最优)

当设置ResponseMode为refine时,如果只有一个文本块(text_chunk),则会正常生成回答。但如果存在多个文本块,则会以类似轮询的方式迭代生成回答。这种模式可以对多个文本块进行迭代式的回答生成,逐步完善回答内容。我们可以通过下面这幅图来理解它的执行流程:

在这里插入图片描述
理解:非常适合用于关键词的询问。如果某段文本与提问的关键词无关,则会保留原本的答案,如果有关系,则会进一步的更新回答。

6. ResponseMode: compact (较省token)

当设置ResponseMode为compact时,生成的回答会将多个文本块(text_chunk)压缩到设定的最大长度,并生成一次回答。然后,根据后续内容对以往的答案进行改进和完善(即进行多次迭代)。这种模式实际上是Compact And Refine的方式。

理解:refine的升级版,可以更加节约token。

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

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

相关文章

ROS:坐标管理系统

目录 一、机器人中的坐标变换二、TF功能包2.2TF功能包简介2.2TF坐标变换实现2.3TF案例 三、小海龟跟随实验3.1打开小程序3.2查看当前的TF树3.3坐标相对位置关系可视化1(tf_echo)3.4坐标相对位置关系可视化2(rviz) 一、机器人中的坐…

二、电压源、电流源、受控源

点我回到目录 目录 理想电压源 理想电流源 受控源 电流源做功问题 电压源做功问题 理想电压源 •定义:两端电压保持定值或一定的时间函数,且电压值与流过它的电流i无关 •特点:理想电压源两端的电压由本身决定,与外电路无关…

ChatGPT2论文解读《Language Models are Unsupervised Multitask Learners》(2019)

论文总结 以下是我阅读完整篇论文做的个人总结,包含了ChatGPT-2文章的主要内容,可以仅看【论文总结】章节。 数据集 自制了一个网页爬虫,被抓取的网页部分来自于社交平台,这些网页由人工进行过滤。最终生成WebText数据集&#…

多种工厂模式的运用

文章目录 多种工厂模式的运用一、简单工厂模式(非23种设计模式)1.1 结构2.2 实现2.2.1 简单工厂类图2.2.2 代码2.2.3 优缺点 二、静态工厂模式(非23种设计模式)3.1 代码 三、工厂模式3.1 结构 3.2 实现3.2.1 工厂模式类图3.2.2 代…

Rust教程初识

Rust 教程 Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月。Rust 的编译器是在 MIT Licens…

bmp图片怎么转jpg格式?思路提供

BMP和JPG是两种常见的图片格式。BMP文件相对较大,无损压缩,而JPG文件则相对较小,有损压缩。当我们需要在保持图片质量的同时减小文件大小时,我们可以将BMP文件转换为JPG文件。在本文中,我们将介绍如何将BMP文件转换为J…

短视频矩阵源码技术开发

短视频矩阵是一种常见的视频编码标准,它通过将视频分成多个小块并对每个小块进行压缩来实现高效的视频传输。在本文中,我们将介绍短视频矩阵的原理和实现,并提供示例代码。 $where_time array(); // 时间 $where_time[] array(name>fbr…

第5章:SpringMVC的视图

一、SpringMVC的视图 SpringMVC中的视图是View接口,视图的作用渲染数据,将模型的Model中的数据展现给用户SpringMVC视图种类很多,默认有转发视图和重定向视图当工程引入jstl依赖,转发视图自动转换为JstlView若使用视图技术是Thym…

【新版】系统架构设计师 - 新老教材对比分析

个人总结,仅供参考,欢迎加好友一起讨论 文章目录 新老教材比较新版教材章节分析 新老教材比较 提示:请自行购买并浏览新版系统架构设计师教材 原教材:2009年出版,共21章,572页。新教材:2022年出…

紧急防勒索病毒的防御方案

一、适用目标(校园网、企业网,windows系列的操作系统): 所有在校园内运行windows系统的电脑,并非只感染服务器操作系统,单机照样感染。会将你电脑中的所有文件全部加密,部分已感染案例有2个共同…

Yolov8轻量级:Next-vit,用于现实工业场景的下一代视觉 Transformer

1.Next-vit介绍 论文:https://arxiv.org/pdf/2207.05501.pdf 由于复杂的注意力机制和模型设计,大多数现有的视觉 Transformer(ViT)在现实的工业部署场景中不能像卷积神经网络(CNN)那样高效地执行。这就带来了一个问题:视觉神经网络能否像 CNN 一样快速推断并像 ViT 一样…

DVPP媒体数据处理图片解码问题案例

DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括图像编解码、视频编解码、图像抠图缩放等。 本期就分享几个关于DVPP图片解码问题…

Web的基本漏洞--越权漏洞

目录 一、越权漏洞介绍 1.越权漏洞的原理 2.越权漏洞的分类 3.越权漏洞产生的原因 一、越权漏洞介绍 越权漏洞指的是应用在检查授权时存在纰漏,可以让攻击者获得低权限用户账户后,利用一些方式绕过权限检查,可以访问或者操作其他用户或者…

如何选择振动传感器?实现设备健康监测和预测性维护的第一步

随着工业设备的日益复杂和关键性的增加,设备健康监测和预测性维护成为保障生产效率和设备可靠性的关键要素。而振动传感器作为常用的监测工具,在设备健康监测中扮演着重要角色。 图.设备监测(iStock) 本文将介绍如何选择振动传感…

聊聊公司技术上的奇葩规定——计算机使用

首先说明下公司的技术架构。 MySQL PHP Java,纯互联网应用,Docker 容器部署微服务在 AWS 上面。 数据上没有过多敏感性,不涉及到很多敏感数据,身份识别信息通常使用的是第三方平台,我们本地不存储用户身份信息。 电…

跟着LearnOpenGL学习6--变换

文章目录 一、前言二、向量2.1、向量与标量运算2.2、向量取反2.3、向量加减2.4、长度2.5、向量相乘 三、矩阵3.1、矩阵的加减3.2、矩阵的数乘3.3、矩阵相乘 四、矩阵与向量相乘4.1、单位矩阵4.2、缩放4.3、位移4.4、旋转4.5、矩阵的组合 五、变换实战5.1、GLM配置5.2、GLM测试5…

学习HTTP2

这是有关HTTP最后一部分内容的学习啦~今天一起来学习HTTP/2! HTTP2 HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接…

javaweb session与cookie

Cookie Cookie是本地的存储数据,是键值对 注意一定要使用resp.addCookie才能返回cookie cookie修改 修改的话也是调用addCookie,对相同key的进行修改,作用于set-cookie响应头。 可以新建cookie,add进去,也可以在用户传…

投出去的简历石沉大海,1个月只有2个面试邀约,这正常吗?

我一介大专生,干了2年的点工,想着干这么长时间测试了,怎么也要涨薪冲击个12K了吧 去年我跟老板提了几次,好像都不怎么搭理我 今年金三银四,涨薪那边还是没着落,而我已经急不可耐了,既然你不给我…

28 # commander 的用法

node 和前端的区别 前端里面有 BOM 和 DOM,服务端没有,也没有 window服务端里面有 global 全局对象(浏览器也有 global,只不过访问属性的时候都是通过 window 来代理,没有直接访问 global,也不能直接访问 …