本文档由 AI 自动翻译。如有任何不准确之处,请参考 英文原版。工具是 Chatflow、Workflow 和 Agent 应用可以调用的第三方服务,能为 Dify 应用扩展在线搜索、图像生成等能力。


前置条件
- Dify 插件脚手架工具
- Python 环境(版本 3.12)
创建新项目
运行脚手架命令行工具来创建一个新的 Dify 插件项目。dify 并复制到 /usr/local/bin 路径,可以运行以下命令来创建新的插件项目:
以下示例使用
dify 作为命令。如果遇到问题,请将 dify 替换为命令行工具的路径。选择插件类型和模板
脚手架工具中的每个模板都是一个完整的代码项目。本示例选择Tool 插件。

配置插件权限
插件还需要从 Dify 平台读取数据的权限。为本示例插件授予以下权限:- Tools
- Apps
- 启用持久化存储,并分配默认大小
- 允许注册 Endpoints

开发工具插件
1. 创建工具提供者文件
工具提供者文件是一个 YAML 文件,作为插件的基础配置,为工具提供所需的授权信息。 在插件模板项目中,进入/provider 目录,将 YAML 文件重命名为 google.yaml。该文件描述工具提供者:名称、图标、作者等详细信息,这些信息会在安装插件时显示。
示例代码:
/tools 目录中,完整路径如下:
google.yaml 必须使用其在插件项目中的绝对路径引用;本示例中它位于项目根目录。YAML 文件中的 identity 包含工具提供者的基本信息:作者、名称、标签、描述和图标。
- 图标必须是附件资源,放置在项目根目录的
_assets文件夹中。 - 标签帮助用户按分类查找插件。以下是目前支持的所有标签:
2. 添加第三方服务凭据
为方便开发,本示例使用第三方服务 SerpApi 提供的 Google Search API。SerpApi 需要 API Key,因此在 YAML 文件中添加credentials_for_provider 字段。
完整代码:
credentials_for_provider的子级结构必须满足 通用规范 的要求。- 指定提供者包含哪些工具。本示例只包含一个文件
tools/google_search.yaml。 - 除基本信息外,提供者还需要代码逻辑,因此需指定其实现文件。本示例使用
google.py,但暂不实现,先编写google_search工具代码。
3. 填写工具 YAML 文件
一个工具插件可以包含多个工具,每个工具由各自的 YAML 文件描述,涵盖基本信息、参数和输出。 继续以GoogleSearch 工具为例,在 /tools 文件夹中创建一个新的 google_search.yaml 文件。
identity:工具的基本信息,包括名称、作者、标签和描述。parameters:参数列表。name(必填):参数名称,在工具的参数中必须唯一。type(必填):参数类型。可选值为string、number、boolean、select、secret-input,分别渲染为字符串、数字、布尔值、下拉框、加密输入框。敏感信息请使用secret-input。label(必填):参数标签,显示在前端。form(必填):表单类型,可选llm或form。- 在 Agent 应用中,
llm表示由 LLM 自行推断参数,form表示可在使用工具前预先设置参数。 - 在 Workflow 应用中,
llm和form参数都通过前端填写,但llm参数会用作工具节点的输入变量。
- 在 Agent 应用中,
required(可选):参数是否必填。- 在
llm模式下,必填参数必须由 Agent 推断。 - 在
form模式下,必填参数必须在对话开始前于前端填写。
- 在
options(可选):参数选项。- 在
llm模式下,Dify 会将所有选项传递给 LLM,由其据此推断。 - 在
form模式下,当type为select时,前端会显示这些选项。
- 在
default(可选):默认值。min(可选):最小值,参数类型为number时适用。max(可选):最大值,参数类型为number时适用。human_description(可选):显示在前端的说明,支持多语言。placeholder(可选):输入字段的提示文本,当表单类型为form且参数类型为string、number或secret-input时适用。支持多语言。llm_description(可选):传递给 LLM 的说明。请尽可能详细地描述,以便 LLM 理解该参数。
4. 编写工具代码
完成工具配置后,编写实现工具逻辑的代码。在/tools 目录中创建 google_search.py,内容如下:
serpapi 发送请求,并使用 self.create_json_message 返回格式化的 JSON 数据。如需了解更多返回数据类型,参见 远程调试插件 和 持久化存储 KV。
5. 完善工具提供者代码
最后,实现提供者的凭据验证逻辑。如果验证失败,代码会抛出ToolProviderCredentialValidationError 异常;验证成功后,会正确请求 google_search 工具服务。
在 /provider 目录中创建 google.py 文件,内容如下:
调试插件
开发完成后,测试插件是否正常工作。Dify 提供远程调试,帮助你在测试环境中快速验证插件功能。 前往 插件管理 页面获取远程服务器地址和调试 Key。
.env.example 文件并重命名为 .env,然后填入远程服务器地址和调试 Key。
.env 文件:
python -m main 启动插件。在 插件 页面,可以看到插件已安装在工作空间中,团队的其他成员也可以访问该插件。

打包插件(可选)
插件正常运行后,使用以下命令打包并命名插件。运行后会在当前文件夹生成一个google.difypkg 文件,即最终的插件包。
发布插件(可选)
如需将插件发布到 Dify 市场,请确保插件符合 发布到 Dify 市场 中的规范。通过审核后,代码会合并到主分支并自动上架到 Dify 市场。 完整流程参见 发布概述。探索更多
快速开始
插件接口文档
- 通用规范:Manifest 结构和工具规范。
- Endpoint:详细的 Endpoint 定义。
- 反向调用:反向调用 Dify 能力。
- 模型 Schema:模型。
- Agent 插件:扩展 Agent 策略。
下一步
- 远程调试插件:学习更多高级调试技巧。
- 持久化存储:在插件中使用数据存储。
- Slack Bot 插件开发示例:更复杂的插件开发案例。
- 工具插件:工具插件的高级功能。