首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Dify插件开发

Dify插件开发

作者头像
golangLeetcode
发布2026-03-18 17:27:54
发布2026-03-18 17:27:54
4040
举报

在学会Dify中使用DeepSeek模型后Dify使用deepseek,我们可以用Dify快速搭建一个聊天工具或者通过工作流完成较为复杂的任务,但是对于一些定制化比较高的操作,或者任务中的某个流程在现有的工作流中没有插件能满足需求,就需要我们自定义开发插件了。Dify官方给了文档https://github.com/langgenius/dify-docs/blob/main/zh_CN/plugins/quick-start/develop-plugins/extension-plugin.md,我们可以参照文档一步步实现。

不同场景需要开发不同类型的插件: 针对每种插件类型,提供专门的开发指南:

  • 模型 (Models): 学习如何将不同的 AI 模型打包、配置并作为插件进行管理。
  • 工具 (Tools): 为 Agent 和工作流构建专业能力,如数据分析、内容处理、自定义集成等。
  • Agent 策略 (Agent Strategies): 创建自定义的推理策略(如 ReAct, CoT, ToT)来赋能 Dify 中的自主 Agent。
  • 扩展 (Extensions): 通过 HTTP Webhook 实现与外部服务的集成,处理复杂逻辑。

包 (Bundles): 了解如何将多个插件组合打包,以便于分发和部署。

不同插件的开发流程都差不多,这里以Extension为例,介绍下Dify插件的完整开发流程。不得不承认Dify在产品化这块儿做得还可以,虽然比不上coze这样的商业化产品,但是文档和工具还是比较全面的。

首先我们下载开发插件用的脚手架:

https://github.com/langgenius/dify-plugin-daemon/releases/download/0.0.9/dify-plugin-darwin-amd64

下载下来后查看下版本

代码语言:javascript
复制
chmod +x dify-plugin-darwin-amd64
./dify-plugin-darwin-amd64 version
v0.0.9

然后用脚手架初始化工程

代码语言:javascript
复制
./dify-plugin-darwin-amd64 plugin init

然后交互式的填入需要的信息,就可以生成插件项目的框架,文件目录如下

代码语言:javascript
复制
% tree
.
|____endpoints
| |____firstexp.yaml
| |____firstexp.py
|_____assets
| |____icon.svg
|____requirements.txt
|____group
| |____firstexp.yaml
|____PRIVACY.md
|____README.md
|____.gitignore
|____manifest.yaml
|____GUIDE.md
|____.github
| |____workflows
| | |____plugin-publish.yml
|____.env.example
|____main.py
|____.difyignore

UIDE.md 一个简短的引导教程,带领你完成插件的编写流程。

README.md 关于当前插件的简介信息,你需要把有关该插件的介绍和使用方法填写至该文件内。

_assets 存储所有与当前插件相关的多媒体文件。

endpoints 按照 cli 中的引导创建的一个 Extension 类型插件模板,该目录存放所有 Endpoint 的功能实现代码。

group 指定密钥类型、多语言设置以及 API 定义的文件路径。

main.py 整个项目的入口文件。

manifest.yaml 整个插件的基础配置文件,包含该插件需要什么权限、是什么类型的扩展等配置信息。

requirements.txt 存放 Python 环境的依赖项。

由于python2和python3容易冲突,我们初始化一个python的虚拟环境

代码语言:javascript
复制
python3 -m venv myenv
# 激活当前环境
source myenv/bin/activate
# 退出环境
deactivate

安装依赖的的包

代码语言:javascript
复制
pip3 install werkzeug  -i https://mirrors.aliyun.com/pypi/simple/
pip3 install dify_plugin -i  https://mirrors.aliyun.com/pypi/simple/

或者

代码语言:javascript
复制
pip3 install -r requirements.txt

接下来就调试下默认的插件能否运行起来。Dify 提供远程调试方式,前往“插件管理”页获取调试 Key 和远程服务器地址。

进入插件目录firstexp下,拷贝 .env.example 文件并重命名为 .env,将获取的远程服务器地址和调试 Key 等信息填入其中。

代码语言:javascript
复制
INSTALL_METHOD=remote
REMOTE_INSTALL_HOST=debug.dify.ai
REMOTE_INSTALL_PORT=5003
REMOTE_INSTALL_KEY=********-****-****-****-************

需要注意的是,在本地调试的时候REMOTE_INSTALL_HOST需要换成本地地址127.0.0.1,但是在发布前需要改为

代码语言:javascript
复制
REMOTE_INSTALL_HOST=host.docker.internal

因为插件运行在docker环境中时,需要通过上述域名寻址,否则插件会一直安装失败,因为在docker环境中无法链接。

然后运行python -m main 命令启动插件。这时候我们就可以在Dify后台的插件列表中看到我们刚刚开发的插件了。测试跑通以后,我们需要打包安装插件。

代码语言:javascript
复制
./dify-plugin-darwin-amd64 plugin package  ./firstexp
2025/05/07 15:22:51 package.go:39: [INFO]plugin packaged successfully, output path: firstexp.difypkg

然后点击插件安装,或者拖拽安装,等几秒就安装成功了。如果报下面错误

代码语言:javascript
复制
PluginDaemonBadRequestError: plugin verification has been enabled, and the plugin you want to install has a bad signature

需要改下Dify的配置然后重启Dify在 .env 文件中添加以下配置

代码语言:javascript
复制
FORCE_VERIFYING_SIGNATURE=false

这将禁用插件签名验证,允许安装未验证的插件。安装完成后的插件如下

回过头来我们看下生成的源码,入口文件main.py

代码语言:javascript
复制
from dify_plugin import Plugin, DifyPluginEnv
plugin = Plugin(DifyPluginEnv(MAX_REQUEST_TIMEOUT=120))
if __name__ == '__main__':
    plugin.run()

里面启动了plugin,它的寻址是通过配置文件manifest.yaml

代码语言:javascript
复制
plugins:
  tools:
    - provider/firstexp.yaml

定位到这个yaml文件内容

代码语言:javascript
复制
extra:
  python:
    source: tools/firstexp.py

就来到了具体插件源码中

代码语言:javascript
复制
from collections.abc import Generator
from typing import Any
from dify_plugin import Tool
from dify_plugin.entities.tool import ToolInvokeMessage
class FirstexpTool(Tool):
    def _invoke(self, tool_parameters: dict[str, Any]) -> Generator[ToolInvokeMessage]:
        yield self.create_json_message({
            "result": "Hello, world!"
        })

我们编辑这个代码就能实现自己复杂的逻辑

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档