在一些多轮推理、多跳问答、多轮检索等任务中,单次执行流程往往不足以获得最终答案。此时就需要使用 循环结构(loop),以重复执行某些模块,逐步迭代信息、强化生成结果。

示例:多轮子问题生成与检索流程

以下是一个典型的多轮 RAG 推理流程,每一轮都包含:
  1. 基于当前问题或上下文执行检索;
  2. 基于检索结果生成新的子问题;
  3. 调用大模型进行生成。
我们设置这一过程最多执行 3 轮,最后再生成最终答案。
pipeline:
  - benchmark.get_data
  - retriever.retriever_init
  - loop:
      times: 3  # 循环执行的最大次数       
      steps: # 定义单次循环内的pipeline
        - retriever.retriever_search
        - prompt.generate_subquery
        - generation.generate
        
  - prompt.generate_final_answer
  - generation.generate

说明

  • loop:声明一个循环块,表示后续步骤会被重复执行;
  • times:设置循环的最大轮数(如上述示例中为3次);
  • steps:定义每一轮中需要执行的工具调用序列,写法与串行结构完全一致。
当前循环的跳出逻辑默认基于固定次数(即执行 times 次后跳出)。如果你希望根据模型生成结果动态控制是否退出循环,可与 分支结构(branch)与 Router Server 联合使用,详见下一节内容。