Skip to content
LlamaIndex 文档版本 跟随上游 源快照 55fc0a31 更新于 2026-10-15

目前我们支持以下选项:

  • refine:依次遍历每个检索到的文本块来先生成再精修回答。每个 Node/检索块都会单独调用一次 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 提示词,并对每个文本块运行同一个查询。

更多内容见响应合成器。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。