跳转到内容

响应模式

目前,我们支持以下选项:

  • refine: 创建并优化 答案,通过依次处理每个检索到的文本片段。 这会对每个节点/检索到的片段进行一次独立的LLM调用。

    详情:第一个数据块通过text_qa_template提示词用于查询。随后将答案与下一个数据块(以及原始问题)通过refine_template提示词用于另一个查询。依此循环直至所有数据块解析完成。

    如果一个文本块过大无法放入窗口(考虑到提示词的大小),则会使用TokenTextSplitter进行分割 (允许文本块之间存在部分重叠),这些(新生成的)附加文本块将被视为原始文本块集合的一部分 (因此也会通过refine_template进行查询)。

    适合更详细的回答。

  • compact(默认):类似于refine,但会预先压缩(拼接)文本块,从而减少大语言模型的调用次数。

    详细信息:尽可能将检索到的文本块拼接/打包,使其能够容纳在上下文窗口内 (需考虑text_qa_templaterefine_template之间的最大提示尺寸)。 如果文本过长无法放入单个提示中,则按需分割成多个部分 (使用TokenTextSplitter并允许文本块之间存在部分重叠)。

    每个文本部分被视为一个“块”,并发送至 refine 合成器。

    简而言之,它类似于 refine,但减少了LLM调用次数。

  • tree_summarize: 根据需要多次使用 summary_template 提示查询LLM,直到所有连接的块 都被查询完毕,产生多个答案,这些答案本身又作为块在 tree_summarize LLM调用中被递归使用 依此类推,直到只剩下一个块,从而得到唯一的最终答案。

    详细信息:尽可能将文本块拼接以适应上下文窗口,使用summary_template提示, 并在需要时进行分割(再次使用TokenTextSplitter和一定的文本重叠)。然后,对每个生成的块/分割进行 summary_template查询(没有优化查询!)并获取尽可能多的答案。

    如果只有一个答案(因为只有一个数据块),那么这就是最终答案。

    如果存在多个答案,这些答案本身会被视为数据块,并递归发送到 tree_summarize 处理流程(进行拼接/拆分适配/查询)。

    适用于摘要总结目的。

  • simple_summarizesimple_summarize: 将所有文本块截断以适应单个LLM提示。适用于快速摘要目的,但可能因截断而丢失细节。

  • no_text: 仅运行检索器获取本应发送给LLM的节点, 但实际并不发送。随后可通过检查response.source_nodes进行查看。

  • accumulateaccumulate:给定一组文本片段和查询,将查询应用于每个文本片段,同时将响应累积到数组中。返回所有响应的连接字符串。适用于需要对每个文本片段分别运行相同查询的场景。

  • compact_accumulate:与 accumulate 相同,但会对每个LLM提示进行“压缩”处理,类似于 compact,并对每个文本块运行相同的查询。

请参阅响应合成器了解更多信息。