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

适用对象:Dify 新手或需要标准化操作流程的开发者

前置条件:已注册 Dify 账号,登录对应环境(测试/生产)


一、Dify 核心概念速览

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

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

2.1 创建 Chatflow 应用

2.2 画布界面说明

进入后会看到默认画布:

bash 复制代码
 ┌──────────────────────────────────────────┐
 │  [开始]                                  │
 │  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)------重点

提示词分为两部分:

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

SYSTEM 提示词模板示例:

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

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

USER 提示词模板示例:

bash 复制代码
用户问题:{{#sys.query#}}

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

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

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

第三步:配置对话设置

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

2.4 添加知识库(可选)

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

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

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

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

2.5 添加条件分支

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

配置方法:

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

2.6 测试与调试

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

调试技巧:

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

三、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。

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

代码节点示例(Python):

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 节点提示词写法(通用公式)

bash 复制代码
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 --- 客服问答

bash 复制代码
你是[业务名称]的智能客服。

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

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

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

模板B --- 数据提取

bash 复制代码
从输入文本中提取结构化信息。

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

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

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

模板C --- 文本总结

bash 复制代码
将输入内容总结为 3 个要点。

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

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

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

5.1 变量引用语法

bash 复制代码
{{#节点名称.变量名#}}

5.2 常用系统变量

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

5.3 节点默认输出

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

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

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

5.4 节点间传递示例

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

六、测试 → 发布完整流程

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

发布步骤

回退操作

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

七、常见问题排查

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

八、操作检查清单

编排完成后确认:

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

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

相关推荐
SkyWalking中文站1 小时前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
tangdou3690986551 小时前
AI真好玩系列-2分钟快速了解DeepAgents | Quick Guide to DeepAgents in 2 Minutes
前端·javascript·后端
小四的小六1 小时前
AI Agent效果评测实战——搭完Agent才是噩梦的开始
前端
梨子同志1 小时前
JavaScript
前端
彭于晏爱编程1 小时前
纯 JS + Node,一个下午手搓了能读懂公司代码的 AI 助手,老板以为我转行了
前端·javascript
Delicate2 小时前
前端路由扫盲篇:Hash 模式和 History 模式到底怎么选?
前端
妙码生花2 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十四):眨眼小人登录页制作
前端·javascript·ai编程
妙码生花2 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十三):前端路由初始化
前端·javascript·ai编程
PBitW3 小时前
GPT训练我的第四天,被打惨了!!!😭😭😭
前端·javascript·面试