Dify
作为一个开源的 LLM 应用开发平台,凭借其从 Agent
构建、AI workflow
编排到 RAG
检索和模型管理的全方位能力,在开发者社区中获得了广泛关注。它以优雅的设计和流畅的体验著称,同时开发团队惊人的迭代速度也让其功能不断完善。
然而,随着应用场景的复杂度提升, Dify
在工作流编排方面的一个核心限制逐渐显现:平台当前不支持多 Chatflow
之间的编排与相互调用。这意味着所有业务逻辑都必须集成在单一的 Chatflow
画布中。当逻辑变得复杂时,这个画布将迅速膨胀,导致可维护性急剧下降。
(躊躇なく Dify
提供了一种将 Chatflow
コンバート Workflow
并发布为工具节点 (Tool) 的变通方案,但该方法存在两个关键缺陷:
- 无法实现流式输出:以工具节点形式调用的
Workflow
非対応Chatflow
原生的流式输出 (Streaming Output) 能力。这会牺牲用户体验,尤其是在需要即时反馈的对话式应用中。 - 不支持多个输出节点::
Workflow
的单一输出限制了其在复杂数据处理和分支逻辑场景下的应用。
为了突破这些限制,社区开发者推出了一款名为 Chatflow Invoker
的插件。它允许将任何本地或远程的 Chatflow
封装为流程中的一个独立节点,实现了跨 Chatflow
的无缝调用,从而有效提升了 AI 应用开发的模块化、灵活性和可维护性。
Chatflow Invoker
插件的核心优势在于:
- 気付く
Chatflow
的模块化:复杂的业务逻辑可以被拆解为多个独立的Chatflow
单元,显著提高逻辑的复用性。 - 支持跨
Chatflow
各論:在不同的Chatflow
之间可以轻松传递数据和指令,实现更灵活的业务流程。 - 保持完整的流式输出体验:即使在跨
Chatflow
调用的场景下,依然能保留原生的流式输出特性,保障了终端用户的交互体验。
使用方法
Chatflow Invoker
支持本地和远程两种调用模式,覆盖了单实例和分布式部署的不同需求。
本地 Chatflow 调用
本地调用适用于在同一个 Dify
实例内部对不同的 Chatflow
进行编排。
输入参数:
APP ID
(必填):目标Chatflow
的应用 ID。该 ID 可以从Dify
应用的 URL 中直接获取。Prompt
(必填):发送给目标Chatflow
的查询或指令。Inputs JSON
(可选):一个 JSON 格式的字符串,用于传递给Chatflow
开始节点的输入参数。Conversation ID
(可选):用于维持多轮对话的会话 ID。如果需要基于之前的对话历史继续交互,必须提供上文消息的conversation_id
.
操作手順:
- 定位目标
Chatflow
なAPP ID
。例如,在https://dify/app/f011f58c-b1ce-4a9b-89b2-f39fce8466a8/workflow
这个 URL 中,f011f58c-b1ce-4a9b-89b2-f39fce8466a8
就是APP ID
. - ある
Chatflow Invoker
节点中配置Inputs JSON
参数,以定义需要接收的变量。
- 在回复节点中,确保选择
stream_output
变量,以接收并向下游传递流式输出的结果。
- 执行测试,可以看到插件成功调用了另一个
Chatflow
,并完整地返回了流式输出内容。
远程 Chatflow 调用
远程调用功能进一步扩展了 Dify
的应用边界,允许用户构建跨不同 Dify
实例的分布式 AI 应用系统。
输入参数:
URL
(必填):远程Dify
实例的消息 API 地址,例如http://127.0.0.1:5001/v1/chat-messages
.API Key
(必填):目标Chatflow
的 API 访问密钥。Prompt
(必填):发送的查询或指令。User
(必填):用于标识终端用户身份的字符串,便于后续进行日志检索和使用统计。Inputs JSON
(可选):传递给Chatflow
开始节点的输入参数。Conversation ID
(可选):用于保持多轮对话状态的会话 ID。
操作手順:
- 在需要被调用的远程
Chatflow
的“访问 API”菜单中生成一个API Key
.
- 将远程
Dify
的 API 地址和生成的API Key
填入Chatflow Invoker
插件的相应字段。
- 輸入
Prompt
并执行,即可实现远程调用,同时保持流式输出。
与本地调用相比,远程调用一个额外的好处是,所有调用记录都会在被调用的 Dify
实例中留下完整的日志,便于调试和监控。
開発指示
目前,为 Dify
开发插件的参考文档相对较少,AI 模型也缺乏相关的训练数据。不过,Dify
的官方代码仓库提供了丰富的插件样例,是学习和开发的重要资源。
ある Chatflow Invoker
的开发过程中,曾尝试使用 app-selector
组件让用户通过界面选择 Chatflow
,但该组件在工具节点场景下存在缺陷,导致无法选中应用。因此,最终采用了手动填写 APP ID
的方式作为替代方案。
Chatflow Invoker
插件现已在 Dify
官方插件市场上线,用户可以直接搜索并安装使用。其源代码也已在 GitHub 上开放。
源码地址:https://github.com/yzddmr6/chatflow_invoker