响应模式#
目前,我们支持以下选项:
refine
:**_创建和精炼_** 答案,通过依次处理每个检索到的文本块。这将对每个节点/检索到的块进行一次单独的 LLM 调用。
详细信息: 第一个块用于使用 text_qa_template
提示进行查询。然后将答案和下一个块(以及原始问题)用于使用 refine_template
提示的另一个查询。以此类推,直到所有块都被解析。
如果一个块太大而无法放入窗口(考虑到提示大小),则使用 TokenTextSplitter
进行分割(允许块之间有一些文本重叠),并且将(新的)额外块视为原始块集合的块(因此也使用 refine_template
进行查询)。
适用于提供更详细的答案。
compact
(默认):类似于refine
,但在处理之前先**_压缩_**(连接)块,从而减少 LLM 调用次数。
详细信息: 将尽可能多的文本(从检索到的块连接/打包而来)填充到上下文窗口中(考虑到 text_qa_template
和 refine_template
之间的最大提示大小)。如果文本太长无法放入一个提示中,则根据需要分割成多个部分(使用 TokenTextSplitter
,因此允许文本块之间有一些重叠)。
每个文本部分都被视为一个“块”,并发送到 refine
合成器。
简而言之,它类似于 refine
,但 LLM 调用次数更少。
tree_summarize
:根据需要多次使用summary_template
提示查询 LLM,以便查询所有连接的块,从而生成多个答案,这些答案本身被递归地用作tree_summarize
LLM 调用中的块,以此类推,直到只剩下一个块,从而只有一个最终答案。
详细信息: 尽可能连接块以适应使用 summary_template
提示的上下文窗口,并在需要时进行分割(再次使用 TokenTextSplitter
并允许一些文本重叠)。然后,针对 summary_template
查询每个结果块/分割(没有 **_精炼_** 查询!),并获得多个答案。
如果只有一个答案(因为只有一个块),那么这就是最终答案。
如果答案多于一个,则它们本身被视为块,并递归地发送到 tree_summarize
过程(连接/分割以适应/查询)。
适用于摘要目的。
simple_summarize
:截断所有文本块以适应单个 LLM 提示。适用于快速摘要目的,但可能因截断而丢失细节。no_text
:只运行检索器来获取本应发送给 LLM 的节点,而不实际发送它们。然后可以通过检查response.source_nodes
来查看结果。accumulate
:给定一组文本块和查询,对每个文本块应用该查询,同时将响应累积到一个数组中。返回所有响应的连接字符串。适用于需要对每个文本块单独运行相同查询的场景。compact_accumulate
:与 accumulate 相同,但会像compact
一样“压缩”每个 LLM 提示,并对每个文本块运行相同的查询。
请参阅 响应合成器 了解更多信息。