Dify应用实战(21) - 插件开发(中)

本文适用对象:高级水平


目标:能学会开发Dify的插件,来满足实际业务的工作流使用。

往期回顾

|

Dify应用实战(1) - 知识库检索

| |

Dify应用实战(2) - 联网工具

| |

Dify应用实战(3) - 代码处理

| |

Dify应用实战(4) - 生成语音

| |

Dify应用实战(5) - 使用模版

| |

Dify应用实战(6) - 图片生成(上)

| |

Dify应用实战(7) - 图片生成(下)

| |

Dify应用实战(8) - 对话记忆

| |

Dify应用实战(9) - 问题分类

| |

Dify应用实战(10) - 循环处理

| |

Dify应用实战(11) - 条件分支

| |

Dify应用实战(12) - 数据库查询

| |

Dify应用实战(13) - 工具调用

| |

Dify应用实战(14) - 结果聚合

| |

Dify应用实战(15) - 对象存储

| |

Dify应用实战(16) - 数据可视化

| |

Dify应用实战(17) - 使用MCP服务

| |

Dify应用实战(18) - 发布成MCP服务

| |

Dify应用实战(19) - 邮件配置

| |

Dify应用实战(20) - 插件开发(上)

|

今天我们继续学习Dify的插件开发。

picture.image

04.

代码开发

我们先来写一个非常简单的插件练练手。这个插件的功能是将Markdown的内容转换为PDF文件。







因为没有需要授权的地方,所以provider下的\_validate\_credentials方法只需要简单处理一下。即工具方法全部填写空的授权参数。如下图:

picture.image

主要功能代码在tools下的\_invoke方法内,且方法内使用了第三方的依赖库markdown-pdf,所以回到上一篇中将requirements.txt中填入一行依赖。
  
dify_plugin>=0.2.0,<0.3.0  
markdown-pdf==1.7
这个插件的输入为Markdown的内容,所以需要定义一个输入参数。需要将对应方法的yaml的内容修改一下,如parameters的name表示参数名,修改为content。


在代码里使用这个参数时,按下面代码处理:
  
markdown\_content = tool\_parameters["content"]
经过PDF生成之后,插件需要将PDF的内容按blob的方式传出。所以需要创建一个blob message,如下:
  
yield self.create_blob_message(  
                blob=result_file_bytes,  
                meta=get_meta_data(  
                    mime_type=MimeType.PDF,  
                    output_filename=output_file.name  
                ),  
            ) 

picture.image

好了,我们已经完成了所以代码的开发。如果需要完整项目,可以访问github去获得。

https://github.com/Macking/markdown2pdf.git

05.

部署测试

代码开发完成之后,就是需要编译打包,再上传Dify了。


运行下列命令,会在当前目录得到一个压缩包markdown2pdf.difypkg。
  
dify-plugin-windows-amd64.exe plugin package markdown2pdf

picture.image

打开自己的Dify控制台,点右上角"插件"按钮,切换到插件功能模块,点击"安装插件",选择"本地插件"。打开的对话框选择刚才生成的文件markdown2pdf.difypkg,稍等安装成功。

picture.image

现在我们就可以来测试一下这个插件是否能按预期执行了。创建一个简单的chatflow,添加"LLM""工具"两个节点。








运行后在结果处,就得到了一个可以下载的pdf链接,下载后打开能看到结果。

picture.image

如果有问题,可以进一步检查每个节点的输入和输出,重点检查参数名是否正确。

picture.image

如果在安装本地插件时,系统报错。那是因为安全机制的原因,可以去dify/docker目录下,修改.env文件,在最后一行添加参数如下:
  
FORCE\_VERIFYING\_SIGNATURE=false

总结

今天我们完成了Dify的插件开发的主体,如果还想进一步学习更为复杂的插件开发,请一定记得关注后续文章,以便获得完整的指南。


当全部学习之后,一定可以完成属于自己的插件开发,让Dify系统变得更加的得心应手。

如果你对AI的发展感兴趣,欢迎一键三连。有任何问题可以扫码添加好友,我们共同探讨。

picture.image

0
0
0
0
评论
未登录
暂无评论