llama_index中query_engine的response_mode详解

文章目录

        • 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://xiahunao.cn/news/354263.html

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

相关文章

遇见未来,降低职场焦虑——中国人民大学与加拿大女王大学金融硕士来助力

身在职场的你有感到一丝丝的焦虑吗?偶尔的小焦虑可以作为我们工作中的动力,时刻提醒我们保持奋进。预见未来才能遇见未来,随着社会经济不断发展,没有什么是一成不变的。处于职场上升期的我们更要懂得未雨绸缪,增加自身…

多种工厂模式的运用

文章目录 多种工厂模式的运用一、简单工厂模式(非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 代…

EBU6304 Software Engineering 知识点总结_5 项目管理_上

Software architecture 功能需求和软件架构关系紧密,非功能需求是软件架构的选择结果(好的架构运行效率高之类的)。可以以表格或图的形式,比如UML图。 设计难以更改。敏捷开发的早期阶段就是设计系统架构。 好处: …

OGL(教程16)——基础贴图映射

原文地址:http://ogldev.atspace.co.uk/www/tutorial16/tutorial16.html 背景知识: 贴图的映射的意思是应用任何类型的图到3D模型的多个面上。这个图叫做纹理,它可以是任何东西。如砖头、树叶、贫瘠的土地,使用这些贴图增加场景的…

【UE4】官方课程笔记

【UE4】官方课程笔记 Blueprint Project Config project-specific settings Content content folder Intermidiate 可删除,暂时性文件 Saved 一旦删除不可恢复的文件 DDC DRIVE DATA CACHE C Project .sln文件 可删除,再次打开时recreated Sourc…

shader graph_在Shader Graph中使用表面梯度框架进行法线贴图合成

shader graph A recent Unity Labs paper introduces a new framework for blending normal maps that is easy and intuitive for both technical artists and graphics engineers. This approach overcomes several limitations of traditional methods.

OpenGL学习笔记(四)-光照-材质-光照贴图

参考网址:LearnOpenGL 中文版 哔哩哔哩教程 第二章 光照 2.1 颜色 现实生活中人眼看到某一物体的颜色,是它所反射的颜色。如将白光照在红色的玩具上,玩具会吸收白光中除了红色以外的所有子颜色,不被吸收的红色光被反射到我们的…

三维建模贴图技巧

作者:关宇 #一、概述 整个三维项目中建模制作为核心环节,决定了整个项目的框架基础。在制作的时候参考数据尤为重要决定了模型的精度。 一个完整的三维模型包括白模和贴图,白模决定了模型的外形结构,而贴图赋予色彩和细节。 个人…

提升树叶渲染性能

树的渲染的大部分消耗都是花在树叶上,为了是树叶看起来很茂密,美术一般会加很多叶子的三角形,但是三角形太多的话会让vs压力很大,因为树叶的动画都是在vs里完成的,因此大多游戏都采用的是Leaf Card也就是Billboard Lea…

【Unity Shader】树叶晃动效果原理及实现

1 树叶晃动原理 在模型空间下,对顶点进行X轴和Y轴上的偏移。 1.1 方法 通过计算顶点与Y轴单位向量的点积求得stage1。通过计算顶点与X轴单位向量的点积,加上时间分量_Time.y,求其正弦值stage2。将stage1/stage2与向量(0.001, 0, 0.001)相乘…

blender 2.8制作面片树叶的shading node设置

1. 创建Pricipled BSDF材质,并设置材质Settings的Blend Mode为Alpha Blend模式! 2. 在shading窗口内设置节点: 添加下列节点 Texture Coordinate Mapping Image Texture Image Texture Transparent BSDF Principled BSDF Mix Shader Material Output…

【UE4 Material 101学习笔记】 :Lec08/10/11/12 视差贴图的应用/布料着色/体积冰效果/树叶摇动

Lec08 视差贴图 原理 LearnOpenGL视差贴图 1. 使用高度图偏移UV 未使用高度贴图偏移UV时 使用之后,表面不平坦产生的阴影会更为明显一些。 当角度较大时,失真比较明显。 2. 视差遮蔽映射(Parallax Occlusion Mapping) 可弥…

UE风格化Day19-树叶材质

材质蓝图的基础技巧 补充一些材质蓝图的基础技巧,虽然比较基础,但是刚开始学的时候完全没有教程专门提到这个: 材质的管理一般分为:材质函数、材质、材质实例 首先网格体一般挂的材质就是用材质实例,当然也可以直接挂…

Quixel megascans模型材质贴图合集包

Quixel megascans是一个在线高分辨率扫描模型和贴图库,一致的PBR校准的表面,植被,和三维扫描模型,还包括用于管理的桌面应用、混合和输出你的扫描数据的程序。它的产品已经与游戏和电影工作室合作。 quixel megascans可以帮助您创…

自动化测试Junit

目录 Junit5注解TestDisabledBeforeAll、AfterAll、BeforeEach、AfterEach 参数化单参数多参数CSV获取参数方法获取参数 测试用例执行顺序断言 assert断言相等断言不相等断言为空断言不为空 测试套件 自动化测试项目1. 熟悉项目2. 针对核心流程设计手工测试用例3. 将手工测试用…

解释PBR纹理贴图(texture-maps)

纹理贴图,不管你是学习sp绘制纹理,还是利用渲染器创造艺术作品,接触到PBR流程,总要面对各种贴图。我在学习的时候,有时候搞得懂,有时候糊里糊涂,我想还是要做个笔记的,好记性不如烂笔…

PBR贴图基础知识

PBR贴图基础知识 一,基础知识二,PBR贴图类型传统次世代方式PBR次世代方式1,金属度粗糙度流程---Base ColorMetallicRoughness2,反射度光滑度流程---Diffuse/AlbedospecularGlossiness/Smoothness3,通用贴图类型法线贴图…

UE4 Material 101学习笔记——08-12 凹凸和视差贴图/纹理压缩/布料/体积冰/摇曳树叶

UE4 Material 101学习笔记——08-12 凹凸和视差贴图/纹理压缩/布料/体积冰/摇曳树叶 Lec08 凹凸和视差贴图 Bump Offset and Parallax Occlusion MappingLec09 纹理压缩与设置 Texture Compression and SettingsLec10 布料着色器 Cloth Shading10.1 了解布料10.2 布料shader Le…

技术美术个人笔记(十四)——Houdini程序化树木

前言:关于大地形美术资产制作部分的houdini程序化树木部分,原houdini内置有Labs Quick Basic Trees节点,以下步骤均基于此节点优化魔改; 效果预览: tip:其中树叶贴图及地形颜色变化通过在材质中对贴图采样…

CSS3+js绘制3D圣诞树

最近大家都在用代码写圣诞树,我也跟个风吧! 主要技术: 1.CSS3的3D变换 2.DOM动态添加节点 开发环境:vscode 目录 一.引入 二、基本知识 1.CSS3的3D变换 (1).空间直角坐标系 (2).transform详解 (3).transform-style 2.DOM节点…