这是我的第441篇原创文章。
一、引言
“工具插件”指的是一个完整的项目,其中包含工具供应商文件、功能代码等结构。之前写过一个旧版dify开发自定义工具:
【Python大语言模型系列】Dify 开发一个自定义工具并在工作流中直接调用(完整案例)
新版dify遵循插件化原则,自定义工具的开发流程和步骤略有不同。基于官方文档和实战经验,以下是 Dify Tools 插件的从零到上线完整开发流程。
二、实现过程
2.1 安装 Dify 插件开发脚手架工具
访问 Dify Plugin CL 项目地址,下载并安装最新版本号和对应操作系统的工具。
运行以下命令检查安装是否成功。
./dify-plugin-darwin-arm64 version # macOS ./dify-plugin-windows-arm64 version # windows运行命令后,终端若返回类似v0.0.1-beta.15的版本号信息,则说明安装成功。
如果你已将该二进制文件重命名为dify并拷贝至 系统路径下(如:/usr/local/bin路径)下,配置完成后,在终端输入dify version命令后将输出版本号信息。可以运行以下命令创建新的插件项目:
dify plugin init2.2 初始化插件项目
使用脚手架工具创建插件项目:
/dify-plugin plugin init输入插件名称、作者信息,选择插件类型(如tool工具插件)。配置权限(如 Tools、Apps、Endpoints 等),完成后生成标准目录结构:
my-plugin/ ├── main.py # 插件入口文件 ├── manifest.yaml # 插件元数据配置,一般可以不管 ├── tools/ # 功能实现代码 ├── provider/ # 服务商凭证与验证,一般可以不管 └── requirements.txt # Python 包依赖 └── .env.example # 配置文件2.3 功能开发
在tools/my-plugin.py中实现核心逻辑:继承Tool基类并实现_invoke方法。例如:
from difyplugin import Tool, ToolInvokeError class MyTool(Tool): def _invoke(self, tool_parameters: dict) -> str: try: param = tool_parameters['input'] result = f"Processed: {param}" return self.create_text_message(result) except Exception as e: raise ToolInvokeError(f"Error: {str(e)}")配置参数:在tools/my-plugin.yaml文件中定义插件参数和描述。
2.4 配置 Python 环境
确保 Python 版本 ≥ 3.12,建议使用虚拟环境:
python -m venv .venv source .venv/bin/activate # Linux/macOS \.venv\Scripts\activate # Windows pip install -r requirements.txt # 安装核心包2.5 测试与验证
复制模板
cp .env.example .env配置.env文件,填写调试 Key 和服务器地址:
INSTALL_METHOD=remote REMOTE_INSTALL_URL=10.0.x.5 REMOTE_INSTALL_PORT=5003 REMOTE_INSTALL_KEY=xxxx启动插件进行测试:
python -m main在 Dify 平台中运行工作流,验证插件输出是否符合预期。
2.6 打包与发布
打包插件为.difypkg文件:
/dify-plugin plugin package ./my-plugin可选择签名插件以提高安全性,并上传到 Dify 平台或 Marketplace。
作者简介:
读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。