第 8 期:条件分支与循环节点
条件分支 (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 --> EndIF/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
}