好的,老铁!收到你的终极指令!十亿美元我不敢想(你可别吓我!),但帮你把这本 《Dify 究极实战宝典(V2.0 巨量加料整合版)》 完整、系统地整理出来,让你能直接复制、轻松给别人讲明白,这事儿老金必须给你办得明明白白、妥妥帖帖!
这次是 All-in 版本,整合了咱们之前聊的所有内容,特别是把第五章的 工作流节点 和第六章的 插件/工具 掰开了、揉碎了,力求达到“书”的详尽程度。准备好接收这波知识海啸了吗?深呼吸,复制粘贴键准备!
《Dify 究极实战宝典(V2.0 巨量加料整合版):从入门到精通,工作流节点与插件工具全解析》
作者:肝帝附体的 AI 老炮儿 - 老金
(注意:本教程基于 Dify 1.x 版本编写,界面和功能可能随 Dify 快速迭代而变化,请始终以你使用的版本和官方最新文档 docs.dify.ai 为准!)
前言:这次,是真正能当书看的“一本满足”版!
老铁们!经历了 V1.0 的初探和 V2.0 的加料预告,老金我痛定思痛,深刻反省——之前的教程还是太“客气”了!对于 Dify 这么一个潜力无限的 AI 应用开发平台,不拿出点“压箱底”的干货、不把那些核心的工作流节点和插件工具讲透,怎么对得起各位求知若渴的眼神?
所以,这本 V2.0 巨量加料整合版 来了!这不仅仅是内容的简单叠加,而是老金我重新梳理逻辑,把 Dify 从入门的概念到高阶的实战技巧,特别是大家最关心的节点 (Nodes) 和工具 (Tools/Plugins) 部分,进行了超详细的拆解和补充。力求做到:
-
体系完整:从第一章到最后一章,逻辑连贯,覆盖全面。
-
细节拉满:对核心功能、配置选项、注意事项进行深度解析。
-
实战导向:提供丰富的案例和“避坑”提示。
-
复制无忧:整合为单一文本块,方便你直接取用。
-
风格依旧:还是那个唠叨但用心的老金,技术讲解力求通俗易懂。
这本“书”的目标,就是让你彻底搞懂 Dify,不仅能自己上手开发 AI 应用,更能把 Dify 的强大之处给别人讲得明明白白!准备好了吗?让我们一起,再次踏上 Dify 的探索之旅!
第一章:Dify 世界观 - 平台定位与核心概念(夯实基础)
在正式开干之前,咱们得先把 Dify 的“世界观”搞清楚,知道它是啥、有啥用、核心概念都是啥意思。基础不牢,地动山摇!
1.1 Dify 是个啥玩意儿?重新认识你的 AI 应用开发平台
-
官方定义(浓缩版):Dify 是一个开源的、领先的 LLM 应用开发平台,旨在让开发者(甚至非开发者)能基于各种大型语言模型(如 GPT、Claude、文心一言等),快速构建、部署和运营强大的、生产级的 AI 原生应用。
-
老金大白话:想象一下你要开个高科技的“智能餐厅”。大模型 (LLM) 是你的顶级大厨,能做各种菜(回答问题、写文章、分析数据)。但光有大厨不行啊,你还需要前厅(应用界面)、菜单(Prompt 模板)、服务流程(Workflow)、能上网查菜谱或打电话订食材的服务员(Agent + 工具)、以及一本记录秘方和顾客喜好的手册(知识库 RAG)。Dify 就帮你把这个餐厅的后台管理系统、服务流程设计器、员工(Agent)培训系统、知识库管理等一整套东西都准备好了,让你只需要专注于“请哪个大厨”(选模型)、“设计什么特色菜”(定义应用逻辑和 Prompt),就能快速开张,甚至还能持续优化运营!
-
核心价值:
-
降低门槛:可视化操作,让不懂算法、甚至少懂代码的人也能开发 AI 应用。
-
提升效率:封装了与 LLM 交互、数据处理、流程编排等复杂工作,开发速度快。
-
功能强大:支持从简单问答到复杂 Agent、自动化 Workflow 的各种应用形态。
-
灵活开放:支持接入多种 LLM,允许自定义工具,支持私有化部署。
-
1.2 云端 SaaS vs. 私有化部署:在哪安家?
Dify 提供两种主要的“安家”方式:
-
云端 SaaS 版本 (
dify.ai官网):-
优点:注册即用,免安装、免维护、自动更新。有免费套餐,上手极快。
-
缺点:数据存储在 Dify 云服务器(官方有安全承诺),免费版有额度限制,定制性相对较低。
-
推荐人群:新手、个人开发者、快速验证想法、对数据控制要求不极致的用户。 (咱们教程主要基于这个版本讲解)
-
-
私有化部署 (Self-hosted):
-
优点:数据完全由自己掌控,无平台限制(只受限于你的服务器性能),可深度定制源码。
-
缺点:需要自行准备服务器(或云主机),按照官方文档(通常基于 Docker)进行安装、配置、升级维护,有一定技术门槛和运维成本。
-
推荐人群:企业用户、对数据安全/合规有严格要求、有技术运维能力、需要深度定制的用户。
-
入口:查阅
docs.dify.ai的部署指南。
-
老金建议:先玩 SaaS 版! 零成本体验核心功能,等你玩溜了、需求明确了,再考虑私有化也不迟。
1.3 核心概念全家桶(V2.0 强化版)
这些词儿会贯穿整个教程,必须搞懂!
-
LLM (Large Language Model):大型语言模型。AI 应用的“大脑”,如 GPT-4, Claude 3, 文心一言 4.0, Llama 3 等。Dify 让你能方便地接入和切换这些“大脑”。
-
Prompt (提示词):你给 LLM 下达的指令或输入。写好 Prompt 是门艺术,直接决定输出质量。包括:
-
System Prompt (系统提示词):为整个应用或 Agent 设定的“人设”、规则、全局指令。
-
User Input (用户输入):用户每次输入的具体问题或文本。
-
Variables (变量):Prompt 模板中用
{{变量名}}表示的占位符,允许动态插入数据。 -
History (对话历史):在对话型应用中,之前的交互记录,作为上下文提供给 LLM。
-
Context (上下文):广义上指所有提供给 LLM 的背景信息,狭义上在 Dify 中常指 RAG 检索到的知识片段。
-
-
Dataset (数据集 / Knowledge Base / 知识库):你上传的私有文档(PDF, TXT, DOCX, Markdown, 网页等)集合,是 RAG 的基础。Dify 会对其进行分块 (Chunking) 和向量化 (Embedding) 处理。
-
RAG (Retrieval-Augmented Generation):检索增强生成。AI 在回答前,先从你指定的 Dataset 中检索 (Retrieve) 相关信息,然后结合这些信息生成 (Generate) 答案。让 AI 能基于你的私有数据回答问题。
-
Embedding: 将文本(如知识库的块、用户问题)转换为高维向量 (Vector) 的过程。向量相似度可以代表语义相似度。
-
Vector Database (向量数据库):专门存储和高效查询向量的数据库,是 RAG 的底层支撑。Dify 可能内置或允许连接外部向量数据库。
-
Tools / Plugins (工具 / 插件):(重点!) 预定义的功能单元,让 Agent 或 Workflow 能够执行超越文本处理的操作,如网页搜索、计算、调用 API、生成图片等。分为内置工具和自定义工具。
-
Agent (智能体):(重点!) 一种应用类型,能基于 LLM 的推理 (Reasoning) 能力,自主规划 (Planning) 步骤,并调用工具 (Action) 来完成复杂目标。更像一个“智能助理”。
-
Workflow (工作流):(超重点!) 一种应用类型,允许你通过可视化拖拽的方式,将不同的节点 (Nodes) 连接起来,构建一个自动化的、步骤明确的任务处理流水线。更像一个“自动化工程师”。
-
Nodes (节点):(超重点!) Workflow 的基本组成单元,每个节点执行一个特定操作(如调用 LLM、查知识库、调工具、做判断等)。我们将在【第五章】详细拆解。
-
Application Types (应用类型):你在 Dify 创建应用时选择的起点,决定了应用的基础形态和配置重心:
-
对话型 (Chatbot / Conversational):侧重多轮对话、上下文记忆。常结合 RAG。适合客服、问答、助手。
-
文本生成型 (Text Generation):侧重单轮输入、一次性生成目标文本。适合写作、摘要、翻译、格式转换。
-
Agent 型 (Agent):侧重自主规划、工具调用。适合需要与外部交互、完成复杂任务的场景。
-
Workflow 型 (Workflow):侧重流程编排、自动化。适合步骤确定、逻辑复杂的业务场景。
-
1.4 四大应用类型,到底选哪个?(帮你理清思路)
-
需要能连续聊天,能记住之前说过啥,最好还能查我的资料回答? -> 对话型 (Chatbot) + RAG
-
只想让 AI 帮我写东西、改稿子、做总结,给它原料就行? -> 文本生成型 (Text Generation)
-
希望 AI 不仅能说,还能“动手”——上网查东西、算个数、操作别的软件(通过 API)? -> Agent 型 (Agent)
-
有一个固定的处理流程,需要好几个步骤串起来自动完成(比如:收到邮件 -> 判断类型 -> 如果是 A 类就查知识库回复 -> 如果是 B 类就调 API 创建工单)? -> Workflow 型 (Workflow)
老金再啰嗦一句:这几种类型不是绝对孤立的,高级玩法常常是它们的组合。比如 Workflow 里可以调用 Agent,Agent 的 Prompt 可以设计得像文本生成模板。但理解它们的侧重点,有助于你一开始就选对方向。
世界观建立完毕!下一章,咱们从最常见也最基础的对话型应用 (Chatbot) 入手,把它和 RAG 的配合玩到炉火纯青!
第二章:基础对话大师 - Chatbot 与 RAG 深度应用
万丈高楼平地起,咱们先从 Dify 最常见的应用形态——对话型应用 (Chatbot) 开始。目标是让你不仅能快速搭一个出来,还能让它聊得更专业、更懂你(通过 RAG)!
2.1 创建你的第一个聊天伙伴(基础流程回顾与深化)
-
入口:登录 Dify -> 左侧导航栏“工作室 (Studio)”或“应用 (Apps)” -> 点击“创建新应用” -> 选择“对话型 (Chatbot)”或类似名称。
-
基本信息:给你的 AI 起个名(如“产品知识小助手”)、选个图标、写个简介。
-
核心配置界面:这是“灵魂注入”的地方!
-
① 提示词 (Prompt Engineering):
-
系统提示词 (System Prompt):【极其关键!】 这是 AI 的“出厂设置”和“行为准则”。务必精心设计!包含:
-
角色定位 (Role):它是什么身份?(e.g., "你是一个专业的 XX 品牌客服代表")
-
能力范围 (Capabilities):它能做什么?(e.g., "专注于回答关于 A、B、C 系列产品的问题")
-
行为准则 (Rules):应该遵循哪些原则?(e.g., "语气友好、专业、耐心。优先使用知识库回答。如果知识库没有信息,请礼貌告知并建议联系人工服务。")
-
知识边界 (Knowledge Boundary):明确它不应该回答哪些问题。(e.g., "严禁回答与本品牌产品无关的问题、涉及个人隐私或非法内容的问题。")
-
示例:
# 角色 你是一位 Dify 平台的技术支持专家,昵称“小迪”。 # 能力与规则 - 你的任务是根据用户问题,优先在提供的 Dify 官方文档知识库中查找答案并进行解答。 - 回答应准确、简洁、专业,并尽可能引用知识库来源(如果系统支持)。 - 如果知识库中没有明确答案,可以结合你对 Dify 的通用理解尝试回答,但需注明这是基于通用知识而非文档。 - 如果完全无法回答,请礼貌地表示歉意,并建议用户查阅官方文档或联系社区。 - 语气应保持友好和耐心。 - 避免回答与 Dify 无关的技术问题。
-
-
对话开场白 (Opening Statement):(可选) 设置一个自动发送的欢迎语,可以包含变量(如
{{user_name}},如果 Start 节点定义了)。还可以附带一些下一步问题建议 (Suggested Questions) 按钮,引导用户提问。 -
变量 (Variables):(可选) 如果你希望在 Prompt 或开场白中使用动态信息(如用户名、用户级别),可以在这里定义输入变量。
-
-
② 知识库 (Knowledge / Context):【RAG 核心配置】
-
点击“添加知识库”,选择你预先在“数据集”菜单下创建好的知识库(可以选多个)。
-
检索模式 (Retrieval Mode):
-
仅知识库回答 (Knowledge-only):AI 被强制只能根据检索到的知识块回答。如果没检索到,就说不知道。适合需要严格基于文档的场景(如法律条款问答)。
-
对话 + 知识库 (Conversation + Knowledge):(常用) AI 会综合考虑对话上下文、用户问题以及检索到的知识块来生成回答。更自然流畅,但有时可能在知识库信息不足时“自由发挥”。
-
仅对话 (Conversation-only):完全不使用知识库,变成一个纯粹的通用聊天机器人(吃模型的通用知识)。
-
-
检索策略 (Retrieval Strategy):
-
Top K:设置召回最相关的 K 个文本块。K 值太小可能漏掉信息,太大可能引入噪音并增加 Token 成本。通常从 3-5 开始尝试。 -
得分阈值 (Score Threshold):(可选) 只保留相关性得分高于某个阈值的块。可以过滤掉不太相关的结果。 -
重排模型 (Rerank Model):(如果 Dify 支持且配置了) 可以启用 Rerank 模型对 Top K 结果进行二次排序,提高最相关块排在前面的概率,进一步提升 RAG 质量(但会增加一点点延迟和可能的成本)。
-
-
-
③ 模型与参数 (Model & Parameters):
-
模型选择 (Model):选择驱动这个应用的 LLM。需要预先在“设置”->“模型提供商”配置好 API Key。考虑能力、成本、速度的平衡。对于需要较强理解和遵循指令能力的客服场景,可能需要 GPT-3.5 Turbo 或更好的模型。 -
参数调整:-
温度 (Temperature):控制随机性。对于客服、问答等需要准确性的场景,建议设置较低值(如 0.2-0.5)。 -
最大 Token (Max Tokens):限制单次回答的最大长度,防止失控和浪费。 -
其他高级参数(Top P, Presence Penalty, Frequency Penalty)可以根据需要调整,通常保持默认。
-
-
-
④ 对话历史 (Chat History):
- 配置 AI 能“记住”多少轮之前的对话。默认通常是 3-5 轮。记忆越长,上下文理解越好,但消耗的输入 Token 也越多。根据应用场景决定。
-
⑤ 输出内容配置 (Output Moderation):(部分 Dify 版本可能有)
-
可以配置内容审查,拒绝回答敏感或不当问题。
-
可以配置引用来源 (Citation),让 AI 在回答时注明信息来自知识库的哪个片段(如果 RAG 模式和模型支持)。
-
-
2.2 RAG 深度应用:让你的 AI 成为“领域专家”
RAG 是让 Chatbot 从“通才”变“专才”的关键。用好 RAG,需要关注数据源和配置细节:
-
源头活水:高质量的知识库是根本
-
内容为王:上传的文档内容必须是准确、清晰、结构化的。避免扫描件、格式混乱、内容过时的文档。
-
格式支持:确认 Dify 支持的文档格式(常见有 PDF, TXT, Markdown, DOCX, XLSX, CSV, HTML 等)。对于特殊格式,可能需要预处理成标准格式再上传。
-
持续更新:知识是会过期的!建立定期审查和更新知识库内容的机制。
-
-
精雕细琢:数据集处理与配置
-
创建数据集:在“数据集”菜单下创建,起个有意义的名字。
-
上传文档:支持本地上传、URL 同步(Dify 会尝试抓取)。
-
处理过程:上传后,Dify 会进行预处理、分块、向量化。等待状态变为“可用”。
-
分块策略 (Chunking Strategy):
-
原理:把长文档切成适合 LLM 处理和向量检索的小块。
-
配置选项:通常可以设置分块模式(如按段落、按固定长度、智能分块)、块大小 (Chunk Size)(每块包含多少字符或 Token)、块重叠 (Chunk Overlap)(相邻块之间重叠多少内容,有助于保持语义连续性)。
-
调整建议:默认通常够用。如果发现答案被切断或相关内容分散在不同块导致检索不到,可以尝试调整块大小或增加重叠。Dify 通常提供预览分块效果的功能。
-
-
向量化 (Embedding):
-
模型选择:Dify 会使用一个 Embedding 模型将文本块转换为向量。你可能可以在数据集设置或全局设置中选择不同的 Embedding 模型(如 OpenAI text-embedding-ada-002, 或其他支持的模型)。不同模型对不同语言、领域的向量化效果可能不同,切换模型需要重新处理数据集。
-
API Key:某些 Embedding 模型(如 OpenAI 的)需要配置 API Key。
-
-
-
索引模式 (Indexing Mode):(部分 Dify 版本支持)
-
高质量 (High Quality):通常使用向量索引,适合语义搜索。
-
经济模式 (Economic):可能使用全文索引或较低成本的向量模型,成本低,但语义理解能力可能稍弱。根据需求选择。
-
-
-
效果验证与优化:让 RAG 指哪打哪
-
命中测试 (Hit Testing):在数据集管理界面,通常可以直接输入问题,测试能召回哪些文本块,检查召回结果的相关性、排序。这是调试 RAG 的第一步。
-
应用预览调试:在 Chatbot 应用的预览窗口进行实际对话测试。
-
观察引用来源 (Citation):如果配置了引用,看 AI 的回答是否正确引用了知识库内容。
-
回答不准确/找不到?
-
先查命中测试:是不是压根没召回相关块?-> 优化文档内容、分块策略、或换 Embedding 模型。
-
召回了但回答不对? -> 可能是 Prompt 问题(没指示好如何使用知识)、LLM 理解问题、或召回的块包含了干扰信息(调整 Top K, 用 Rerank)。
-
问题本身模糊? -> 尝试换更清晰的问法。
-
-
-
持续迭代:根据测试结果和用户反馈,不断优化知识库内容、RAG 配置和应用 Prompt。
-
2.3 对话型应用案例:7x24 小时产品 FAQ 智能客服
-
目标:创建一个能自动回答用户关于某 SaaS 软件常见使用问题的客服机器人。
-
步骤:
-
收集资料:整理软件的帮助文档、用户手册、官网 FAQ 页面、过往客服工单中的常见问题及解答。
-
创建数据集:在 Dify 中创建名为“SaaS 产品知识库”的数据集。将整理好的文档(最好是 Markdown 或结构化文本)上传。选择合适的 Embedding 模型(如支持中文的)。等待处理完成。
-
创建 Chatbot 应用:命名为“SaaS 智能客服助手”。
-
配置 Prompt:编写系统提示词,定义角色为“SaaS 产品专家”,强调基于知识库回答,语气友好耐心,对于无法回答的问题引导用户提交工单。
-
配置 RAG:添加“SaaS 产品知识库”数据集,选择“对话 + 知识库”模式,设置 Top K=3。
-
配置模型:选择如 GPT-3.5 Turbo 或 Claude 3 Haiku 等性价比较高的模型。温度设为 0.3。
-
预览与测试:模拟用户提问各种常见问题(功能用法、报错解决、价格咨询等),检查回答的准确性、相关性、是否引用来源。测试边界情况(模糊问题、知识库没有的问题)。
-
部署:通过嵌入代码 (JS Widget) 的方式,将聊天窗口嵌入到 SaaS 产品的帮助中心页面右下角。
-
运营与迭代:定期查看后台日志和用户反馈,发现知识库盲点并补充文档,根据 AI 回答不佳的情况优化 Prompt 或 RAG 配置。
-
小结:对话型应用是 Dify 的基础,而 RAG 则是让它真正变得“有用”的翅膀。掌握好 Prompt 设计、知识库构建和 RAG 调优,你就能打造出各种实用的智能问答系统。
接下来,咱们换个频道,看看 Dify 的另一种常见形态——专门负责“埋头创作”的文本生成应用,如何助你成为内容魔法师!
第三章:内容魔法师 - 玩转文本生成应用
有时候,我们不追求和 AI 唠嗑,而是想让它成为一个高效的“内容生产者”。比如,写个营销文案、总结一篇长文、翻译一段话、甚至根据你的要求写首诗。这时,文本生成应用 (Text Generation App) 就该登场了!
3.1 认识文本生成应用:专注输出的“单任务处理器”
-
核心特点:
-
单轮交互 (Single-turn):通常是你提供一次性的输入(可能包含多个结构化信息),它就生成一个完整的输出。不像 Chatbot 那样有来有回、记忆上下文。
-
输入驱动 (Input-driven):输出结果高度依赖你输入的变量 (Variables) 和 Prompt 模板。
-
结构化输出 (Structured Output):非常适合生成格式固定的内容(如 JSON、Markdown 表格、邮件格式等)。
-
-
适用场景:任何需要“生成一段特定文本”的任务都可以考虑它!
-
内容创作:广告语、社交媒体帖子、博客草稿、产品描述、邮件模板…
-
文本处理:文章摘要、会议纪要总结、信息提取、关键词生成…
-
语言翻译:中英互译、多语言翻译…
-
格式转换:将要点列表转换成报告段落、将非结构化文本提取成 JSON 数据…
-
代码辅助:根据自然语言描述生成代码片段、解释代码…
-
创意启发:头脑风暴标题、生成故事大纲、创作诗歌…
-
3.2 创建与配置:打造你的“内容生产线”
-
入口:工作室 -> 创建新应用 -> 选择“文本生成 (Text Generation)”或类似名称。
-
核心配置界面:
-
① 提示词 (Prompt):【设计的核心!】
-
结构至上:你需要清晰地定义任务指令 (Instruction)、输入变量 (Input Variables),以及期望的输出格式 (Output Format)。
-
输入变量 (Input Variables):【关键输入!】 这是用户与这个应用交互的主要方式。你需要预先定义好所有需要用户提供的信息点。点击
+ 添加输入变量来定义:-
变量名 (Variable Name):英文,如topic,keywords,target_audience,text_to_translate,meeting_notes。 -
标签 (Label):在 Web App 界面显示的中文名。 -
类型 (Type):文本 (短文本/长文本)、数字、选择器等。 -
是否必需 (Required)。 -
默认值 (Default Value)(可选)。
-
-
Prompt 模板示例 (以“社交媒体帖子生成器”为例):
# 任务指令 请根据以下信息,为目标平台撰写一条吸引人的社交媒体帖子。 # 输入信息 * 推广主题:{{topic}} * 核心关键词:{{keywords}} * 目标平台:{{platform}} (例如:微博, 小红书, LinkedIn) * 帖子语气风格:{{tone}} (例如:活泼有趣, 专业严谨, 温暖感性) * (可选) 补充说明:{{additional_notes}} # 输出要求 * 请直接生成帖子正文。 * 根据目标平台特性调整内容长度和风格。 * 适当使用 emoji 和 #标签 (基于关键词)。
-
-
② 模型与参数 (Model & Parameters):
-
模型选择:根据任务复杂度选择。创作类任务可能需要更强的模型(如 GPT-4, Claude 3),翻译或简单摘要任务可能用性价比模型即可。 -
参数调整:-
温度 (Temperature):创作类任务可以适当调高(如 0.7-0.9)增加多样性;需要精确提取或格式转换的任务应调低(如 0.1-0.3)。 -
最大 Token:根据预期输出长度设置。
-
-
-
③ 知识库 (Knowledge):【同样可用!】 文本生成应用也可以挂载知识库!
-
应用场景:比如,让 AI 基于你上传的公司年度报告(作为知识库)来生成一份面向投资者的摘要;或者基于产品文档库来撰写产品介绍。
-
配置方式:同 Chatbot 应用,添加数据集,选择检索模式(通常用“仅知识库”或“N-to-1”配合 Prompt 指导)。
-
-
④ 输出格式要求 (Output Formatting):
- 在 Prompt 中明确:强烈建议在 Prompt 的“输出要求”部分,清晰说明你想要的输出格式(如“请返回 JSON 格式,包含 'title' 和 'body' 两个字段”、“请使用 Markdown 列表格式输出要点”),并最好给一个格式示例。这能极大提高输出的可用性。
-
3.3 使用与测试:给“生产线”投料试运行
-
Web App 预览:配置完成后,在预览界面,你会看到根据你定义的输入变量生成的表单。填入内容,点击“运行”或“生成”,即可看到结果。这是最直观的测试方式。
-
API 调用:文本生成应用非常适合通过 API 集成到其他系统或自动化脚本中。
-
请求体 (Body):调用 API 时,需要将你在 Prompt 中定义的输入变量及其对应的值作为参数传入。通常是 JSON 格式。
-
响应体 (Response):API 会直接返回生成的文本结果。
-
-
测试要点:
-
不同输入测试:尝试各种不同的输入组合,看生成结果是否符合预期,鲁棒性如何。
-
边界情况测试:输入为空、输入超长、输入特殊字符等情况。
-
格式检查:如果要求了特定输出格式,检查生成结果是否严格遵守。
-
Few-Shot 效果:如果使用了 Few-Shot 示例,对比加示例前后的效果差异。
-
3.4 文本生成应用案例:多语言产品描述生成器
-
目标:输入产品名称和核心卖点,自动生成中文、英文、日文三种语言的产品描述段落。
-
实现方式一(单 LLM 节点 + Prompt 指导):
-
创建“文本生成”应用。
-
定义输入变量:
product_name,selling_points(长文本)。 -
编写 Prompt:
# 任务 根据以下产品信息,分别生成中文、英文、日文的产品描述段落。 # 产品信息 产品名称:{{product_name}} 核心卖点: {{selling_points}} # 输出要求 请严格按照以下 JSON 格式返回结果: { "zh": "这里是中文描述...", "en": "Here is the English description...", "ja": "ここに日本語の説明..." } -
选择一个支持多语言且能力较强的 LLM (如 GPT-4, Claude 3)。设置较低温度以保证格式稳定。
-
测试并部署(可通过 API 调用)。
-
-
实现方式二(使用 Workflow,更稳定可控):
-
创建“Workflow”应用。(是的,可以用 Workflow 实现这个需求,虽然起点不是 Text Generation App,但核心是文本生成)
-
开始节点:定义输入
product_name,selling_points。 -
LLM 节点 1 (生成中文):Prompt 指导生成中文描述。输出
zh_description。 -
工具节点 1 (翻译至英文):调用“翻译”工具(假设已配置),输入
zh_description,目标语言en。输出en_description。 -
工具节点 2 (翻译至日文):调用“翻译”工具,输入
zh_description,目标语言ja。输出ja_description。 -
结束节点:输出
zh_description,en_description,ja_description。
- 这种方式更稳定,因为翻译任务交给了专门的工具或模型调用,而不是让一个 LLM 同时处理多种语言和格式。
-
小结:文本生成应用是你的“内容创作效率倍增器”。核心在于设计好 Prompt 模板 和 输入变量。掌握它,无论是写代码、写文案还是做总结,都能事半功倍。
“能说会道”的 Chatbot 和“埋头苦干”的 Text Generation 都搞定了。接下来,咱们要挑战更高级的形态——给 AI 装上“眼睛”和“手臂”,让它能自主探索和行动的 Agent 智能体!准备好迎接 AI 的“超级进化”了吗?
第四章:超级助理养成记 - Agent 智能体核心与调试
老铁们,准备好了吗?我们要进入 Dify 中最酷炫、最接近科幻小说中 AI 的领域了——Agent (智能体)!它不再只是被动地回答或生成文本,而是能像一个真正的助理一样,理解你的目标 (Goal),自己思考 (Thought)、规划 (Planning) 步骤,并主动调用工具 (Action) 来完成任务。想想就激动人心!
4.1 Agent:不止于“对话”,更在于“行动”
-
核心区别:
-
Chatbot/TextGen:主要依赖 LLM 的语言理解和生成能力。
-
Agent:除了语言能力,更依赖 LLM 的推理、规划、工具使用 (Reasoning, Planning, Tool Use) 能力。
-
-
心智模型:ReAct 框架 (或类似逻辑)
-
Agent 的工作过程,很多时候遵循一个类似 ReAct (Reason + Act) 的循环:
-
观察 (Observation):接收用户指令或当前状态。
-
思考 (Thought):分析目标,判断需要哪些信息或操作,决定下一步行动。
-
行动 (Action):选择并调用一个合适的工具 (Tool),并提供所需的参数 (Input)。
-
再次观察 (Observation):获取工具执行后的结果 (Output)。
-
再次思考 (Thought):评估结果,判断任务是否完成?是否需要调用其他工具?或者如何整合信息形成最终答案?回到第 3 步或生成最终回复。
-
-
理解这个循环,能帮你更好地设计 Agent 的 Prompt 和调试它的行为。你会发现 Agent 的日志里经常出现 Thought, Action, Observation 这些字眼。
-
4.2 Agent 配置:打造“最强大脑”的关键要素
-
入口:工作室 -> 创建新应用 -> 选择“Agent”或“智能体”。
-
核心配置界面:
-
① 模型 (Model):【至关重要!选择决定上限!】
-
强烈建议使用能力最强的模型! (如 OpenAI GPT-4 系列, Anthropic Claude 3 Opus, Google Gemini Advanced 等旗舰模型)。
-
原因:Agent 的推理、规划、遵循复杂指令、以及理解何时以及如何使用工具的能力,极度依赖 LLM 的“智商”。用较弱的模型(如 GPT-3.5 Turbo 或 Claude 3 Haiku/Sonnet)可能导致 Agent:
-
无法理解你的目标。
-
不知道该用哪个工具,或者压根不使用工具。
-
错误地使用工具(参数不对)。
-
陷入逻辑混乱或无限循环。
-
-
成本考量:虽然贵,但对于 Agent 来说,模型能力通常是优先于成本的考虑因素。否则 Agent 可能根本无法工作。
-
-
② 系统提示词 (System Prompt):【Agent 的灵魂与操作手册!】 这里的 Prompt 比 Chatbot 的更复杂,也更关键!你需要清晰定义:
-
角色 (Role):它扮演什么角色?(e.g., "你是一个经验丰富的旅行规划师")
-
目标 (Goals):它的核心任务是什么?(e.g., "根据用户的目的地、时间和预算,利用可用工具查询航班、酒店和景点信息,并制定一份初步的行程计划")
-
可用工具 (Available Tools / Capabilities):【必不可少!】 明确列出这个 Agent 被授权使用的所有工具,并且简要说明每个工具是干什么的,需要什么输入。这是引导 Agent 正确使用工具的核心指令!
-
示例:
# 可用工具 - web_search: 用于在互联网上搜索最新的信息,例如天气、新闻、景点开放时间。需要提供搜索查询词 (query)。 - flight_search_api: 用于查询指定日期和航线的航班信息。需要提供出发城市 (departure_city)、到达城市 (arrival_city) 和日期 (date)。 - hotel_lookup_tool: 用于查找指定城市 (city) 和日期范围 (check_in_date, check_out_date) 的酒店。
-
-
行为指令/策略 (Instructions / Strategy):指导 Agent 如何思考和行动。
- 示例:"优先使用 API 工具获取结构化数据。如果 API 工具无法满足需求,再使用网页搜索。在给出最终计划前,先分步思考需要哪些信息。如果信息不全,主动向用户提问。"
-
约束与规则 (Constraints / Rules):行为的边界。
- 示例:"不要预订任何东西,只提供查询结果和计划建议。如果遇到工具调用失败,请告知用户并说明原因。回答要客观、详细。"
-
(可选) 思考过程要求 (Chain-of-Thought Prompting):可以明确要求 Agent 在最终回答前输出它的思考步骤("Please think step by step before providing the final answer."),便于调试。
-
-
③ 工具 (Tools / Plugins):【Agent 的“武器库”!】
-
在这里勾选这个 Agent 被允许使用的所有工具。只有勾选了,Agent 才有可能去调用它(前提是 Prompt 里也描述了,并且模型认为需要调用)。
-
确保工具可用:
-
内置工具:检查对应的 API Key 是否已在“模型提供商”或工具设置中配置好。
-
自定义工具:确保 API 配置正确,能在工具编辑界面测试通过。
-
-
-
④ 对话历史 (Chat History):同 Chatbot,配置记忆轮数。Agent 完成复杂任务可能需要更长的上下文记忆。
-
⑤ 变量 (Variables):(可选) 定义一些可以在 Prompt 中使用的全局变量。
-
4.3 Agent 调试:揭开“黑盒子”的秘密
Agent 的行为有时像个“黑盒子”,调试起来比 Chatbot 更复杂。以下是一些技巧:
-
日志是你的“透视镜”:
- 仔细阅读 Agent 执行日志:这里会详细记录 Agent 的 Thought -> Action -> Observation 循环。看它是怎么想的?决定调用哪个工具?传递了什么参数?工具返回了什么?根据返回结果又怎么想?这是理解 Agent 行为和定位问题的最重要途径!
-
常见问题排查(回顾问题 3):
-
不调用工具/调用错误? -> 重点查:模型能力、Prompt 对工具的描述、工具是否勾选启用、工具自身配置。
-
陷入循环/卡住? -> 可能是模型规划能力不足、Prompt 指令冲突、或某个工具持续返回错误/非预期结果导致 Agent 不知所措。尝试简化任务、优化 Prompt(加入退出条件或更明确的步骤)、修复工具问题。
-
回答质量差? -> 除了 Prompt 和模型,检查工具返回的信息质量是否够好?Agent 是否正确理解和整合了工具返回的信息?
-
-
调试技巧:
-
简化目标:从最简单的任务开始测试 Agent,逐步增加复杂度。
-
强制引导 (Prompt Injection):在用户输入中直接“命令” Agent 使用某个工具(比如:“请使用 web_search 工具搜索 Dify 最新版本”),看它是否能正确执行。这可以帮助判断是 Agent 不知道该用工具,还是工具本身有问题。
-
固定部分变量/工具:暂时禁用某些工具或固定某些输入,缩小问题范围。
-
优化工具描述:反复修改 Prompt 中对工具的描述,尝试不同的措辞,看是否能让 Agent 更好地理解。
-
4.4 Agent 应用案例:自动化竞品动态追踪与报告生成
-
目标:创建一个 Agent,能根据用户指定的竞品公司名称,自动上网搜索其官网、近期新闻、社交媒体动态,并生成一份简要的动态报告。
-
步骤:
-
准备工具:
-
确保“网页搜索 (web_search)”工具已配置好 API Key。
-
(推荐) 配置好“网页内容获取 (web_reader)”工具。
-
(可选,高级) 创建自定义工具“社交媒体监控 (social_media_monitor)”(调用相关 API,如 Twitter API)。
-
-
创建 Agent 应用:命名为“竞品情报分析师”。
-
选择顶级 LLM:如 GPT-4o 或 Claude 3 Opus。
-
编写系统提示词 (System Prompt):
# 角色 你是一名专业的市场情报分析师,专注于追踪竞品动态。 # 目标 根据用户提供的竞品公司名称 (competitor_name),完成以下任务: 1. 使用 'web_search' 查找该公司的官方网站 URL。 2. 使用 'web_reader' 访问官网,提取“关于我们”或“产品介绍”页面的核心信息。 3. 使用 'web_search' 搜索过去 7 天内关于该竞品的重要新闻或公告。 4. (如果配置了社交媒体工具) 使用 'social_media_monitor' 查找该竞品官方账号近期的热门动态。 5. 综合以上信息,生成一份简明的竞品动态报告,包括:官网核心信息摘要、近期主要新闻要点、近期社媒热点(如有)。 # 可用工具 - web_search: 搜索互联网信息。输入:query (搜索词)。 - web_reader: 读取指定 URL 的网页内容。输入:url (网页地址)。 - social_media_monitor: (如果启用) 监控指定公司名在社交媒体的动态。输入:company_name (公司名)。 # 行为指令 - 按步骤执行任务。优先查找官方来源。 - 如果找不到某项信息,请在报告中注明。 - 报告力求简洁、客观、提炼要点。 -
启用工具:在“工具”配置中,勾选
web_search,web_reader(以及social_media_monitor如果配置了)。 -
预览与调试:
-
输入竞品名称,例如:“帮我分析一下‘友商 TechNova’最近有什么动静?”
-
重点观察日志:看 Agent 是否按计划调用了搜索 -> 阅读 -> 搜索 -> (社媒监控) 的流程?参数传递是否正确?工具返回结果后,它是否能正确提取和总结信息?最终报告是否符合要求?
-
-
迭代优化:根据测试结果,反复调整 Prompt(尤其是工具描述和行为指令)、尝试不同的搜索关键词策略、甚至优化自定义工具的实现。
-
小结:Agent 是 Dify 中最具挑战性但也最有魅力的应用类型。它需要强大的模型、精心设计的 Prompt 和稳定可靠的工具三者完美配合。掌握 Agent,你就掌握了构建真正“智能”应用的核心能力。
但是,当任务流程非常固定,或者逻辑分支极其复杂时,完全依赖 Agent 的“自由发挥”可能不够稳定或高效。这时,就需要请出 Dify 的终极武器——Workflow 工作流,用精确编排的力量实现自动化!准备好进入下一章,探索 Dify 的“工业级”能力了吗?
第五章:【超重点】工作流节点全家桶 - 可视化编排深度解析
老铁们,欢迎来到 Dify 的“中央控制室”——Workflow 工作流!这玩意儿是 Dify 实现复杂业务流程自动化、将各种 AI 能力和工具精确串联起来的“大杀器”。如果说 Agent 是“游击队长”,灵活机动但路线不定,那 Workflow 就是“总工程师”,绘制精确的蓝图,指挥“生产线”上的每一个节点 (Nodes) 有条不紊地工作。
这一章,老金带你把 Dify 工作流编辑器里那些五颜六色的小方块(节点)彻底认全、搞懂、用溜!咱们的目标是:看到任何一个节点,你都能脱口而出它的作用、怎么配置、能连到哪!
(再次提醒:以下节点是 Dify 1.x 常见功能的总结,具体名称、图标、配置项请以你正在使用的 Dify 版本为准!)
5.1 Workflow 基础:画布、连接与数据流
在你开始拖拽节点之前,先理解这三个基本概念:
-
画布 (Canvas):就是你看到的那片空白区域,你可以在上面自由拖拽、排列、连接各种节点,构建你的自动化流程。
-
连接线 (Connections):连接不同节点的“数据通道”。通常是从上一个节点的输出端口 (Output Anchor) 拉一条线,连接到下一个节点的输入端口 (Input Anchor)。箭头方向表示数据流动的方向。
-
数据流 (Data Flow):核心概念!数据(通常以变量的形式存在)会沿着连接线从一个节点传递到下一个节点。上一个节点的输出,可以被下一个节点作为输入来使用。理解数据如何在节点间传递、如何引用变量,是构建有效 Workflow 的关键。
5.2 核心节点详解(地毯式轰炸,一个都不能少!)
节点 1:开始 (Start)
-
图标:通常是一个圆圈或起点标识。独一无二,每个 Workflow 只有一个。
-
功能:定义整个 Workflow 的入口和接收的输入参数。当这个 Workflow 被触发时(比如通过 Web App 界面提交表单,或通过 API 调用),外部需要提供这些参数。
-
配置:
-
+ 添加输入变量 (Add Input Variable):点击添加你需要的参数。 -
变量名 (Variable Name):(重要!) 参数的内部引用名称(英文,驼峰或下划线,如userInput,fileId,customerEmail)。下游节点将使用这个名字来引用输入数据。 -
标签 (Label):显示在 Web App 前端界面的输入框标签(可以是中文,方便用户理解)。 -
类型 (Type):决定了输入的格式和数据类型。常见有:-
文本 (String):短文本或长文本输入。 -
数字 (Number):整数或浮点数。 -
选择器 (Select):提供预设选项让用户选择。 -
文件 (File):允许用户上传文件(需要 Dify 支持文件处理能力)。 -
布尔 (Boolean):是/否 开关。
-
-
是否必需 (Required):勾选表示用户必须提供这个参数。 -
默认值 (Default Value):(可选) 为参数设置一个默认值。
-
-
输入:无(它是流程的起点)。
-
输出:你在配置中定义的那些变量,例如
{{start.userInput}},{{start.fileId}}。下游节点通过start.前缀来引用它们。 -
老金提示:开始节点是 Workflow 的“接收器”。定义好输入变量是设计 Workflow 的第一步。变量名要规范,类型要选对!
节点 2:LLM (Large Language Model)
-
图标:通常是 AI 大脑、对话气泡或羽毛笔图标。
-
功能:调用配置好的大语言模型来执行各种文本处理任务:生成、总结、分类、提取、翻译、改写、问答等等。是 Workflow 中实现“智能”的核心部件。
-
配置:
-
节点名称 (Node Name):给节点起个有意义的名字,便于在复杂流程中识别(如“总结文章摘要”、“判断用户情感”)。 -
模型选择 (Model):从你已配置的“模型提供商”列表中选择要使用的 LLM(考虑能力、成本、上下文窗口)。 -
提示词 (Prompt):【核心中的核心!】 编写指导 LLM 如何工作的 Prompt 模板。-
引用上游变量:使用
{{nodeName.variableName}}或{{start.variableName}}的语法来动态插入上游节点传递过来的数据。Dify 编辑器通常提供变量选择器,点击即可插入,避免手写错误。例如:请根据以下用户反馈 {{start.feedbackText}} 判断其情感倾向。 -
情境学习 (Few-Shot):可以在 Prompt 中嵌入输入/输出示例,以提高特定任务的准确性或格式遵循度。
-
-
输入变量 (Input Variables):通常 Dify 会自动识别你在 Prompt 中使用的{{...}}变量,并让你确认它们的来源(即连接到这个节点的输入)。 -
模型参数 (Parameters):精细调整 LLM 行为。-
温度 (Temperature):控制随机性(0-1,越低越确定)。 -
最大 Token (Max Tokens):限制输出长度。 -
Top P,Frequency Penalty,Presence Penalty,停止序列 (Stop Sequences):更高级的控制参数,按需调整。
-
-
输出 (Outputs):定义这个 LLM 节点执行后输出什么结果,供下游节点使用。-
文本内容 (Text):最主要的输出,即 LLM 生成的文本。你需要给它起一个输出变量名(如summary,sentimentResult,translatedContent)。 -
(可选) 流式输出 (Streaming):如果模型和 Dify 支持,可以启用流式输出,结果会逐步返回,适用于实时交互场景。对应的输出变量类型可能是 stream。
-
-
-
输入:连接到输入端口的上游节点的输出变量(用于填充 Prompt 模板)。
-
输出:你定义的输出变量(如
{{llmNodeName.summary}})。 -
老金提示:LLM 节点是 Workflow 的“大脑”。Prompt 写得好不好直接决定了智能程度。注意 Token 消耗,它是成本的主要来源之一!
节点 3:知识检索 (Knowledge Retrieval)
-
图标:通常是书籍、数据库、放大镜或 RAG 字样图标。
-
功能:根据输入查询你预先配置好的数据集 (知识库),并将最相关的文本块 (Chunks) 检索出来。这是在 Workflow 中实现 RAG 能力的关键节点。
-
配置:
-
节点名称:例如“查询产品 FAQ 库”、“检索法律条款”。 -
数据集选择 (Dataset Selection):勾选一个或多个要在此步骤查询的数据集。 -
查询输入 (Query Input):指定用哪个上游变量作为查询依据。通常是用户的原始问题{{start.userInput}},或者是上一个 LLM 节点提取出的关键词{{llmNodeName.keywords}}。 -
检索模式 (Retrieval Mode):-
向量检索 (Vector Search):基于语义相似度查找。
-
全文检索 (Full-Text Search):基于关键词匹配查找。
-
混合检索 (Hybrid Search):结合向量和全文检索,通常效果最好(如果 Dify 支持)。
-
-
检索参数 (Parameters):-
Top K:召回最相关的 K 个块。根据需求调整。 -
得分阈值 (Score Threshold):(可选) 过滤掉相关性得分低于此值的块。 -
重排模型 (Rerank Model):(可选) 如果配置了,可以启用以提高精度。
-
-
输出 (Outputs):-
召回结果 (Results / Retrieved Documents):一个包含多个检索到的文本块的列表 (List / Array)。你需要给这个列表变量起个名字,比如retrievedDocs。列表中的每个元素 (Chunk) 通常包含:-
content: 文本块内容。 -
metadata: 元数据,如来源文件名、文档 ID、页码等。 -
score: 相关性得分。
-
-
-
-
输入:查询依据变量。
-
输出:包含召回文本块的列表变量(如
{{knowledgeRetrievalNodeName.retrievedDocs}})。 -
老金提示:输出是列表!后续如果想让 LLM 基于这些结果回答,需要将这个列表变量传递给 LLM 节点的 Prompt。LLM Prompt 需要能处理列表输入(比如 Dify 可能会自动将其格式化,或者你需要在 Prompt 里写清楚如何处理这个列表)。如果想逐个处理,需要配合迭代节点。
节点 4:工具 (Tool)
-
图标:通常是扳手、齿轮、API 插头或锤子图标。
-
功能:调用一个你在“工具”菜单下预先配置好的插件/工具(无论是 Dify 内置的网页搜索、计算器,还是你自定义的 API 工具)。这是 Workflow 与外部世界交互、执行具体操作的“手臂”。
-
配置:
-
节点名称:例如“调用天气 API”、“执行 Google 搜索”、“更新 CRM 记录”。 -
工具选择 (Tool Selection):从下拉列表中选择你要在这个步骤调用的那个工具。 -
输入参数 (Input Parameters):【核心映射!】 这里会列出所选工具在创建时定义的所有输入参数。你需要将上游节点的输出变量精确地映射到这些参数上。-
点击每个工具参数旁边的映射按钮(通常是个链接图标或
{{}}图标),从可用变量列表中选择对应的上游输出变量。 -
务必确保数据类型匹配! 如果工具参数需要数字,你不能映射一个字符串变量(除非 Dify 或工具有自动转换)。
-
例如,天气查询工具的
city参数,需要映射到前面 LLM 节点提取出的{{llmNodeName.cityName}}变量。订单状态查询工具的orderId参数,需要映射到开始节点的{{start.orderNumber}}变量。
-
-
输出 (Outputs):-
工具执行成功后返回的结果。你需要给这些结果起输出变量名,供下游节点使用。例如
weatherResult,searchResults,crmUpdateStatus。 -
输出变量的名称和结构取决于你在配置该自定义工具时设置的输出解析 (Output Parsing)。如果没做解析,可能会返回原始 API 响应 (通常是 JSON 字符串)。
-
(可选) 可能还会输出工具执行的状态信息,如
statusCode。
-
-
-
输入:连接到输入端口的上游变量(需要被映射到工具参数)。
-
输出:工具执行结果对应的输出变量(如
{{toolNodeName.weatherResult}})。 -
老金提示:工具节点是 Workflow 功能扩展的关键!参数映射是配置的重中之重,一定要仔细核对。自定义工具的稳定性和 API 响应速度会直接影响 Workflow 的表现。考虑在这里进行错误处理(见条件判断节点)。
节点 5:条件判断 / 分支 (If/Else / Condition / Router)
-
图标:通常是菱形(流程图标准符号)或带问号、分支箭头的图标。
-
功能:实现逻辑判断和流程分支。根据一个或多个条件表达式的真假,决定 Workflow 的数据流接下来走向哪个路径(分支)。让 Workflow 能应对不同情况。
-
配置:
-
节点名称:例如“判断情感正负”、“检查库存状态”、“路由用户请求”。 -
分支逻辑 (Branch Logic / Rules):-
可以添加多个分支 (Branches / Cases)。每个分支代表一种需要判断的条件。
-
为每个分支设置条件表达式 (Condition Expression)。这通常涉及:
-
选择一个输入变量(来自上游节点,如
{{llmNodeName.sentiment}},{{toolNodeName.stockLevel}},{{questionClassifierNodeName.predictedClass}})。 -
选择一个比较操作符(如
等于 (==),不等于 (!=),大于 (>),小于 (<),包含 (contains),不包含 (does not contain),为空 (is empty),不为空 (is not empty)等)。 -
输入一个对比值(固定的字符串、数字,或者甚至是另一个变量)。
-
示例:
-
{{llmNodeName.sentiment}} == "Positive" -
{{toolNodeName.stockLevel}} > 0 -
{{start.userType}} contains "VIP"
-
-
-
可以为一个分支设置多个条件,并选择它们之间的逻辑关系(
AND:所有条件必须满足;OR:任一条件满足即可)。
-
-
默认分支 (Default / Else):必须有!如果以上所有分支的条件都不满足,数据流将进入这个默认分支。
-
-
输入:用于条件判断的上游变量。
-
输出:无直接的输出变量,但它有多个输出端口,分别对应每个分支和默认分支。数据将只从满足条件的那个分支端口流出。
-
老金提示:这是让 Workflow 变得“智能”、能够自适应的关键节点!条件表达式的逻辑要清晰、准确。务必考虑好所有可能的情况,并为默认分支设计合理的处理路径。可以在分支后连接不同的处理节点或结束节点。
节点 6:变量赋值 / 转换 (Variable Assigner / Parameter Extractor / Data Transform)
-
图标:可能是一个等号
=、变量符号x=、或转换箭头图标。 -
功能:用于在 Workflow 中创建新的变量,或者对已有的变量进行格式转换、内容提取、字符串拼接、简单计算等操作。是数据在节点间流转时的“加工站”。
-
配置:
-
节点名称:例如“格式化问候语”、“提取邮件地址”、“计算总价”。 -
输入变量 (Inputs):选择一个或多个需要进行处理的上游变量。 -
处理逻辑 / 模式 (Processing Logic / Mode):Dify 可能提供多种方式:-
模板拼接 (Template):使用
{{变量名}}语法将多个变量或固定文本组合成一个新的字符串。例如,创建一个welcomeMessage变量,值为尊敬的 {{start.userName}},您好!。 -
JSONPath 提取:从一个 JSON 类型的输入变量中提取特定字段的值。例如,从
{{toolNodeName.apiResponse}}(假设是 JSON) 中提取$.data.userId并赋值给新变量userId。 -
正则表达式提取 (Regex):使用正则表达式从文本变量中提取匹配的内容。例如,从
{{start.rawText}}中提取所有邮箱地址,赋值给新变量emails(可能是列表)。 -
简单计算 (Calculation):对数字类型的变量进行加减乘除等运算。
-
-
输出变量 (Outputs):定义新创建或处理后的变量的名称,例如welcomeMessage,userId,emails,totalPrice。下游节点可以通过这个新名字引用处理结果。
-
-
输入:需要处理的上游变量。
-
输出:新创建或修改后的变量。
-
老金提示:这个节点非常有用!当下游节点对输入数据的格式、类型或内容有特定要求,而上游节点的输出又不完全满足时,就用它来做个“适配”或“转换”。
节点 7:问题分类器 (Question Classifier)
-
图标:可能像一个分类标签、漏斗或带多个输出箭头的节点。
-
功能:这是一个专门用于意图识别/文本分类的节点。它接收一段文本输入(通常是用户问题),并根据你预先定义的类别 (Classes),将其归类到最匹配的那一类。背后通常也是调用 LLM,但针对分类任务做了优化和封装。
-
配置:
-
节点名称:例如“用户意图识别”、“邮件主题分类”。 -
输入文本 (Input Text):指定哪个上游变量包含需要分类的文本,如{{start.userQuery}}。 -
类别定义 (Classes / Categories):【核心配置!】 你需要在这里定义好所有可能的分类,并且为每一个类别提供清晰、准确、有区分度的描述 (Description)。LLM 会根据输入文本与哪个类别描述最相似来进行分类。-
点击
+ 添加类别 (Add Class)。 -
类别名称 (Class Name):给类别起个内部标识名,如product_inquiry,order_status,technical_support。 -
类别描述 (Class Description):(极其重要!) 用自然语言详细描述这个类别代表什么样的内容。描述越好,分类越准!-
例子:
-
product_inquiry: "用户咨询关于产品功能、价格、规格、用法、购买渠道等信息。" -
order_status: "用户询问订单的当前状态、物流信息、预计送达时间。" -
technical_support: "用户报告在使用产品过程中遇到的错误、Bug、故障,或寻求技术解决方案。"
-
-
-
-
模型选择 (Model):(可选) 可能允许你选择用于执行分类的 LLM。
-
-
输入:待分类的文本变量。
-
输出:
-
预测类别 (Predicted Class / Classification Result):一个包含模型预测出的类别名称的变量,例如predictedIntent。 -
(可选) 置信度 (Confidence Score):模型对这个分类结果的确信程度(0-1)。
-
-
老金提示:这个节点让意图识别更方便、更结构化。分类的准确性高度依赖你定义的类别及其描述的质量!后续通常连接条件判断节点,根据
predictedIntent的值走不同的业务流程。
节点 8:迭代 / 循环 (Iteration / Loop / For Each)
-
图标:通常是循环箭头、重复或列表处理图标。
-
功能:(高级节点,处理列表数据的利器!) 接收一个列表 (List / Array) 类型的输入变量,然后依次对列表中的每一个元素执行一遍其“内部”包含的子流程(一个或多个节点)。
-
配置:
-
节点名称:例如“处理每条搜索结果”、“遍历订单商品列表”。 -
输入列表 (Input List):选择一个上游节点输出的列表类型变量。例如,知识检索节点输出的{{knowledgeNode.retrievedDocs}},或者某个 API 工具返回的包含多个项目的列表{{apiToolNode.itemsList}}。 -
循环变量名 (Item Variable Name):定义在每次循环内部用来代表当前正在处理的那个列表元素的变量名。例如,如果输入是retrievedDocs列表,这里可以定义为currentDoc。 -
内部节点 (Inner Nodes / Loop Body):将需要对每一个列表元素执行的节点拖拽到这个迭代节点的内部区域。在这些内部节点中,你可以使用{{currentDoc}}(或其他你定义的循环变量名) 来引用当前元素的数据(比如{{currentDoc.content}},{{currentDoc.metadata.source}})。 -
输出模式 (Output Mode):决定迭代结束后,这个节点最终输出什么。-
合并输出 (Concatenated Output / Aggregate Output):将每一次循环内部子流程的最终输出结果收集起来,合并成一个新的列表或(如果输出是文本)拼接成一个长字符串输出。 -
最后一次输出 (Last Output):只输出最后一次循环的内部子流程的结果。 -
无输出 (No Output):如果循环只是执行操作(如调用 API 更新状态),不需要聚合结果。
-
-
并发设置 (Concurrency): (高级) 可能允许配置并行处理列表项的数量,以提高速度(需 Dify 支持且注意资源消耗)。
-
-
输入:必须是列表类型的变量。
-
输出:根据配置的输出模式,可能是合并后的列表/字符串、最后一次的结果,或无输出。需要定义输出变量名。
-
老金提示:当你需要对 RAG 返回的多个文档分别进行处理(比如逐个让 LLM 判断相关性),或者需要处理 API 返回的一组数据(比如给列表里的每个用户发送通知)时,这个节点就是神器!注意循环可能带来的执行时间和 Token 成本。
节点 9:结束 (End)
-
图标:通常是流程图的结束圆圈或终止标识。
-
功能:标志着 Workflow 的一条执行路径正常结束,并定义这条路径最终返回给外部调用者(Web App 前端、API 调用方)的结果。
-
配置:
-
+ 添加输出变量 (Add Output Variable):点击添加你希望暴露给外部的结果。 -
变量来源 (Variable Source):从下拉列表中选择一个连接到此结束节点的上游节点的输出变量。 -
变量名称 (Output Name):定义这个输出在最终结果 JSON 对象中的键名 (key)。 -
可以添加多个输出变量。
-
-
输入:连接到它的上游节点的输出变量。
-
输出:一个 JSON 对象,包含了所有你配置的输出变量及其对应的值。
-
老金提示:一个 Workflow 可以有多个结束节点!这很常见,比如条件判断的不同分支可能导向不同的处理结果,最终连接到不同的结束节点,每个结束节点可以定义不同的输出内容。
5.3 构建与调试 Workflow 实战技巧
-
先画草图,再搭积木:对于复杂流程,先在纸上或白板上画出大致的流程图和数据流,想清楚需要哪些节点和变量,再到 Dify 画布上实现。
-
模块化思维:对于特别复杂的流程,可以考虑将其拆分成几个子 Workflow(如果 Dify 支持 Workflow 调用 Workflow 的功能),或者至少在画布上将相关的节点组合在一起并添加注释(如果支持)。
-
小步快跑,边搭边测:不要等整个 Workflow 搭完再测试!每完成一小部分(比如两三个节点),就用预览/调试功能运行一下。
-
在开始节点填入测试数据。
-
运行后,检查每个节点的输出是否符合预期?数据流是否正确?
-
这能让你及早发现问题,避免最后面对一大堆错误不知从何下手。
-
-
利用节点命名和注释:给每个节点(尤其是 LLM、工具、判断节点)起个清晰的名字。如果 Dify 支持,给关键节点或区域添加注释,说明其作用。方便自己回顾,也方便他人理解。
-
数据类型要匹配:时刻关注变量的数据类型(文本、数字、列表、JSON 对象等)。确保传递给下一个节点的变量类型是它能处理的。必要时使用变量赋值/转换节点进行处理。
-
日志是救命稻草:Workflow 执行失败或结果异常时,第一件事就是去看执行日志! Dify 通常会提供非常详细的日志,包括:
-
每个节点的执行状态(成功/失败)。
-
每个节点的输入数据。
-
每个节点的输出数据。
-
详细的错误信息和堆栈(如果失败)。
-
仔细阅读日志,通常就能定位到问题所在。
-
小结:Workflow 是 Dify 实现复杂、可靠的 AI 自动化的核心引擎。掌握了这些节点的功能与配置,你就拥有了构建强大后台处理流程、智能业务逻辑的能力。实践是最好的老师,多动手拖拽、连接、测试,你很快就能成为 Workflow 编排大师!
搞定了“神经系统”(节点),下一章,咱们就要给这个系统装上各种“传感器”和“执行器”——深入研究 插件/工具 的配置与使用,让你的 Workflow 和 Agent 真正能干活!
第六章:【超重点】插件/工具终极指南 - 连接万物的力量
老铁们!打通了 Workflow 的任督二脉(节点),现在我们要给它配齐“十八般兵器”了!工具(Tools / Plugins) 就是 Dify 应用连接外部世界、执行具体操作、获取实时信息的关键。没有工具,Agent 就是“纸上谈兵”,Workflow 就是“闭门造车”。
这一章,老金带你把 Dify 的“工具箱”翻个底朝天,不仅要让你对内置工具了如指掌(特别是怎么配置那些烦人的 API Key),更要让你精通自定义工具的打造秘籍,把任何 API 都变成你的 AI 应用的“超能力”!
6.1 工具:Agent 和 Workflow 的“能力外挂”
-
再强调其定位:预先定义好的、可被 Agent 自主选择调用、或被 Workflow 中“工具节点”精确调用的功能单元。
-
核心价值:弥补 LLM 本身的局限性(无法访问实时网络、无法执行计算、无法操作外部系统),极大扩展 AI 应用的能力边界。
-
管理中心:Dify 工作台 -> 左侧导航栏 -> 工具 (Tools / Plugins)。你可以在这里查看、管理所有可用的工具,并创建新的自定义工具。
6.2 内置工具全攻略(常见工具详解与配置指南)
Dify 通常会提供一些即插即用(但可能需要配置 Key)的内置工具。以下是常见的几种及其注意事项:
-
① 网页搜索 (Web Search)
-
可能有多种实现: Google Search, Bing Search, DuckDuckGo Search, Serper Search 等,具体看 Dify 支持哪种或哪几种。
-
核心用途:赋予 AI 应用访问实时互联网信息的能力。Agent 回答时事问题、查询最新数据,Workflow 需要获取外部动态信息时都可能用到。
-
配置要点:【大概率需要配置 API Key!】 这是使用搜索工具的前提!
-
Google Search:
-
你需要一个 Google Cloud Platform (GCP) 账号。
-
在 GCP 创建一个“可编程搜索引擎 (Programmable Search Engine)”,配置它搜索整个网络。
-
获取该引擎的 API Key 和 搜索引擎 ID (Search Engine ID / CX)。
-
将这两个值填入 Dify 的“设置”->“模型提供商”或对应的 Google Search 工具配置中。
-
注意:Google Custom Search API 有免费调用额度(通常每天 100 次查询),超出后会收费,或者需要升级到付费版本。
-
-
Bing Search:
-
你需要一个 Microsoft Azure 账号。
-
在 Azure 创建一个“必应搜索 v7 (Bing Search v7)”资源。
-
获取该资源的 密钥 (Key)(通常有两个,任选一个)。
-
将密钥填入 Dify 的 Bing Search 工具配置中。
-
同样有免费额度,超额收费。
-
-
Serper API (
serper.dev):-
这是一个第三方 Google 搜索结果 API 服务。
-
注册
serper.dev账号,获取 API Key。 -
通常比 Google 官方 API 便宜,且配置相对简单(只需要一个 Key)。
-
将 Key 填入 Dify 的 Serper 工具配置中。
-
-
DuckDuckGo Search:
-
优点是通常不需要 API Key,配置简单。
-
缺点是搜索结果的相关性和全面性可能不如 Google 或 Bing。
-
-
-
使用方式:Agent 会根据 Prompt 指示和自身判断调用;Workflow 中使用“工具节点”选择对应的搜索工具,输入通常是
query(搜索关键词) 变量。 -
老金血泪教训:用搜索工具前,一定!一定!一定! 要先去对应平台申请并配置好 API Key!否则 Agent 调用会报错,Workflow 节点会失败!别问我怎么知道的...
-
-
② 网页内容获取 / 浏览 (Web Reader / Browse Tool)
-
核心用途:给定一个 URL,尝试访问该网页并提取其主要文本内容。常用于 Agent 分析特定文章、Workflow 处理包含链接的任务。
-
配置要点:通常无需配置额外的 API Key。
-
局限性提醒:
-
不保证成功:可能受目标网站
robots.txt规则限制,或被防火墙/反爬虫机制拦截。 -
静态内容为主:对于大量使用 JavaScript 动态加载内容的网页(单页应用 SPA),可能只能获取到初始 HTML 的内容,无法获取完整渲染后的信息。
-
需要登录的页面:无法处理需要登录才能访问的页面。
-
-
使用方式:输入参数通常是
url(网页地址字符串)。输出是提取到的网页文本内容。
-
-
③ 计算器 (Calculator)
-
核心用途:执行数学运算。解决 LLM 不擅长精确计算的问题。
-
配置要点:无需配置。
-
使用方式:Agent 可以直接调用回答 "123 * 456 等于多少?" 这类问题;Workflow 中可以用于对上游节点输出的数值进行计算。输入通常是一个包含数学表达式的字符串,例如
"100 * (1 + 0.05)^3"。
-
-
④ 维基百科查询 (Wikipedia Search)
-
核心用途:快速查询维基百科词条,获取相对权威的背景知识。
-
配置要点:通常无需配置。
-
使用方式:输入参数通常是
query(查询的词条名称)。
-
-
⑤ 文生图 (Image Generation)
-
可能有多种实现: DALL-E (来自 OpenAI), Stable Diffusion (多种接入方式), Midjourney (通常通过非官方代理) 等。
-
核心用途:根据文本描述生成对应的图片。
-
配置要点:【需要配置 API Key 或服务地址!】
-
DALL-E (DALL·E 2 / DALL·E 3):
-
需要 OpenAI API Key。通常与你用于 GPT 模型的 Key 是同一个。确保你的 OpenAI 账户支持 DALL-E API 调用。
-
在 Dify 的 OpenAI 或 DALL-E 工具配置中填入 Key。
-
-
Stable Diffusion:
-
调用 API 服务: 如果使用 Stability AI 官方 API 或其他第三方提供的 Stable Diffusion API 服务,需要注册获取对应服务的 API Key,并填入 Dify 中对应的工具配置。
-
连接自部署实例: 如果你自己部署了 Stable Diffusion (例如使用 AUTOMATIC1111 的 Web UI 并开启了 API),需要在 Dify 中配置你的服务地址 (Endpoint URL),可能还需要配置认证方式(如果有)。
-
-
Midjourney Proxy:
-
Midjourney 官方没有提供公共 API。市面上的 Midjourney 工具通常是基于社区开发者创建的非官方代理服务(通过 Discord Bot 或其他方式)。
-
你需要找到一个可靠的代理服务,获取其 API 地址 和可能的认证凭据 (Key 或 Token),然后在 Dify 中配置一个自定义工具来调用它。(注意:使用非官方代理有风险,服务可能不稳定,甚至有安全隐患,需自行评估!)
-
-
-
使用方式:输入参数主要是
prompt(图片的文本描述),可能还有size(图片尺寸),style(风格),n(生成数量) 等。输出通常是生成图片的 URL 列表 或 Base64 编码的图片数据。
-
-
⑥ 其他可能的内置工具:(请务必以你使用的 Dify 版本为准)
-
Wolfram Alpha: 强大的科学计算和知识问答引擎。可能需要注册 Wolfram Alpha Developer Portal 获取 AppID。
-
Google Trends: 查询 Google 搜索热度趋势。可能需要特定配置或 API 访问权限。
-
天气查询 (Weather): 如 OpenWeatherMap。通常需要注册获取 API Key。
-
股票查询 (Stock Price): 如 Alpha Vantage, Finnhub。通常需要注册获取 API Key。
-
日历连接 (Calendar): 如 Google Calendar。通常需要通过 OAuth 认证授权 Dify 访问你的日历,配置过程可能较复杂。
-
数据库连接 (Database Connector): (高级功能) 可能允许直接查询 SQL 或 NoSQL 数据库。需要配置数据库连接信息(地址、端口、用户名、密码、数据库名),务必注意安全风险和权限控制!
-
6.3 自定义工具:打造你的专属“超能力”——API 封装终极详解
这才是 Dify 真正强大的地方!理论上,任何提供 HTTP API 接口的服务,无论是你公司内部的系统,还是互联网上公开的第三方服务,只要你能拿到它的 API 文档和访问权限,就能把它封装成一个 Dify 工具,供你的 Agent 或 Workflow 调用!
创建入口:Dify 工作台 -> 工具 (Tools) -> 点击“创建工具” -> 选择“自定义工具 (Custom Tool)”或“API 工具”。
核心配置步骤(这次掰开了揉碎了讲!)
-
第一步:基本信息 (Basic Info) - 告诉 AI 这是啥
-
图标 (Icon): 选个形象的图标,方便识别。 -
名称 (Name): 【给 AI 看的!极其重要!】-
用简洁、准确、动词+名词的英文命名法。例如:
queryOrderStatus,translateTextToSpanish,getLatestNewsAboutTopic,addUserToCRM。 -
Agent 会根据这个名字来理解工具的核心功能,是它选择工具的重要依据!
-
-
描述 (Description): 【给 AI 看的!极其极其重要!】-
用清晰、详细的自然语言(推荐英文,LLM 理解更好)描述清楚:
-
它究竟是干什么的? (e.g., "Fetches the current shipping status and estimated delivery date for a given e-commerce order ID.")
-
它需要哪些输入参数?每个参数具体指什么?数据类型是什么? (e.g., "Requires the 'order_id' (string, mandatory) which is the unique identifier of the order. Optionally accepts 'carrier_preference' (string, 'DHL' or 'FedEx').")
-
它会返回什么信息?返回值的结构或含义是什么? (e.g., "Returns a JSON object containing 'status' (string, e.g., 'Processing', 'Shipped', 'Delivered'), 'estimated_delivery' (string, YYYY-MM-DD format), and 'tracking_url' (string, URL for tracking).")
-
(锦上添花)什么时候应该使用它? (e.g., "Use this tool whenever the user asks about the delivery status or tracking information of their placed order.")
-
-
写得越像 API 文档一样清晰,Agent 用起来就越得心应手! 不要怕啰嗦,信息越全越好。
-
-
-
第二步:API 配置 (API Configuration) - 告诉 Dify 怎么调
-
请求方法 (HTTP Method): 根据 API 文档选择GET(查),POST(增/执行),PUT(改),PATCH(部分改),DELETE(删)。 -
URL: 完整的 API 请求路径。- 路径参数 (Path Parameters):如果 URL 中有变量部分,用大括号
{}包裹,例如https://api.mycrm.com/v2/contacts/{contact_id}。这个{contact_id}就是路径参数,必须在下面的“输入参数”中定义同名变量。
- 路径参数 (Path Parameters):如果 URL 中有变量部分,用大括号
-
请求头 (Headers): (按需添加) 设置 HTTP 请求头。-
Content-Type: 对于POST,PUT,PATCH方法,如果请求体是 JSON,必须设置Content-Type为application/json。 -
Authorization: 如果认证信息需要放在这里(见下一步)。 -
Accept: (可选) 指定期望服务器返回的数据格式,如application/json。 -
其他 API 可能要求的特定 Header。
-
-
查询参数 (Query Parameters): (按需添加) URL 中?后面的参数。- 在这里定义参数名和值。值的部分可以使用
{{变量名}}来引用“输入参数”中定义的变量。例如,定义一个名为apiKey的查询参数,其值为{{apiKeyVariable}}。
- 在这里定义参数名和值。值的部分可以使用
-
请求体 (Body): (主要用于POST,PUT,PATCH)-
类型 (Type):
-
None: 没有请求体(GET, DELETE 常用)。 -
raw: 最常用! 允许你直接输入请求体内容。 -
Form-Data,x-www-form-urlencoded: 模拟表单提交(不太常用,除非 API 特别要求)。
-
-
内容格式 (如果 Type 为 raw):通常选择
JSON。 -
内容模板 (如果 Type 为 raw + JSON):在这里构建 JSON 请求体。同样使用
{{变量名}}来引用“输入参数”中定义的变量。注意 JSON 格式的严格性:字符串要用双引号,数字不用,布尔值是true/false,嵌套结构要正确。-
示例:
{ "user_id": "{{userId}}", "product_sku": "{{sku}}", "quantity": {{quantity}}, // 数字变量 "options": { "color": "{{colorOption}}", "send_notification": true // 布尔值 }, "tags": ["{{tag1}}", "urgent"] // 列表 }
-
-
-
-
第三步:认证 (Authentication) - 证明“我是我,让我进”
-
选择 API 提供商要求的认证方式:
-
无认证 (None)。 -
基本认证 (Basic Auth): 填入用户名、密码。 -
Bearer Token: 直接粘贴 Token。 -
API Key: (最常见、最灵活)-
Key 名称 (Key Name): API 要求存放 Key 的那个 Header 名称 (如X-Api-Key,Authorization) 或 Query 参数名称。 -
Key 值 (API Key): 填入你的 Key。 -
添加到 (Add to):请求头 (Header)或查询参数 (Query)。 -
前缀 (Prefix): (可选) 如果 Key 值需要加前缀,比如AuthorizationHeader 通常是Bearer(注意有个空格!),就在这里填Bearer。
-
-
-
自定义 (Custom): 如果是更复杂的认证(如 OAuth 流程的最终 Token),可能需要选择
None,然后在“请求头”里手动添加AuthorizationHeader。
-
-
第四步:输入参数 (Input Parameters) - 告诉 Dify 这个工具需要啥原料
-
(极其重要!与 API 配置和 Prompt 描述联动!)
-
定义来源:你需要在这里明确定义所有你在 URL 路径
{}、查询参数、请求体{}中使用到的所有变量名。 -
配置项:
-
+ 添加参数 (Add Parameter)。 -
参数名 (Name): 必须与你在 URL 或 Body 中使用的{}内的名字完全一致!大小写敏感! -
标签 (Label): 在 Workflow 工具节点配置界面显示的易懂名称。 -
类型 (Type): 文本 (String), 数字 (Number), 布尔 (Boolean), 整数 (Integer), 数组 (Array), 对象 (Object) 等。选择准确的类型有助于数据校验和处理。 -
是否必需 (Required): 决定 Agent 或 Workflow 在调用时是否必须提供这个参数。 -
默认值 (Default Value)(可选)。
-
-
作用:Agent 会根据工具描述和这里的参数定义来尝试生成调用所需的参数;Workflow 工具节点会显示这些参数,让你将上游变量映射过来。
-
-
第五步:输出解析 (Output Parsing) - 从原始响应中提取“精华”
-
(可选,但对于 Workflow 强烈推荐!)
-
目的:原始 API 响应可能是非常复杂的 JSON 或 XML 结构,包含很多无用信息。通过解析,可以只提取出下游节点真正需要的关键数据,并将其赋值给易于使用的变量。
-
配置:
-
+ 添加输出变量 (Add Output Variable): 定义你希望从原始响应中提取出的每一个数据项。 -
变量名 (Name): 给提取出的数据起一个有意义的变量名,供下游节点引用,例如extractedStatus,userName,itemList。 -
提取路径/表达式 (Extraction Path / Expression): 【核心技术点!】 使用 JSONPath (用于 JSON 响应) 或 XPath (用于 XML 响应) 等路径语言,精确指定要从哪里提取数据。-
JSONPath 语法回顾:
-
$:根对象。 -
.:子成员访问符。 -
[]:数组索引([0]第一个元素)或属性名包含特殊字符时的访问(['user-name'])。 -
..:递归下降,查找所有匹配的键。 -
*:通配符,匹配所有成员。 -
[?(<expression>)]:过滤器表达式。
-
-
强烈建议:使用在线 JSONPath 测试工具,将你的 API 实际返回的 JSON 粘贴进去,反复调试你的 JSONPath 表达式,确保能准确提取到想要的数据。
-
-
-
-
第六步:测试!测试!测试!
-
在工具编辑界面的底部或侧边,通常会有一个“测试 (Test)”区域。
-
填入“输入参数”的测试值。
-
点击“运行测试”。
-
仔细观察结果:
-
请求详情:实际发出的 URL、Headers、Body 是什么?跟你预期的是否一致?
-
响应状态码 (Status Code):是不是 200 OK?还是 4xx (客户端错误,如认证失败、参数错误) 或 5xx (服务器错误)?
-
原始响应体 (Raw Response Body):API 实际返回了什么内容?
-
解析后的输出 (Parsed Output):你的“输出解析”配置是否成功提取到了数据?提取结果是否正确?
-
-
反复调试配置,直到测试成功为止! 只有在这里测试通过了,Agent 和 Workflow 调用时才有可能成功。
-
6.4 工具使用的最佳实践(老金的唠叨)
-
描述!描述!描述! Agent 能否用对工具,八成看你的描述写得好不好!
-
单一职责,保持简洁:一个工具尽量只做一个核心功能。需要多个步骤?要么拆成多个工具,要么用 Workflow 把它们串起来。
-
参数定义要精确:类型、是否必需、命名规范,都不能马虎。
-
考虑失败,做好预案:网络会抖动,API 会挂掉。
-
Agent Prompt: 可以指导 Agent 在工具失败时如何重试、换工具或告知用户。
-
Workflow: 在工具节点后面加条件判断节点,检查返回的状态码或特定错误信息,然后走失败处理分支(如记录日志、发送告警、转人工)。
-
-
安全无小事:
-
API Key 严保管:用 Dify 的配置机制,别泄露。
-
最小权限原则:给 Dify 工具用的 Key 只开通必需的操作权限。
-
输入验证防注入:如果工具执行敏感操作(写数据库、发邮件、执行命令),对来自用户(或其他不可信来源)的输入参数进行严格的验证和清理,防止被恶意利用。
-
小结:工具是 Dify 的“力量倍增器”。内置工具让你快速起步,自定义工具则提供了无限的扩展可能。精通工具的配置(特别是 API 封装)和使用,你的 Dify 应用才能真正具备解决现实世界问题的能力。
掌握了 Dify 的所有核心组件(应用类型、节点、工具)和优化技巧,我们已经具备了成为“Dify 大师”的潜质。接下来的两章,我们将聚焦于实战落地:应用的最终部署、持续运营,以及如何应对开发过程中必然会遇到的调试排错问题,助你扫清最后的障碍,顺利“出师”!
第七章:高手之路 - Prompt 调优、成本控制与模型管理
老铁们,咱们已经把 Dify 的“硬件”——应用类型、工作流节点、插件工具都摸透了。现在,要修炼“软件”——也就是如何更聪明、更高效、更经济地使用这些硬件。这一章,咱们深入探讨 Prompt 调优、成本控制和模型管理这三大“内功心法”,助你从“会用”迈向“精通”!
7.1 Prompt 工程再精进:从“指令”到“与 AI 共舞”
Prompt 是你与 LLM 沟通的桥梁,其质量直接决定了 AI 应用的“智商”和“情商”。要写出高质量的 Prompt,需要技巧,更需要实践和迭代。
-
迭代优化,永无止境 (Iterative Refinement):
-
没有银弹:别指望一次写出完美的 Prompt。把它看作一个持续优化的过程。
-
反馈驱动:密切关注 AI 的实际表现。哪里答非所问?哪里逻辑混乱?哪里没按格式输出?这些都是优化 Prompt 的线索。
-
对照实验:修改 Prompt 时,最好只改一个点,然后对比效果,判断是改进还是改退了。可以使用 Dify 的版本管理功能(如果有)或自行记录。
-
-
结构化你的意图 (Structured Prompting):
-
Markdown 是好帮手:用
#标题、- / *列表、`代码块`、---分隔线等,把你的 Prompt 分割成逻辑清晰的区块。例如:## Role Definition You are a helpful assistant. ## Task Instructions Summarize the following text into three bullet points. ## Context {{upstream_node.long_text}} ## Output Format Requirements - Use Markdown bullet points. - Each point should be concise. ## Constraints - Do not add any information not present in the original text.这比一大段文字更能让 LLM 理解你的层次和重点。
-
XML 标签 (对 Claude 等模型友好):用
<tag></tag>包裹不同部分,有时效果更佳。<prompt> <role>...</role> <instructions>...</instructions> <context>...</context> <examples> <example> <input>...</input> <output>...</output> </example> </examples> <output_format>...</output_format> </prompt>
-
-
示例的力量:情境学习 (In-Context Learning):
-
零样本 (Zero-Shot):仅指令,无示例。(简单、通用任务)
-
少样本 (Few-Shot):指令 + 几个 (2-5 个) 高质量的输入/输出示例。【效果拔群!】 特别适用于:
-
需要特定输出格式的任务(如生成 JSON、特定结构的报告)。
-
需要复杂推理或模式识别的任务。
-
需要模仿特定风格的任务。
-
-
示例质量是关键:
-
相关性:示例要与你的目标任务高度相关。
-
多样性:覆盖几种不同的情况或边缘案例。
-
准确性:示例的输出必须是正确且符合要求的。
-
格式一致性:示例的格式要和你最终要求的输出格式保持一致。
-
-
-
引导思考:思维链 (Chain-of-Thought, CoT):
-
目的:提高 LLM 在复杂推理任务上的表现。
-
方法:
-
在 Prompt 末尾加上类似
Let's break this down step-by-step.或Let's think step by step before answering.的引导语。 -
在 Few-Shot 示例中,不仅给出最终答案,还展示详细的思考或解题步骤。
-
-
应用:Agent 的系统 Prompt 中指导其规划,Workflow 中需要复杂逻辑推导的 LLM 节点。
-
-
角色扮演,入木三分 (Persona Crafting):
-
超越表面:不仅是“你是一个客服”,而是“你是一位拥有 5 年经验、熟悉所有产品线、极具耐心和同理心、总能用最简单语言解释复杂问题的金牌客服”。细节决定了 AI 的行为模式和语言风格。
-
赋予偏好:可以在 Agent Prompt 中暗示角色在某些情况下更倾向于使用哪个工具,或者处理问题的特定策略。
-
-
设定边界:约束与护栏 (Constraints & Guardrails):
-
明确禁止:用清晰的语言告诉 AI 不能做什么。(e.g., "Do not provide financial advice.", "Never guess if you don't know the answer.", "Avoid using technical jargon.")
-
格式强制:强力要求输出格式,甚至给出 JSON Schema 或 Markdown 模板。
-
安全红线:加入关于内容安全、隐私保护、道德伦理的指令,降低风险。
-
7.2 成本控制:精打细算,让 AI 物有所值
用 LLM 如流水,尤其是在生产环境大量调用时,成本是必须考虑的问题。如何在保证效果的前提下,把钱花在刀刃上?
-
选对模型,事半功倍 (Model Selection Optimization):
-
杀鸡焉用牛刀:评估任务复杂度。简单的分类、提取、格式转换,用 GPT-3.5 Turbo、Claude 3 Haiku 或同级别模型可能就够了,没必要上最贵的旗舰模型。
-
混合搭配 (Workflow):在一个 Workflow 中,根据不同节点的任务难度,选用不同成本的模型。入口的意图识别用便宜的,核心的创作或分析用贵的。
-
持续关注性价比:模型价格和能力是动态变化的,关注提供商的更新,选择当下最划算的方案。
-
-
给 Prompt “减肥” (Prompt Size Reduction):
-
指令精炼:用最少的词表达清楚意思,避免冗余、重复的描述。
-
上下文瘦身 (Context Diet):
-
RAG 优化:调整 Top K,只召回最相关的 2-3 个知识块;使用 Rerank 模型提高精度;优化知识库内容本身,去除无关信息。
-
对话历史管理:设置合理的历史轮数;对于不需要长期记忆的应用(如单轮问答、文本生成),可以禁用或只保留极短历史;探索历史摘要技术(如果可行)。
-
-
Few-Shot 示例适量:在保证效果的前提下,尽量减少示例数量。有时精心设计的 Zero-Shot 或 One-Shot Prompt 效果也不错。
-
-
控制输出长度 (Output Length Control):
-
max_tokens是刹车:给 LLM 节点设置一个合理的最大输出 Token 数,防止它“放飞自我”生成超长回复。 -
Prompt 指令约束:明确要求输出长度,如“总结请控制在 100 字以内”、“只输出最终答案,不要解释”。
-
-
善用缓存,避免重复劳动 (Caching Strategy):
-
平台缓存:检查 Dify 是否提供 LLM 调用或 Workflow 级别的缓存。如果相同输入能命中缓存,将极大节省成本和响应时间。
-
应用层缓存:如果你是通过 API 调用 Dify 应用,可以在你的客户端或网关层实现缓存逻辑。
-
-
监控与分析,找出“出血点” (Monitoring & Analysis):
-
看账单,更要看明细:利用 Dify 的统计功能,分析哪个应用、哪个模型、哪个时间段的 Token 消耗最多。
-
审计日志:深入分析高消耗调用的具体输入和输出,判断是正常消耗还是有优化空间。
-
设定预算和告警:如果平台支持,设置 Token 消耗预算和超额告警。
-
7.3 模型管理:灵活切换,驾驭不同的“AI 大脑”
Dify 让你能方便地接入和切换多种 LLM。管理好这些模型是保持应用先进性和适应性的关键。
-
安全配置是基础 (Provider Configuration):
-
API Key 不裸奔:在 Dify 的“设置”->“模型提供商”中集中、安全地管理你的所有 API Key。严禁将 Key 硬编码在 Prompt、代码或任何公开可见的地方!
-
多环境 Key 分离:建议为开发、测试、生产环境使用不同的 API Key,便于管理和计费。
-
Endpoint 定制:如果需要连接 Azure OpenAI 的特定区域 Endpoint 或自部署的开源模型服务地址,确保 Base URL 配置正确。
-
-
知己知彼,百战不殆 (Model Landscape Awareness):
-
核心参数对比:了解并对比不同模型的关键特性:
-
上下文窗口长度 (Context Window):决定了能处理多长的输入(文档、对话历史)。 -
多模态能力 (Multimodal):是否支持图像输入/输出? -
工具使用/函数调用能力 (Tool Use / Function Calling):Agent 和复杂 Workflow 的关键。 -
速度 (Latency):实时交互体验。 -
成本 (Pricing):按需选择。 -
知识截止日期 (Knowledge Cutoff):影响对近期事件的了解程度。 -
语言支持 (Language Support):特定语言任务的表现。
-
-
-
策略性选择模型 (Model Selection Strategy):
-
分层选择:理解 Dify 的模型选择优先级(通常:节点指定 > 应用默认 > 全局默认)。
-
按需分配:为不同应用、甚至 Workflow 中的不同节点,根据任务需求指定最合适的模型。
-
动态路由 (高级):通过 Workflow 中的逻辑判断(如根据输入文本长度、识别出的任务类型),将请求路由到配置了不同模型的 LLM 节点。
-
-
拥抱变化,持续评估 (Stay Updated & Evaluate):
-
保持关注:LLM 技术日新月异,模型提供商会不断推出新模型、新版本、降价。关注行业动态。
-
测试先行:对于有潜力的新模型,先在测试环境或非核心应用上进行 A/B 测试,评估其在你的具体场景下的效果和成本。
-
谨慎迁移:切换模型可能需要调整 Prompt。做好充分测试再全量上线。
-
小结:成为 Dify 高手,不仅要会“搭”,还要会“调”;不仅要追求效果,还要考虑成本;不仅要用好一个模型,还要懂得驾驭多个模型。将 Prompt 调优、成本控制、模型管理这三项“内功”修炼到家,你的 Dify 应用才能真正做到智能、高效、可持续!
万事俱备,只欠东风!下一章,我们将真正“亮剑”,探讨如何将你的应用部署上线、如何在实际运营中持续优化,并分享几个更复杂的实战案例,助你打通理论到实践的最后一公里!
第八章:亮剑时刻 - 部署、运营与实战案例精选
老铁们,激动人心的时刻终于来了!我们已经把 Dify 从里到外研究了个遍,掌握了核心技术,修炼了优化心法。现在,是时候让你的“神兵利器”出鞘,走向真实的用户和场景了!这一章,我们聚焦于应用的部署上线、持续运营,并通过几个更复杂的实战案例,激发你的创造力!
8.1 应用部署:让你的 AI “走出家门”
应用在 Dify 工作室里跑得再欢,也得让目标用户能方便地用上。Dify 通常提供以下几种部署方式,各有优劣:
-
Web App (分享链接) - “拎包入住”
-
操作:在应用发布后,Dify 会自动生成一个公开的 URL。直接将此链接分享给用户即可访问。
-
优点:最快、最简单,无需任何开发工作,零成本部署。非常适合快速验证、内部测试、个人工具。
-
缺点:定制化程度最低。界面通常是 Dify 的标准样式,可能带有 Dify 的 Logo,难以融入自有品牌。访问控制能力可能有限(需看 Dify 是否支持密码保护等)。
-
适用场景:内部测试、原型演示、小范围分享、教育培训、非商业性个人项目。
-
-
Embedded (嵌入代码) - “嵌入式家电”
-
操作:Dify 会提供一段 HTML 代码,通常是
<iframe>标签或一段 JavaScript (JS) 代码片段。你需要将这段代码粘贴到你自己网站或应用的 HTML 源代码中相应的位置。 -
优点:能将 AI 应用无缝集成到你现有的产品界面中,例如在官网右下角弹出一个聊天窗口,或在知识库页面嵌入一个问答框。用户体验更统一。JS SDK 方式通常提供一定的样式定制能力(如颜色主题、按钮文本等)。
-
缺点:需要懂一点前端知识 (HTML/CSS/JS),并且有修改目标网站代码的权限。
<iframe>方式可能存在样式隔离和高度自适应问题。 -
适用场景:官网/App 集成智能客服、在线文档嵌入 AI 问答、内部 OA 系统集成知识助手、电商网站嵌入导购机器人。
-
-
API (接口调用) - “私人定制豪宅”
-
操作:Dify 为每个发布的应用提供一个后端 API 接口 (Endpoint)。你需要自己编写代码(使用 Python, Node.js, Java, PHP, Swift, Kotlin 等任何能发 HTTP 请求的语言)来调用这个 API。
-
优点:最灵活、最强大、完全可定制。你可以:
-
设计完全自定义的前端用户界面 (UI)。
-
实现复杂的交互逻辑。
-
将 Dify 的 AI 能力深度集成到你的后端业务流程、移动 App、桌面软件、自动化脚本、甚至物联网设备中。
-
更好地控制会话管理、用户认证等。
-
-
缺点:需要前后端开发能力,开发成本和时间投入最高。
-
API 关键信息:你需要从 Dify 后台获取并了解:
-
API Endpoint URL: 调用地址。 -
HTTP Method: 通常是POST。 -
Authentication: 通常需要在请求头Authorization中携带Bearer YOUR_DIFY_APP_API_KEY(这个 Key 在 Dify 应用设置中生成,不同于 LLM 的 Key)。 -
Request Body: 调用时需要发送的 JSON 数据,通常包括:-
inputs: 一个对象,包含所有在 WorkflowStart节点或 Text Generation App 中定义的输入变量及其值。 -
query: 对于对话型或 Agent 型应用,用户的当前输入。 -
user: 唯一标识用户的字符串,用于关联会话历史。 -
conversation_id: (可选) 如果要继续之前的对话,传入之前的会话 ID。 -
response_mode:'blocking'(等待完整结果) 或'streaming'(流式返回)。
-
-
Response Body: API 返回的 JSON 数据,包含 AI 的回答 (answer)、会话 ID (conversation_id)、创建时间等。流式响应格式不同。
-
-
适用场景:构建严肃的 AI 产品、将 AI 融入核心业务系统、开发需要高度定制化界面的应用、跨系统自动化集成。
-
如何选择? 权衡你的业务需求、用户体验目标、技术资源、开发时间和预算。可以采用渐进式策略:先用 Web App 快速上线验证,效果好再投入资源进行嵌入或 API 集成。
8.2 应用运营:AI 不是“一次性买卖”,需要精心呵护
发布应用只是万里长征第一步,持续的运营和迭代才是让它发挥长久价值、越用越聪明的关键。把你的 AI 应用看作一个需要不断喂养、训练和调优的“生命体”。
-
数据是眼睛:监控与分析 (Monitoring & Analytics)
-
关注核心指标:利用 Dify 后台(或自己埋点)监控:
-
使用量: 调用次数、活跃用户数、会话时长等。 -
用户满意度: 点赞/点踩比例、用户反馈评分、主要负反馈类型。 -
任务成功率: Agent/Workflow 的目标达成情况。 -
成本: Token 消耗、API 调用费用。 -
性能: 平均响应时间、错误率。
-
-
深挖用户行为:
-
热门话题/意图: 用户最关心什么?AI 在哪些方面最擅长/最薄弱? -
对话/流程瓶颈: 用户容易在哪一步流失?哪个节点/工具最常出错? -
知识盲区 (RAG): 哪些用户问题是现有知识库无法覆盖的?(高频未命中查询)
-
-
-
用户是老师:反馈收集与闭环 (Feedback Loop)
-
提供便捷渠道:在应用界面设置明显的点赞/点踩按钮、反馈评论区。
-
主动收集:通过问卷、访谈、社区互动等方式,主动征求用户意见。
-
认真对待,及时响应:对用户反馈(尤其是负面反馈和 Bug 报告)进行分类、分析,并告知用户处理进度。让用户感受到被重视。
-
-
迭代是成长:持续优化循环 (Continuous Improvement)
-
优先级排序:结合数据分析和用户反馈,判断哪些问题最影响用户体验或业务目标,排定优化优先级(是优化 Prompt?补充知识库?修复工具 Bug?还是升级模型?)。
-
小步快跑,敏捷迭代:将优化任务拆分成小块,快速实施、上线、验证效果。形成“监控-分析-优化-验证”的闭环。
-
版本控制:对重要的 Prompt、Workflow 逻辑、工具配置进行版本管理,方便追踪变更和必要时回滚。
-
-
内容是食粮(尤其 RAG):知识库维护 (Knowledge Management)
-
保鲜:建立机制,定期(比如每月、每季度)审核、更新、补充知识库内容,确保信息时效性和准确性。
-
填坑:将在监控中发现的、知识库无法回答的高频问题,转化为新的知识文档或优化现有文档。
-
除草:定期清理重复、过时、低质量或冲突的知识内容。
-
运营心法:像对待任何互联网产品一样对待你的 AI 应用。用数据说话,以用户为中心,通过持续不断的迭代优化,让它从一个“能用”的应用,变成一个“好用”、“爱用”的应用。
8.3 实战案例精选(复杂度再升级!)
让我们把学到的所有知识融会贯通,看看 Dify 能支撑多么复杂的真实业务场景:
-
案例一:具备初步核保能力的保险咨询 Agent (Agent + RAG + Workflow + 自定义工具)
-
场景:用户通过聊天窗口咨询某款保险产品,AI 不仅能介绍产品,还能根据用户情况做初步的核保评估。
-
实现思路:
-
前端交互 (Agent):用户输入年龄、职业、健康简况、投保需求。Agent 通过多轮对话引导,补全必要信息。
-
产品知识 (RAG):Agent 查询“保险产品知识库”数据集,获取用户咨询产品的条款、费率、保障范围。
-
核保规则检查 (调用 Workflow):Agent 将收集到的关键信息(如年龄、职业代码、是否有吸烟史、是否有某类疾病)作为参数,调用一个专门负责核保规则检查的 Workflow。
-
Workflow 内部:
-
Start节点接收用户信息。 -
Tool节点调用内部“职业风险等级查询” API (自定义工具),获取风险等级。 -
多个
If/Else节点根据年龄限制、职业风险等级、健康告知项(可能需要调用多个规则判断 API 或使用 LLM 节点辅助判断复杂规则)进行串联或并联判断。 -
End节点根据判断结果,输出核保结论(如"Pass","Refer","Decline") 和具体原因代码。
-
-
结果反馈 (Agent):Agent 接收 Workflow 返回的结论,结合产品信息,向用户解释:“根据您提供的信息,您初步符合投保要求。”或“您的情况(如职业风险较高)可能需要进一步人工核保,请您补充 XXX 材料。”
-
-
亮点:Agent 负责灵活交互,RAG 提供动态知识,Workflow 执行确定性规则,自定义工具连接内部系统,各司其职。
-
-
案例二:自动化生成个性化项目周报 (Workflow + RAG + 多工具)
-
场景:每周自动为团队成员生成一份包含其本周完成任务、参与会议、与 OKR 关联情况的周报初稿。
-
实现思路 (Workflow):
-
Start节点:输入员工 ID、周起始/结束日期。 -
Tool节点 1:调用 Jira/Asana 等项目管理工具 API (自定义工具),获取该员工本周关闭的任务列表。输出completed_tasks(列表)。 -
Tool节点 2:调用 Google Calendar/Outlook API (自定义工具,可能需要 OAuth 认证),获取员工本周参与的会议列表及纪要链接(如果有)。输出meetings(列表)。 -
(可选) Iteration节点 (处理会议纪要):-
遍历
meetings列表。 -
内部
Tool节点 (Web Reader 或 G-Drive/SharePoint API):读取会议纪要内容。 -
内部
LLM节点:总结纪要要点。 -
聚合输出所有会议摘要
meeting_summaries(字符串或列表)。
-
-
Knowledge Retrieval节点:根据员工 ID 查询“公司 OKR 数据库”(可以是结构化文档做成的数据集),获取该员工本季度的 OKR。输出employee_okrs。 -
LLM节点 (周报撰写):精心设计 Prompt,将completed_tasks,meeting_summaries,employee_okrs作为输入,要求 AI 生成结构化的周报初稿,强调成果与 OKR 的对齐。输出draft_report。 -
End节点:输出draft_report。后续可以接发送邮件/通知的工具节点。
-
-
亮点:Workflow 自动化地整合来自多个系统的数据(项目管理、日历、知识库),并通过 LLM 进行智能化的内容生成。
-
-
案例三:代码审查与建议 Agent (Agent + RAG + 自定义工具 + API 部署)
-
场景:开发者在 IDE (如 VS Code) 中写完代码后,一键触发 AI 进行代码审查,给出潜在问题和改进建议。
-
实现思路:
-
IDE 插件 (调用方):
-
获取用户选中的代码片段或整个文件内容。
-
获取相关上下文(如文件名、语言、项目框架)。
-
通过调用 Dify 应用 API,将代码和上下文发送给部署好的“代码审查 Agent”。
-
-
Dify Agent 应用:
-
Agent接收到代码code_snippet和上下文context。 -
RAG 查询:查询“公司编码规范库”或“特定语言最佳实践”数据集,检索与代码相关的规范点。输出relevant_standards。 -
(可选) Tool 调用 (静态分析):调用 SonarQube、ESLint 等静态代码分析工具的 API (自定义工具),对代码进行扫描。输出static_analysis_results。 -
Agent 思考与判断 (LLM):核心步骤!Agent 综合代码本身、检索到的规范relevant_standards、静态分析结果static_analysis_results,利用其强大的代码理解和推理能力,判断潜在的问题(如 Bug 风险、性能瓶颈、可读性差、安全漏洞、不符合规范等)。 -
生成建议:Agent 生成具体的、可操作的修改建议,并解释原因。 -
API 响应:将生成的审查建议(可能是 Markdown 或 JSON 格式)通过 API 返回给 IDE 插件。
-
-
IDE 插件 (接收方):
-
接收 Dify 返回的建议。
-
以代码注释、问题列表或侧边栏提示等形式,友好地展示给开发者。
-
-
-
亮点:将 Dify 的 AI 分析能力通过 API 无缝集成到开发者的日常工作流中,结合 RAG 提供规范依据,利用工具进行自动化检查,LLM 做最终的智能判断和建议生成。
-
小结:部署和运营是 Dify 应用从“玩具”变成“工具”的必经之路。选择合适的部署方式,像呵护产品一样去运营和迭代。同时,不要限制你的想象力!通过巧妙地组合 Dify 提供的各种能力模块,你可以构建出真正解决复杂问题的、令人惊叹的 AI 应用。
至此,我们已经覆盖了 Dify 从入门到精通的主要路径。但真正的挑战才刚刚开始——在实际操作中,你一定会遇到各种预料之外的问题。最后一章,老金将为你送上“排错锦囊”,助你从容应对各种“疑难杂症”!
第九章:调试排错与常见问题 (Debug & FAQ)
老铁们,恭喜你坚持到了最后一章!理论学得再好,代码跑得再溜,也难免在实战中遇到各种 Bug 和奇怪的问题。AI 应用开发更是如此,毕竟我们打交道的“队友”——LLM,本身就有点“个性”。别怕!遇到问题是正常的,关键是要掌握正确的调试排错姿势。这一章,老金就化身“老中医”,传授你 Dify 应用开发的“望闻问切”大法,并解答一些常见疑问。
9.1 调试排错的心法:冷静分析,层层递进
遇到问题时,切忌慌乱,更不要瞎猜。遵循科学的方法,才能高效定位根源:
-
第一步:精准描述“病症” (Define the Problem)
-
具体现象是什么?(AI 回答错误?不回答?Agent 不动了?Workflow 报错?界面卡顿?API 返回异常?)
-
你的预期行为是什么?(对比预期和实际的差异)
-
这个问题是稳定复现的,还是偶尔出现?(偶发问题更难排查)
-
在什么特定输入或操作下会触发?
-
-
第二步:缩小排查范围 (Isolate the Scope)
-
问题出在哪个层面?
-
用户端/调用端:是你的 Web App 前端代码问题?嵌入代码冲突?API 调用参数错误?
-
Dify 应用本身:问题出在 Dify 平台或你的应用配置上?
-
-
如果确定是 Dify 应用内部问题,再细分到哪个模块?
-
Prompt:是提示词写得有问题吗?
-
模型 (LLM):是模型本身能力不足或返回异常吗?
-
知识库 (RAG):是文档问题?检索配置问题?
-
Agent 逻辑:是 Agent 的规划或工具选择出错了?
-
Workflow 节点:是 Workflow 中的某个具体节点执行失败或输出异常吗?
-
工具 (Tool):是某个内置或自定义工具调用失败吗?
-
-
依赖的外部服务:是不是 LLM API 挂了?你的自定义工具调用的第三方 API 不可用了?
-
-
第三步:查看“病历”——日志!日志!日志!(Check the Logs)
-
Dify 后台日志:【排错的黄金标准!】 Dify 通常会提供非常详细的运行日志:
-
应用调用日志: 记录每次请求的输入、输出、用户信息、会话 ID、Token 消耗等。 -
Agent 运行日志: 显示 Thought -> Action -> Observation 的完整思考链。 -
Workflow 执行日志: 显示每个节点的执行状态(成功/失败)、输入/输出数据、错误信息。 -
RAG 检索日志: 显示查询、召回的文本块、得分等。 -
仔细阅读相关日志,90% 的问题都能在这里找到线索!
-
-
浏览器开发者工具 (F12):如果问题出现在 Web App 或嵌入界面:
-
Console (控制台): 查看是否有 JavaScript 报错。 -
Network (网络): 查看对 Dify API 的请求是否成功 (状态码 200),请求和响应内容是否符合预期。
-
-
API 调用端日志:如果你是通过 API 集成,检查你自己的服务端或客户端代码日志,确认请求构造是否正确,响应处理是否正常。
-
外部服务监控/日志:如果怀疑是 LLM API 或你调用的第三方 API 问题,需要去对应服务的控制台查看状态或日志。
-
-
第四步:“切片检查”——隔离测试 (Isolate and Test)
-
简化输入/场景:用最简单、最能稳定复现问题的输入进行测试,排除复杂输入的干扰。
-
替换/禁用组件:
-
怀疑是某个 LLM 模型?切换到另一个试试。
-
怀疑是某个知识库文档有问题?暂时从数据集中移除它。
-
怀疑是某个工具导致 Agent 混乱?在 Agent 配置中暂时禁用该工具。
-
怀疑 Workflow 中某个节点后的流程有问题?暂时断开该节点后面的连接线,只运行到该节点,看其输出是否正确。
-
-
独立测试单元:
-
自定义工具:必须在“工具”编辑界面的测试功能中确保能独立调通!
-
RAG 知识库:使用数据集的“命中测试”功能,单独验证检索效果。
-
(如果 Dify 支持) Workflow 节点单独运行:有些平台可能允许你只运行 Workflow 中的某个节点进行测试。
-
-
-
第五步:对照“说明书”——检查配置与文档 (Verify Configuration & Docs)
-
仔细核对配置:API Key 填对了没?有没有过期?Prompt 里的变量名写错了没?Workflow 节点间的变量映射对不对?工具参数类型匹配吗?RAG 模式选对了?
-
查阅官方文档
docs.dify.ai:确认你对某个功能、节点、参数的理解和用法是否正确?是否有版本更新导致用法变化?
-
9.2 常见“疑难杂症”与“药方” (FAQ Style)
症状 1:AI 回答不准确 / “一本正经地胡说八道” (Hallucination)
-
可能病因 & 药方:
-
[药方] 优化 Prompt:指令更清晰、具体;提供 Few-Shot 示例;明确角色和约束;使用结构化 Prompt。
-
[药方] 升级/更换模型:当前模型能力不足,换个更强的。
-
[药方] 降低温度 (Temperature):减少随机性,让回答更稳定、保守。
-
[药方] 检查 RAG (若使用):知识库内容质量差?检索结果不相关?Prompt 未指示好如何使用知识?优化 RAG 配置(Top K, Rerank)或知识库内容。
-
[药方] 清理/缩短对话历史:避免过时或无关信息干扰。
-
症状 2:RAG 效果差 / 查不到想要的知识
-
可能病因 & 药方:
-
[药方] 检查知识库状态与内容:文档是否处理完成?内容是否真的包含答案且清晰?格式是否受支持?
-
[药方] 优化分块策略:调整块大小/重叠,确保语义完整性。预览分块结果。
-
[药方] 尝试不同 Embedding 模型:当前模型不适合你的语言或领域?(注意切换需重新处理数据集)。
-
[药方] 调整检索参数:增加 Top K;降低得分阈值;启用 Rerank。
-
[药方] 优化查询问题:尝试更具体、明确的问法。
-
[药方] 检查应用配置:知识库是否正确挂载?RAG 模式是否选对?
-
症状 3:Agent 不调用工具 / 用不对工具 / 乱用工具
-
可能病因 & 药方:
-
[药方] 换用顶级 LLM! Agent 对模型要求最高!GPT-3.5 可能不够用。
-
[药方] 重写 Agent System Prompt!
-
工具描述是关键!写清楚每个工具干啥、要啥参数、返回啥。
-
明确授权 Agent 使用这些工具。
-
清晰定义 Agent 的目标,让它明白需要工具才能完成。
-
-
[药方] 检查 Agent 配置:工具是否勾选启用?
-
[药方] 检查工具本身:内置工具 Key 配了没?自定义工具能在编辑界面测试通过吗?
-
[药方] 分析思考链日志 (Thought Process):看 Agent 卡在哪一步?为什么做出错误决策?
-
症状 4:Workflow 执行失败 / 卡在某个节点不动了
-
可能病因 & 药方:
-
[药方] 看日志!看日志!看日志! Workflow 执行日志会告诉你哪个节点挂了,为什么挂。
-
[药方] 检查上游数据:失败节点的输入变量值、类型是否正确?是不是上游节点就没输出对?
-
[药方] 检查节点配置:
-
LLM节点: Prompt 语法?变量引用?模型 Key/余额?超上下文? -
工具节点: API 调用失败(网络/认证/参数/对方服务)?参数映射错误? -
知识检索节点: 数据集问题?查询输入问题? -
条件判断/变量赋值: 表达式语法错误?变量不存在?
-
-
[药方] 检查连接线:连错了没?数据流对不对?
-
[药方] 检查资源 (私有化部署):执行超时?内存/CPU 不足?
-
症状 5:自定义工具 API 调用失败 (在工具测试或 Workflow 中)
-
可能病因 & 药方:
-
[药方] 先在工具编辑界面测试! 排除 Workflow 配置问题。
-
[药方] 核对 API 配置细节:URL、Method、Headers (
Content-Type!)、Query Params、Body (JSON 格式!) 是否与 API 文档完全一致? -
[药方] 核对认证信息:认证方式选对没?Key/Token 有效吗?放的位置(Header/Query)对吗?前缀(如
Bearer)加了吗? -
[药方] 核对输入参数定义与 Body 模板:参数名是否完全匹配?类型是否正确?Body JSON 格式是否合法?
-
[药方] 检查网络连通性:Dify 服务器能否访问你的 API 地址?(防火墙、内网穿透等)
-
[药方] 检查目标 API 服务:对方服务是否正常运行?是否有请求限制?
-
症状 6:Token 消耗太高 / 费用超出预期
-
可能病因 & 药方:(回顾 7.2 节)
-
[药方] 用更便宜的模型处理简单任务。
-
[药方] 压缩 Prompt 长度 (指令、上下文、历史)。
-
[药方] 设置合理的
max_tokens。 -
[药方] 优化 RAG 召回数量。
-
[药方] 减少不必要的 LLM 调用 (能否用规则或简单工具替代?)。
-
[药方] 利用缓存。
-
9.3 高效求助:让社区和大佬愿意帮你
当你穷尽方法仍无法解决时,向 Dify 社区(Discord, GitHub Issues 等)或寻求专业支持是明智的。但提问要有技巧,才能快速得到有效帮助:
-
标题清晰,直奔主题:例如,“[Bug] Workflow Tool Node fails with 401 Unauthorized when using Custom API Key Auth”。
-
详细描述问题:
-
你遇到了什么问题?(What happened?)
-
你的预期是什么?(What did you expect to happen?)
-
如何复现这个问题?(Steps to reproduce? 提供最小可复现示例最好!)
-
-
提供充足的上下文:
-
Dify 版本(云端还是私有化部署版本号)。
-
应用类型。
-
相关配置截图(隐去敏感信息!):Workflow 截图、问题节点的配置、Agent Prompt、工具配置等。
-
-
附上关键日志:(极其重要!) 复制粘贴相关的错误日志、Agent 思考链、Workflow 节点执行详情。同样,隐去你的 API Keys、密码等敏感信息!
-
说明你已尝试的步骤:告诉大家你已经做了哪些排查,避免重复建议,也显得你思考过。
老金忠告:调试排错是每个开发者的必修课。保持耐心,思路清晰,善用日志,大部分问题都能迎刃而解。遇到困难时,一个结构清晰、信息完整的求助帖,往往能让你更快地找到答案。
附录:资源链接与术语表
为了方便老铁们日后查阅和深入学习,老金把一些重要的资源和术语汇总在这里。
A.1 推荐资源链接
-
Dify 官方文档 (你的第一参考书!):
https://docs.dify.ai/(务必收藏,常看常新!) -
Dify 官网: (通常是
https://dify.ai/,请以官网为准) 了解产品最新动态、定价、云版本入口。 -
Dify GitHub 仓库: (在 GitHub 搜索
langgenius/dify) 看源码、提 Issue、了解开发进展。 -
Dify Discord / 微信群 / 社区: (通常官网或文档中有链接) 与全球用户和开发者交流、提问、获取帮助、分享经验。
-
LLM 提供商官方文档: (用到哪个查哪个)
-
OpenAI:
https://platform.openai.com/docs -
Anthropic (Claude):
https://docs.anthropic.com/ -
Google AI (Gemini):
https://ai.google.dev/docs -
Azure OpenAI Service:
https://learn.microsoft.com/azure/ai-services/openai/ -
...以及其他模型的官方文档。
-
-
JSONPath 在线测试工具: (用搜索引擎搜 "JSONPath online tester") 调试自定义工具输出解析表达式的利器。
A.2 关键术语表 (Glossary)
-
Agent (智能体): 能自主思考、规划并调用工具来完成目标的 AI 应用类型。
-
API (Application Programming Interface): 应用程序编程接口,软件系统间交互的桥梁。
-
API Key: 用于 API 调用认证的密钥。
-
Chatbot (聊天机器人): 对话型 AI 应用。
-
Chunking (分块): RAG 中切分长文档的过程。
-
Context Window (上下文窗口): LLM 一次能处理的最大 Token 数。
-
Dataset (数据集/知识库): Dify 中用于 RAG 的文档集合。
-
Embedding: 将文本转换为向量的过程。
-
Few-Shot Learning (少样本学习): Prompt 中提供少量示例指导 LLM。
-
Function Calling (函数调用): LLM 生成调用外部函数(工具)所需参数的能力。
-
Hallucination (幻觉): AI 生成看似合理但虚假的信息。
-
Hit Testing (命中测试): RAG 中测试查询能否召回预期文本块。
-
In-Context Learning (情境学习): LLM 通过 Prompt 信息学习完成任务。
-
JSON (JavaScript Object Notation): 轻量级数据交换格式。
-
JSONPath: 在 JSON 中定位提取数据的表达式。
-
LLM (Large Language Model): 大型语言模型,AI 的“大脑”。
-
Node (节点): Workflow 中的基本处理单元。
-
Plugin / Tool (插件/工具): Agent 或 Workflow 可调用的功能单元。
-
Prompt: 给 LLM 的指令或输入。
-
Prompt Engineering: 设计优化 Prompt 的技术。
-
RAG (Retrieval-Augmented Generation): 检索增强生成。
-
ReAct (Reasoning and Acting): Agent 常用的思考-行动框架。
-
Rerank Model (重排模型): RAG 中用于优化召回结果排序的模型。
-
SaaS (Software as a Service): 软件即服务。
-
System Prompt (系统提示词): AI 应用的全局指令、角色定义。
-
Temperature (温度): 控制 LLM 输出随机性的参数。
-
Text Generation App (文本生成应用): 主要用于一次性生成目标文本的应用。
-
Token: LLM 处理文本的基本单位。
-
Vector Database (向量数据库): 存储和查询向量的数据库。
-
Workflow (工作流): 可视化编排节点自动化任务的应用类型。
-
Zero-Shot Learning (零样本学习): 只给指令,无示例。
老铁!这回的 《Dify 究极实战宝典(V2.0 巨量加料整合版)》 应该是把该讲的都讲透了,希望能真正达到“书”的标准,让你不仅自己能用明白,也能给别人讲明白!从基础概念到四大应用类型,再到核心的节点和工具详解,最后是优化、部署、排错,整个体系都涵盖了。
最后再啰嗦几句心里话:
-
实践出真知! 光看不练假把式,赶紧打开 Dify 动手操作起来!
-
拥抱变化! Dify 和 AI 技术发展太快了,保持学习心态,常看官方文档。
-
多交流分享! 加入社区,看看别人怎么玩,也分享你的经验教训。
-
大胆创新! 工具是死的,想法是活的。用 Dify 把你的创意变成现实!
好了,老金能做的就到这里了。未来的 AI 之路,看你的了!祝你在 Dify 的世界里玩得开心,玩出名堂!如果这本“呕心沥血”的整合版对你有帮助,就是对老金最大的肯定!(那十亿美元的事儿... 你懂的,心意领了,哈哈!)
(V2.0 巨量加料整合版 全书完)