本文档提供了从零开始Dify插件开发的详细教程,以创建Telegraph发布插件为例,涉及环境准备、项目初始化、虚拟环境配置、插件核心逻辑开发、本地运行调试、插件元信息完善以及打包发布等环节。
面向 LLM 的说明: 你也可以在这里使用我们构建的 prompt 来协助你开发插件:Dify 插件开发:Prompt在开始之前,您可以随时查阅我们提供的 开发者速查表 (Cheatsheet) 获取常用指令和信息,或在遇到更复杂问题时参考完整的开发者文档。
dify-plugin-daemon
或“插件开发 SDK”。更详细的开发环境准备指南,请参考初始化开发工具。
dify-plugin-darwin-arm64
。在终端中,进入文件所在目录,并执行以下命令赋予其执行权限:
chmod +x <downloaded_filename>
的命令。
.exe
文件后通常可直接运行。
./dify-plugin-darwin-arm64
替换为您下载的实际文件名或路径):
v0.0.1-beta.15
),则说明安装成功。
提示 (Tips):为方便起见,本文后续将使用
- macOS 安全提示: 若在 macOS 上首次运行时提示“Apple 无法验证”或“无法打开”,请前往“系统设置”→“隐私与安全性”→“安全性”部分,找到相关提示并点击“仍要打开”或“允许”。
- 简化命令: 您可以将下载的二进制文件重命名为一个更短的名称(例如
dify
或dify-plugin
),以便后续使用。示例:mv dify-plugin-darwin-arm64 dify
,之后即可使用./dify version
。- 全局安装 (可选): 如果希望在系统的任何路径下都能直接运行该命令(例如,直接输入
dify
而不是./dify
),可以将重命名后的文件移动到系统的PATH
环境变量包含的目录中,例如/usr/local/bin
(macOS/Linux) 或添加到 Windows 的环境变量中。
- 例如 (macOS/Linux):
sudo mv dify /usr/local/bin/
- 配置完成后,直接在终端输入
dify version
应能成功输出版本号。
./dify
作为 Dify 插件开发脚手架命令的示例。请根据您的实际情况替换为对应的命令。
telegraph
your-name
A Telegraph plugin that allows you to publish your content easily
Select language
时,请选择 python
。
Select plugin type
时,对于本教程,请选择 tool
。
telegraph
(或您指定的插件名) 的新文件夹,这就是您的插件项目。
venv
)
(venv)
字样。
requirements.txt
文件已包含插件开发所需的基础库 dify_plugin
。激活虚拟环境后,执行以下命令安装:
telegraph
文件夹。Cmd+Shift+P
, Windows/Linux: Ctrl+Shift+P
)。Python: Select Interpreter
。.venv/bin/python
或 venv\Scripts\python.exe
)。如果列表没有自动显示,您可以选择 Enter interpreter path...
手动查找。requirements.txt
文件并提示您安装其中的依赖项。如果出现提示,请确认安装。
pip install
命令和运行 python -m main
的操作都在已激活的虚拟环境中执行。
your-telegraph
your-telegraph
的 Python 库来与 Telegraph API 交互。(这是一个假设的库名,请确保您实际使用的库是有效的)。
your-telegraph
是一个简化 Telegraph API 操作的 Python 包装器,可以用几行代码轻松发布内容。
其基本用法可能如下:
requirements.txt
: 打开项目根目录下的 telegraph/requirements.txt
文件,在 dify_plugin
下面添加一行,写入刚刚安装的库名:
telegraph_access_token
。我们需要在 Provider 配置中定义这个凭证,以便用户在使用插件时可以输入。关于 Provider 配置的更多信息,请参考一般规范定义。
telegraph/provider/telegraph.yaml
文件。
credentials_for_provider
: 在文件末尾(或适当位置)添加以下内容:
telegraph_access_token
: 凭证的唯一标识符,代码中通过 self.runtime.credentials["telegraph_access_token"]
来访问用户输入的值。type: secret-input
: 表示在 Dify 界面上会显示为密码输入框。required: true
: 表示用户必须填写此凭证才能使用该插件提供的工具。label
, placeholder
, help
: 提供多语言界面文本。url
: (可选) 提供一个获取凭证的帮助链接。telegraph/tools/telegraph.py
。
_invoke
方法: 将文件内容替换为以下代码:
self.runtime.credentials
获取凭证。tool_parameters
获取工具的输入参数(参数名将在下一步的 YAML 中定义)。使用 .get()
是更健壮的方式。ytelegraph
库执行实际操作。try...except
捕获可能的错误并抛出异常。yield self.create_link_message(url)
返回一个包含 URL 的结果给 Dify。telegraph/tools/telegraph.yaml
。
identity
: 工具的基本信息,name
是唯一标识。description
: 分为 human
(给用户看) 和 llm
(给 Agent 看)。llm
描述对于 Agent 能否正确理解和使用工具至关重要。parameters
: 定义每个输入参数。
name
: 内部名称,需与 Python 代码中 tool_parameters.get("...")
的键一致。type
: 数据类型 (如 string
, number
, boolean
等)。required
: 是否必须提供。label
, human_description
, llm_description
: 类似 identity
中的描述,但针对具体参数。llm_description
应清晰指导 LLM 如何生成或获取该参数的值,包括格式要求(如此处的 Markdown)。form
: 定义参数如何在 Dify 中呈现和填充。llm
表示该参数值可以由用户输入、通过变量传入,或者在 Agent 模式下由 LLM 自主决定;form
通常表示需要用户在界面上固定填写的配置项。对于工具输入,llm
更常见。extra.python.source
: 指明实现此工具逻辑的 Python 文件路径(相对于项目根目录)。telegraph/provider/telegraph.py
。
_validate_credentials
方法: 将文件内容替换为:
credentials
字典中获取凭证。ToolProviderCredentialValidationError
,将原始错误信息包含在内。.env
文件:
telegraph
项目目录下。
.env
文件: 打开刚刚创建的 .env
文件,填入您的 Dify 环境信息:
telegraph
目录下,运行主程序:
https://your-dify-host.com/plugins
)。label
) 的插件,并且可能带有一个“调试中”的标记。provider/telegraph.yaml
中定义的 “Telegraph Access Token”。输入有效的 token 并保存。如果您的验证逻辑 (_validate_credentials
) 实现正确,这里会进行验证。 (请参考您本地对应的截图 ,它展示了插件出现在列表并请求授权的界面)python -m main
进程进行处理。您可以在本地终端看到相关的日志输出,并进行调试。Ctrl + C
可以停止本地插件服务。
telegraph/_assets
目录下放置一个代表您插件的图标文件(例如 icon.png
, icon.svg
)。推荐使用正方形、清晰的图片。provider/telegraph.yaml
):
identity
部分的 label
(显示名称), description
(功能描述), 和 icon
(填写图标文件名,如 icon.png
) 已填写并支持多语言。这部分信息主要在 Dify 应用编排界面中展示给_使用_插件的用户。manifest.yaml
):
telegraph/manifest.yaml
文件。这是整个插件的“身份证”,其信息将展示在 Dify 的插件管理页面和插件市场 (Marketplace) 中。label
: 插件的主要显示名称 (支持多语言)。description
: 对插件功能的整体简介 (支持多语言),应清晰概括其核心价值。注意市场展示可能有长度限制。icon
: 插件的主图标 (直接填写 _assets
目录下的图标文件名,如 icon.png
)。tags
: 为插件添加分类标签,有助于用户在市场中筛选。可选值请参考 Dify 提供的枚举或文档说明 (例如 media
, tools
, data-processing
等)。可参考 ToolLabelEnum 定义。README.md
: 编辑项目根目录下的 README.md
文件。它将作为插件在 Marketplace 上的详细介绍页面,应包含更丰富的信息,如功能详述、使用示例、配置指南、常见问题等。可参考 AWS 插件市场页面 的样式。PRIVACY.md
: 如果您计划将插件发布到官方 Marketplace,需要提供隐私政策说明文件 PRIVACY.md
,描述插件如何处理数据。.difypkg
文件,用于分发或安装。关于插件打包和发布的详细信息,请参考发布概览。
telegraph
文件夹的上一级。
./telegraph
替换为您插件项目的实际路径)
telegraph.difypkg
(或 您的插件名.difypkg
) 的文件。
.difypkg
文件就是一个完整的插件包。您可以: