第 12 期:Chatflow 专题 — 多轮对话工作流

更新于 2026/4/6

Chatflow vs Workflow

graph TB
    subgraph "Workflow (单次执行)"
        W1[Start] --> W2[处理] --> W3[End]
    end
    
    subgraph "Chatflow (多轮对话)"
        C1[用户消息] --> C2[Memory 加载历史]
        C2 --> C3[处理 + 上下文]
        C3 --> C4[Answer 回复]
        C4 -.->|下一轮| C1
    end
特性 Workflow Chatflow
触发方式 单次调用 对话消息
会话记忆 ✅ 内置 Memory
系统变量 4个 7个 (含会话级)
适用场景 数据处理管线 聊天机器人、客服

Chatflow 独有系统变量

# Workflow 共有
sys.user_id        # 用户标识
sys.app_id         # 应用 ID
sys.workflow_id    # 工作流 ID  
sys.workflow_run_id # 本次运行 ID

# Chatflow 独有
sys.conversation_id  # 会话 ID (多轮对话核心)
sys.dialogue_count   # 当前对话轮次 (从 1 开始)
sys.timestamp        # 当前时间戳

Memory 节点配置

sequenceDiagram
    participant User as 用户
    participant Memory as Memory 管理器
    participant LLM as LLM 节点
    
    User->>Memory: 新消息 "如何部署?"
    Memory->>Memory: 加载最近 N 轮历史
    Memory->>LLM: [历史] + [新消息]
    LLM->>User: "你可以使用 Docker..."
    Memory->>Memory: 保存本轮到 Memory
    
    User->>Memory: "那 Kubernetes 呢?"
    Memory->>Memory: 加载含上一轮的历史
    Memory->>LLM: [包含 Docker 讨论的历史] + "那 Kubernetes 呢?"
    LLM->>User: "除了 Docker,你也可以用 Helm Chart..."

Memory 窗口策略

# 滑动窗口: 保留最近 N 轮
memory_config = {
    "window_size": 10,          # 保留最近 10 轮
    "max_token_limit": 4000,    # Token 上限
    "strategy": "sliding_window"
}

# 当历史超出 Token 限制时,自动截断最早的对话

实战:智能导购 Chatflow

graph TB
    Msg[用户消息] --> QC[Question Classifier]
    QC -->|商品查询| KB[Knowledge Retrieval: 商品库]
    QC -->|价格咨询| HTTP[HTTP: 价格API]
    QC -->|售后服务| LLM1[LLM: 售后话术]
    QC -->|闲聊| LLM2[LLM: 友好对话]
    
    KB --> LLM3[LLM: 生成推荐]
    HTTP --> LLM3
    
    LLM1 --> Answer[Answer 回复]
    LLM2 --> Answer
    LLM3 --> Answer

Answer 节点配置

# Answer 节点支持 Markdown 格式化输出
"""
根据您的需求,为您推荐以下商品:

{{#llm_3.text#}}

💡 **温馨提示**: 
- 当前对话轮次: {{#sys.dialogue_count#}}
- 如需更多帮助,请随时提问!
"""