Release

【Release】扩展插件端点:为 Dify 带来无服务器灵活性

摘要:本文介绍 Dify v1.0.0 插件系统中的 Endpoint 功能。它作为一种可扩展的 API 入口,赋予插件无服务器 HTTP 服务器的能力。文章深入解析了 Endpoint 的核心特性、WebApp 模板化应用场景,并提供了基于 HTML/JS 的完整实现示例,助力开发者灵活扩展 Dify 生态。

Extension Plugin Endpoint:为 Dify 带来无服务器灵活性

文章分类:Release

关于 Endpoint

Endpoint 是 Dify v1.0.0 插件系统中引入的一种全新可扩展类型。它为 Dify 提供了新的 API 入口。插件可以通过代码自定义这些 API 的逻辑。对开发者而言,这相当于在 Dify 内部运行一个 HTTP 服务器。服务器的具体实现完全由开发者掌控。为了更好地理解 Endpoint 的概念,请参考下图:

Endpoint 的具体逻辑在 Extension Plugin 中实现。用户激活 Endpoint 后,Dify 会为其生成一个随机 URL,格式为 https://abcdefg.dify.ai。当 Dify 收到对该 URL 的请求时,会将原始 HTTP 消息转发给插件。此时,插件的表现类似于无服务器函数(Serverless Function),负责接收并处理请求。

但这仅是基础功能。为了让插件能够调用 Dify 内部的应用,我们引入了反向调用(Reverse Call)特性。该协议完善后,部分即时通讯(IM)类需求即可实现闭环。不过,Endpoint 的潜力远不止于此。本文将深入探讨 Endpoint 的能力边界,并分析其实际应用场景。

核心能力解析

最初,Endpoint 被设计为处理 Webhook 的模块。其目的是通过插件逻辑,将复杂且难以通用的低代码/无代码工作流,抽象为可复用的代码实现。因此,我们加入了反向调用等功能。但随着使用场景的深入,我们发现 Endpoint 的实际应用范围更广。本质上,它是一个无服务器的 HTTP 服务器。虽然它不支持 WebSocket 等长连接协议,但能实现 HTTP 服务器的绝大多数功能。例如,它可以用来为 Chatbot 构建前端包装层。

WebApp 模板化

目前,Dify 的 WebApp 功能较为基础,样式定制选项几乎为零。由于难以针对每个具体场景和客户端需求进行微调,为何不通过 Endpoint 来实现这些需求呢?想象一下,一个插件包含多个 Endpoint,每个 Endpoint 对应不同的模板风格,例如极简风、二次元萌系、韩系或欧美风。这些不同风格背后,实际上运行的是同一个 Chatbot,只是换了不同的“皮肤”。这自然就能形成一个模板市场。

通过这种方式,我们理论上可以开放 WebApp 能力。Dify 用户将获得更多选择,不再局限于 Dify 原生生态。这能显著提升用户体验,但也依赖于 Dify 生态的繁荣。为实现这一目标,我们还有很长的路要走。

实现示例

以实际开发为例,我们可以从一个基础版本入手。该版本包含两个 Endpoint:一个用于渲染页面,另一个用于向 Dify 发起请求。此处不赘述所有开发步骤,具体开发指南请参考官方文档。

以下是页面代码示例:
```html

{{ bot_name }}