20 LlamaIndex中的响应合成器

LlamaIndex中的响应合成器

概念

响应合成器是使用用户查询和给定的一组文本块从LLM生成响应的组件。响应合成器的输出是一个响应对象。

这种方法可以有多种形式,从简单的迭代文本块到复杂的构建树。主要思想是通过LLM简化跨数据生成响应的过程。

在查询引擎中使用时,响应合成器在从检索器检索节点之后,以及运行任何节点后处理器之后使用。

提示

对响应合成器在RAG工作流中的位置感到困惑?阅读高级概念

使用模式

入门

使用response_mode配置查询引擎的响应合成器:

from llama_index.core.data_structs import Node
from llama_index.core.schema import NodeWithScore
from llama_index.core import get_response_synthesizer

response_synthesizer = get_response_synthesizer(response_mode="compact")

response = response_synthesizer.synthesize(
    "query text", nodes=[NodeWithScore(node=Node(text="text"), score=1.0), ...]
)

或者,更常见的是,在创建索引后在查询引擎中使用:

query_engine = index.as_query_engine(response_synthesizer=response_synthesizer)
response = query_engine.query("query_text")

提示

要了解如何构建索引,请参见索引

配置响应模式

响应合成器通常通过response_mode关键字参数设置指定。

LlamaIndex中已经实现了几种响应合成器:

  • refine:通过依次遍历每个检索到的文本块来创建和提炼答案。这会对每个节点/检索到的块进行单独的LLM调用。
    详细信息:第一个块使用text_qa_template提示进行查询。然后,答案和下一个块(以及原始问题)在另一个查询中使用refine_template提示。依此类推,直到所有块都被解析。
    如果一个块太大而无法适应窗口(考虑提示大小),则使用TokenTextSplitter进行拆分(允许块之间有一些文本重叠),并且(新)附加块被视为原始块集合的块(因此也使用refine_template进行查询)。
    适用于更详细的答案。

  • compact(默认):类似于refine,但事先压缩(连接)块,从而减少LLM调用。
    详细信息:尽可能多地填充文本(从检索到的块中连接/打包),使其适应上下文窗口(考虑text_qa_templaterefine_template之间的最大提示大小)。如果文本太长而无法适应一个提示,则根据需要拆分为多个部分(使用TokenTextSplitter,因此允许块之间有一些重叠)。
    每个文本部分被视为一个“块”,并发送给refine合成器。
    简而言之,它类似于refine,但LLM调用更少。

  • tree_summarize:使用summary_template提示查询LLM,次数根据需要多次,以便所有连接的块都被查询,从而得到多个答案,这些答案本身递归地用作tree_summarize LLM调用的块,依此类推,直到只剩下一个块,因此只有一个最终答案。
    详细信息:尽可能多地连接块,以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值