Dify 到了 V1.16.1 版本,一个明显的变化是:工作流(Workflow)和智能体(Agent)之间的边界变得更清晰了。以前你可能习惯在智能体里一股脑塞满提示词和工具,或者把复杂逻辑全写在工作流里。现在,Skill(技能)这个模块,恰好成了连接两者的桥梁。
简单来说,工作流负责“把一件事做对”,而 Skill 负责“把做对的事封装起来,随时复用”。这篇文章就聚焦一个实际问题:如何把你在 Dify 里已经调试好的工作流,封装成一个可以被智能体调用的技能。
在动手之前,先想清楚“为什么”很重要。假设你写了一个“客户邮件分类与自动回复”的工作流,里面包含了判断意图、查询知识库、调用大模型生成回复、人工审核分支等多个节点。
如果不封装,你每次想让智能体执行这个任务,都要在智能体的 Prompt 里写一遍完整的步骤描述,或者把工作流作为一个子流程嵌入。这样做有两个麻烦:
而 Skill 的职责就是解决这两个问题。它本质上是一个“可执行的包”,里面封装了工作流的完整逻辑、输入输出定义,以及一段描述“什么时候该用我”的说明。智能体看到这个 Skill,就像调用一个函数一样,传入参数,拿到结果,中间过程完全黑盒化。
不是所有工作流都适合封装。在 V1.16.1 中,适合转为 Skill 的工作流通常具备以下特征:
在 Dify 的工作流编辑器里,完成你的工作流后,需要做两件事:
v1.0
这是最核心的一步,在 V1.16.1 的 New Agent 界面里操作:
customer_email_reply
email_content
配置完成后保存,这个 Skill 就正式注册到了你的智能体里。
现在,你的智能体就像一个工具箱,里面既有内置的工具(如计算器、网页搜索),也有你刚创建的 Skill。当你向智能体提问时,它会分析你的意图,然后根据每个 Skill 的描述,决定是否调用。
比如,你输入“帮我回复一下昨天李总发来的那封关于项目延期的邮件”。智能体分析后,认为 customer_email_reply 这个 Skill 的职责匹配,于是它会:
整个过程,你不需要关心工作流内部是调用了哪些模型、走了哪些分支。你只需要关心 Skill 的输入和输出是否正确。
这是很多人会混淆的地方。在 V1.16.1 中,我们可以简单区分:
一个简单的判断标准是:如果这个任务的逻辑,用一段不超过 3 行的自然语言就能在智能体 Prompt 里说清楚,那它可能更适合作为一个工具。如果需要画一张流程图才能解释清楚执行步骤,那它就应该被封装成一个 Skill。
Skill 的最大优势是复用。你可以在多个不同的智能体里添加同一个 Skill,每个智能体都能获得一致的能力。当工作流逻辑需要更新时,你只需要修改并重新发布那个工作流应用,所有引用它的智能体都会自动获得新版本的能力。
但这也带来了维护成本:你需要管理这些工作流应用的版本,确保 API 密钥安全,以及处理工作流执行失败时的错误反馈。因此,不要为了“封装”而封装。如果一个工作流只在一个智能体里被用到一次,且逻辑简单,直接在智能体里用 Prompt 引导可能更轻量。
结合以上分析,适合独立成 Skill 的执行逻辑通常具备这些特点:
把工作流封装成技能,本质上是在为你的 AI 应用做“模块化设计”。它让工作流回归到“逻辑执行器”的角色,让智能体专注于“决策与调度”,各司其职。下次当你觉得某个智能体越来越臃肿、Prompt 越来越长时,不妨回头看看,是不是有些“流程性”的任务,可以独立成一个 Skill 了。
Δ
Ctrl+D