llama_index中query_engine的response_mode详解

这篇具有很好参考价值的文章主要介绍了llama_index中query_engine的response_mode详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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:

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

llama_index中query_engine的response_mode详解

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

2. ResponseMode: generation

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

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

3. ResponseMode: no_text

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

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

4. ResponseMode: simple_summarize (最省token)

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

llama_index中query_engine的response_mode详解
理解:因为只需要进行一次API调用,所以也比较省费用。但是由于提炼过程可能会不精确,所以上下文的丢失情况有时比较严重。

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

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

llama_index中query_engine的response_mode详解
理解:非常适合用于关键词的询问。如果某段文本与提问的关键词无关,则会保留原本的答案,如果有关系,则会进一步的更新回答。

6. ResponseMode: compact (较省token)

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

理解:refine的升级版,可以更加节约token。文章来源地址https://www.toymoban.com/news/detail-489952.html

到了这里,关于llama_index中query_engine的response_mode详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决异常 java.net.URISyntaxException: Illegal character in query at index

    java.net.URISyntaxException 表示你在尝试创建一个 URI 对象时,传递了一个非法的 URI 字符串 这个异常通常是因为 URI 字符串中包含了不合法的字符,比如空格、特殊字符等。在 URI 中,某些字符是需要进行编码的,例如空格会被编码为 %20 。 要解决这个异常,亲测以下几个方法:

    2024年02月05日
    浏览(34)
  • 使用Llama index构建多代理 RAG

    检索增强生成(RAG)已成为增强大型语言模型(LLM)能力的一种强大技术。通过从知识来源中检索相关信息并将其纳入提示,RAG为LLM提供了有用的上下文,以产生基于事实的输出。 但是现有的单代理RAG系统面临着检索效率低下、高延迟和次优提示的挑战。这些问题在限制了真实世

    2024年02月07日
    浏览(27)
  • 探索创新:LLAMA Index - 一个智能数据分析利器

    项目地址:https://gitcode.com/run-llama/llama_index LLAMA Index 是一款强大的数据预处理和分析工具,旨在简化大数据处理过程,帮助数据科学家、分析师及开发者更高效地探索和理解数据。该项目基于Python构建,利用先进的机器学习算法,提供了一套自动化的工作流程,让用户可以轻松

    2024年04月14日
    浏览(31)
  • llama-index调用qwen大模型实现RAG

    llama-index在实现RAG方案的时候多是用的llama等英文大模型,对于国内的诸多模型案例较少,本次将使用qwen大模型实现llama-index的RAG方案。 llamaindex需要预装很多包,这里先把我成功的案例里面的pip包配置发出来,在requirements.txt里面。       llamaindex实现RAG中很关键的一环就是知

    2024年04月09日
    浏览(27)
  • 通过Llama Index实现大模型的SQL生成的三种方法详解

    文中使用了chatglm的llm和embedding modle,利用的智谱的免费token Text2SQL其实就是从文本到SQL,也是NLP中的一种实践,这可以降低用户和数据库交互的门槛,无需懂SQL就可以拿到数据库数据。Text2SQL实现了从自然语言到SQL语言的生成,更加进一步的是直接给出数据中的结果。在开始

    2024年04月14日
    浏览(38)
  • 图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index

    LLM 如火如荼地发展了大半年,各类大模型和相关框架也逐步成型,可被大家应用到业务实际中。在这个过程中,我们可能会遇到一类问题是:现有的哪些数据,如何更好地与 LLM 对接上。像是大家都在用的知识图谱,现在的图谱该如何借助大模型,发挥更大的价值呢? 在本文

    2024年02月15日
    浏览(37)
  • LLaMa 原理+源码——拆解 (KV-Cache, Rotary Positional Embedding, RMS Norm, Grouped Query Attention, SwiGLU)

    Vanilla Transformer 与 LLaMa 的对比:LLaMa与普通的Transformer架构不同的地方,包括采用了 前置 了层归一化(Pre-normalization)并使用 RMSNorm 归一化函数(Normalizing Function)、使用了 旋转位置嵌入(RoPE) 、激活函数由ReLU更换为 SwiGLU ,并且将self-attention改进为 使用KV-Cache的Grouped Quer

    2024年01月25日
    浏览(35)
  • Vue 删除query中个别参数或清除query

    在写项目过程中涉及到一个需求,大概形容一下就是第一次进入会有一个编辑弹窗,如果点击编辑弹窗的保存按钮后,刷新页面,弹窗则不在弹出。

    2024年02月16日
    浏览(30)
  • Elasticsearch 基本使用(五)查询条件匹配方式(query & query_string)

    ES中常用的查询类型往大了分可以分为简单查询,复合查询,聚合查询等; 而复合查询及聚合查询都是基于简单查询的;简单查询里面对条件的匹配方式又分为不同类型。term[s],match,match_all,match_phrase 等等 term 单词查询,在字段的倒排索引(发生分词)或者直接在字段值(

    2024年02月09日
    浏览(37)
  • TensorRT创建Engine并推理engine

    NVIDIA TensorRT是一个高性能的深度学习推理库,专为部署神经网络模型而设计。TensorRT通过优化和高效的内存管理来提高模型的推理速度,从而提高整体应用程序的性能。以下是使用TensorRT创建Engine并进行推理的步骤: 安装TensorRT库: 首先,确保您已经安装了TensorRT库。请访问

    2023年04月14日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包