第 8 期:条件分支与循环节点

更新于 2026/4/6

条件分支 (IF/ELSE)

graph TB
    Start[用户提问] --> Classifier[Question Classifier]
    Classifier --> IF{意图判断}
    IF -->|技术问题| Tech[Tech LLM - 深度技术回答]
    IF -->|闲聊| Chat[Chat LLM - 轻松对话]
    IF -->|投诉| Complaint[Complaint Handler - 工单系统]
    Tech --> End[End]
    Chat --> End
    Complaint --> End

IF/ELSE 条件表达式

# 支持的比较运算符
# ==, !=, >, <, >=, <=
# contains, not contains
# starts with, ends with
# is empty, is not empty

# 示例: 根据分类结果路由
# 条件 1: {{#classifier.class_name#}} == "technical"
# 条件 2: {{#classifier.class_name#}} == "complaint"
# ELSE: 走默认闲聊路线

循环节点 (Iterator)

Iterator 节点可以遍历数组中的每个元素,对每个元素执行相同的子工作流。

graph TB
    Start[输入: 文章列表] --> Code1[Code: 分割为数组]
    Code1 --> Iterator[Iterator 循环]
    
    subgraph "Iterator 内部 (每篇文章执行)"
        LLM[LLM: 生成摘要]
        Score[Code: 评分]
        LLM --> Score
    end
    
    Iterator --> Agg[Variable Aggregator: 汇总结果]
    Agg --> End[End: 输出所有摘要]

代码示例:批量处理

# Code 节点:将文本按段落分割为数组
def main(raw_text: str) -> dict:
    paragraphs = [p.strip() for p in raw_text.split("\n\n") if p.strip()]
    return {
        "items": paragraphs,  # Iterator 需要一个数组
        "total": len(paragraphs)
    }

并行执行 (Parallel)

当多个分支互不依赖时,使用 Parallel 节点能显著加速:

graph TB
    Start[用户输入关键词] --> Parallel[Parallel 并行]
    
    subgraph "并行分支"
        B1[Google 搜索]
        B2[知识库检索]
        B3[数据库查询]
    end
    
    Parallel --> B1
    Parallel --> B2
    Parallel --> B3
    
    B1 --> Merge[Variable Aggregator]
    B2 --> Merge
    B3 --> Merge
    Merge --> LLM[LLM: 综合分析]
    LLM --> End[End]

嵌套组合实例

# 实际场景:批量翻译 + 质量检查
# 1. Iterator 遍历每个段落
# 2. 每个段落内部:
#    a. LLM 翻译
#    b. IF/ELSE 检查是否为空
#    c. 如果非空,LLM 进行质量评分
#    d. 如果评分 < 0.7,触发重新翻译

def quality_check(translation: str, score: float) -> dict:
    return {
        "passed": score >= 0.7,
        "needs_retry": score < 0.7,
        "translation": translation,
        "score": score
    }