适用对象: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