Dify 操作教程:工作流编排 & Chat 对话编排

19 阅读8分钟

适用对象:Dify 新手或需要标准化操作流程的开发者
前置条件:已注册 Dify 账号,登录对应环境(测试/生产)


一、Dify 核心概念速览

概念说明类比
应用(App)你创建的一个完整项目一个项目工程
Chatflow(对话流)对话型应用的工作流编排客服机器人的"大脑"
Workflow(工作流)非对话型的自动化流程数据处理管道
节点(Node)流程中的一个处理步骤流水线上的一个工位
提示词(Prompt)给 LLM 的指令文本你给 AI 的操作手册
变量(Variable)节点间传递的数据工位之间传递的零件
知识库(Knowledge)RAG 检索的文档集合AI 的外挂参考资料

二、Chatflow 对话编排(一步步搭一个聊天机器人)

2.1 创建 Chatflow 应用

2.2 画布界面说明

进入后会看到默认画布:

 ┌──────────────────────────────────────────┐
 │  [开始]                                  │
 │  sys.files  sys.query  sys.conversation  │
 │      │                                   │
 │      ▼                                   │
 │  ┌──────────┐                            │
 │  │  LLM 节点 │  ← 默认已有一个 LLM 节点    │
 │  └────┬─────┘                            │
 │       │                                   │
 │       ▼                                   │
 │  ┌──────────┐                            │
 │  │   结束    │                            │
 │  └──────────┘                            │
 └──────────────────────────────────────────┘

系统变量说明:

变量名含义用途
sys.query用户当前输入的文字传给 LLM 的问题
sys.files用户上传的文件文档分析场景
sys.conversation_id对话唯一 ID会话追踪
sys.user_id当前用户 ID多用户隔离

2.3 配置 LLM 节点(核心)

双击 LLM 节点,进入配置面板:

第一步:选择模型

环境模型选择
测试环境任意可用模型(用于调试)
生产环境qwen(正式发布用)

第二步:编写提示词(Prompt)——重点

提示词分为两部分:

┌─────────────────────────────────────┐
│  SYSTEM(系统提示词)                  │
│  ─────────────────────────────────  │
│  定义 AI 的角色、行为规则、输出格式     │
│  每次对话都会携带,不会丢失             │
├─────────────────────────────────────┤
│  USER(用户提示词)                    │
│  ─────────────────────────────────  │
│  把 {{变量}} 填入,构造实际提问内容     │
│  每轮对话会动态变化                    │
└─────────────────────────────────────┘

SYSTEM 提示词模板示例:

你是xx的智能助手,负责解答公司内部系统操作问题。

遵守以下规则:
1. 回答简洁,优先用表格呈现信息
2. 遇到不确定的问题,明确说"我不确定",不要编造
3. 涉及权限操作,提醒用户走工单流程
4. 回答语言:用户用中文问就用中文答

USER 提示词模板示例:

用户问题:{{#sys.query#}}

已知信息:
- 用户部门:{{#context.department#}}
- 当前系统:AOPS

请根据以上信息回答用户的问题。

变量引用语法:{{#节点名.变量名#}}{{#sys.query#}}

第三步:配置对话设置

参数建议值说明
温度(Temperature)0.3~0.7越低越严谨,越高越有创意
Top P0.8~0.9配合温度使用,一般不动
最大 Token2048~4096控制单次回答长度
上下文窗口3~10 轮携带多少历史对话给模型

2.4 添加知识库(可选)

如果想让 AI 回答公司内部文档的内容:

1. 左侧节点面板 → 拖入「知识检索」节点
2. 连线:开始 → 知识检索 → LLM → 结束
3. 配置知识检索节点:
   - 选择已上传的知识库
   - 检索模式:向量检索(推荐)
   - Top K:3~5 条(返回最相关的几条)
4. 在 LLM 的 USER 提示词里引用检索结果:

   参考资料:
   {{#知识检索节点名.result#}}

   用户问题:{{#sys.query#}}
   请基于参考资料回答。

2.5 添加条件分支

                 ┌──→ LLM_A(处理A类问题)
开始 → 分类节点 ──┼──→ LLM_B(处理B类问题)
                 └──→ LLM_C(兜底回答)

配置方法:

1. 拖入「条件分支」节点
2. 设置判断条件,例如:
   - 条件1:{{#sys.query#}} 包含 "发版"  → 走发版回答分支
   - 条件2:{{#sys.query#}} 包含 "权限"  → 走权限回答分支
   - 否则                                  → 走通用回答分支
3. 每个分支连一个对应的 LLM 节点

2.6 测试与调试

右上角「预览」按钮 → 右侧弹出对话窗口
输入测试问题 → 查看每一步节点的输入/输出

调试技巧:

  • 点击已运行的节点,查看该节点的输入和输出数据
  • 出错的节点会标红,点开看错误信息
  • 修改提示词后重新预览即可生效,无需发布

三、Workflow 工作流编排(自动化流程)

3.1 何时用 Workflow 而不是 Chatflow

场景用 Chatflow用 Workflow
多轮对话
一次性处理(提取、分类、翻译)
定时批量任务
需要用户交互确认

3.2 创建 Workflow 应用

3.3 常用节点速查

节点类型功能典型场景
开始接收外部输入参数定义 API 入参
LLM调用大模型文本生成、信息提取
知识检索查知识库RAG 问答
代码执行 Python/JS数据格式转换、计算
条件分支if-else 判断按条件走不同路径
变量赋值设置/修改变量拼装输出数据
HTTP 请求调用外部 API获取天气、查数据库
模板转换把数据套入文本模板格式化输出
结束返回最终结果定义 API 出参

3.4 实操示例:信息提取工作流

目标:用户输入一段文字,提取其中的姓名、日期、金额,结构化输出 JSON。

            ┌─────────────────────────────┐
            │  开始                        │
            │  参数: text (用户输入文本)     │
            └──────────┬──────────────────┘
                       │
                       ▼
            ┌─────────────────────────────┐
            │  LLM 节点                    │
            │  ───────────────────────    │
            │  SYSTEM:                      │
            │  从用户输入中提取结构化信息     │
            │  输出严格 JSON 格式           │
            │  ───────────────────────    │
            │  USER:                        │
            │  文本:{{#开始.text#}}         │
            │  请提取:姓名、日期、金额       │
            │  输出 JSON                    │
            └──────────┬──────────────────┘
                       │
                       ▼
            ┌─────────────────────────────┐
            │  代码节点                     │
            │  ───────────────────────    │
            │  解析 LLM 返回的 JSON 字符串   │
            │  提取三个字段分别输出          │
            │  输出:name, date, amount     │
            └──────────┬──────────────────┘
                       │
                       ▼
            ┌─────────────────────────────┐
            │  结束                        │
            │  输出: name, date, amount    │
            └─────────────────────────────┘

代码节点示例(Python):

import json

def main(llm_output: str) -> dict:
    """解析 LLM 返回的 JSON 字符串,提取字段"""
    # 清理可能的 markdown 代码块标记
    text = llm_output.strip()
    if text.startswith("```"):
        text = text.split("\n", 1)[1]
        if text.endswith("```"):
            text = text[:-3]
    
    data = json.loads(text.strip())
    return {
        "name": data.get("姓名", ""),
        "date": data.get("日期", ""),
        "amount": data.get("金额", "")
    }

3.5 LLM 节点提示词写法(通用公式)

SYSTEM:
你是 [角色定位],专门负责 [任务描述]。
遵守以下规则:
1. [规则1]
2. [规则2]
3. [规则3]
输出格式:[JSON / Markdown表格 / 纯文本]

---

USER:
[输入数据变量]:{{#上一节点.变量名#}}
[补充说明,如不用则删除此行]

请开始处理。

四、提示词(Prompt)编写速查表

4.1 SYSTEM 提示词必含要素

要素示例缺了会怎样
角色“你是xx软件的OA助手”AI 定位模糊,容易跑偏
规则“不确定就说不知道,不要编造”AI 可能胡说八道
输出格式“用 Markdown 表格回答”输出格式不可控
边界“只回答公司内部系统问题”用户问无关话题 AI 也会答

4.2 USER 提示词必含要素

要素示例
输入数据用户输入:{{#开始.query#}}
上下文部门:{{#节点.部门#}}
指令请提取关键信息

4.3 常用提示词模板

模板A — 客服问答

你是[业务名称]的智能客服。

规则:
1. 答案来自下方参考资料,不在参考里的说"请咨询人工"
2. 用中文回答,语气友好
3. 涉及投诉、退款,引导至人工客服

参考资料:
{{#知识检索.result#}}

用户问题:{{#sys.query#}}

模板B — 数据提取

从输入文本中提取结构化信息。

规则:
1. 只提取明确出现的信息
2. 提取不到填 null,不要编造
3. 严格输出 JSON 格式,不要有额外文字

输入文本:
{{#开始.text#}}

输出格式:
{"姓名": "...", "日期": "...", "金额": "..."}

模板C — 文本总结

将输入内容总结为 3 个要点。

规则:
1. 每个要点不超过 50 字
2. 保留关键数字和人名
3. 按重要性排序

输入内容:
{{#开始.content#}}

五、变量传递与引用(必会)

5.1 变量引用语法

{{#节点名称.变量名#}}

5.2 常用系统变量

变量含义
{{#sys.query#}}用户输入文本
{{#sys.files#}}用户上传的文件列表
{{#sys.user_id#}}用户ID

5.3 节点默认输出

LLM 节点执行后默认输出三个变量:

变量含义
textLLM 返回的完整文本
usageToken 用量统计
finish_reason结束原因(stop / length)

引用示例:{{#LLM节点.text#}}

5.4 节点间传递示例

开始(input) → LLM → 代码解析 → 结束(output)
                      ↑
            引用:{{#LLM.text#}}

六、测试 → 发布完整流程

┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│ 1.编排    │ → │ 2.测试    │ → │ 3.备份    │ → │ 4.发布    │
│ 拖拽节点   │    │ 右上角预览  │    │ 导出DSL   │    │ 点发布按钮 │
│ 写提示词   │    │ 逐节点验证  │    │ 保存提示词 │    │ 选生产模型 │
└──────────┘    └──────────┘    └──────────┘    └──────────┘

发布步骤

回退操作

如发版后发现问题:
1. 找到备份的 txt 提示词
2. 打开应用 → 进入编辑模式
3. 还原提示词内容
4. 重新发布(覆盖当前版本)

七、常见问题排查

问题原因解决
LLM 输出格式不对提示词未约束格式SYSTEM 里加"严格输出 JSON"
知识检索不生效检索节点没连到 LLM连线 + USER提示词引用结果
变量引用报错节点名拼写错误检查 {{#节点名#}} 大小写
发布后无法访问模型未切换为生产模型编辑 → 换生产模型 → 重新发布
字段变更后旧流程不生效字段名不匹配新建流程编排,不要改旧版

八、操作检查清单

编排完成后确认:

  • 每个 LLM 节点都写了 SYSTEM 提示词
  • USER 提示词正确引用了上游变量
  • 知识检索节点(如有)已连入 LLM 且结果被引用
  • 条件分支覆盖了所有情况(含"否则"兜底)
  • 测试环境预览所有分支均通过
  • 发布前提示词已另存为 txt 备份
  • DSL 已导出备份
  • 生产模型已切换(qwen-32-122b)
  • 发布后实际调用一次确认可用

文档生成日期:2026-07-01