Dify中的Extension插件开发例子:以neko为例

本文使用Dify v1.0.0-beta.1版本。以neko为例,介绍Dify中的Extension插件开发例子。需要说明的是Dify官方要求Python≥3.12,但发现本地PyCharm调试Python≥3.12有问题,就采用的Python 3.11版本。

一.Extension插件项目创建

1.填写插件信息

按照提示配置插件名称、作者信息与插件描述。如果是团队协作,也可以将作者填写为组织名。插件名称长度必须为 1-128 个字符,并且只能包含字母、数字、破折号和下划线。

填写完成后,在插件开发语言环节中选择 Python。

2.选择插件类型并初始化项目模板

脚手架工具内的所有模板均已提供完整的代码项目,本文将以 Extension 类型插件模板作为示例。

3.配置插件权限

插件还需要读取 Dify 主平台的权限才能正常连接。需要为该示例插件授予以下权限:

  • Tools
  • LLMs
  • Apps
  • 启用持久化储存 Storage,分配默认大小存储
  • 允许注册 Endpoint

在终端内使用方向键选择权限,使用 Tab 按钮授予权限。勾选所有权限项后,轻点回车完成插件的创建。系统将自动生成插件项目代码。

插件的基础文件结构,如下所示:

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

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

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

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

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

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

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

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

二.Extension插件开发过程

1.插件开发

(1)定义插件请求入口Endpoint

该代码的意图是定义该插件的入口路径为 /neko,请求方法为 GET 类型。插件的功能实现代码为 endpoints/test_plugin.py 文件。如下所示:

(2)编写插件功能

插件功能:请求插件服务,输出一只猫。编写插件的功能实现代码 endpoints/test_plugin.py 文件,示例代码如下所示:

运行此代码需要先安装以下 Python 依赖包:

2.插件调试

然后就可以看到带有DEBUGGING PLUGIN标识的test_plugin插件,如下所示:

点击+按钮添加API端点。端点名称和API Key随便填写即可,如下所示:

这样就会生成一个API端点,如下所示:

用浏览器打开上述URL发现报错,原因是应该为localhost:5002,而不是localhost。如下所示:

新建一个简单Chatflow工作流,测试该URL。如下所示:

3.插件打包

具体操作不再赘述,详细参考文献[3]。

4.插件发布

具体操作不再赘述,详细参考文献[3]。

三.可能遇到的问题 [4][5]

1.ENDPOINT_URL_TEMPLATE问题

由于后端源码运行,修改dify\api\.env中的ENDPOINT_URL_TEMPLATE=http://localhost:5002/e/{hook_id},如下所示:

重新启动后端服务,便可以看到正确URLhttp://localhost:5002/e/AqXHXakiZUouDpkMaOEpLXhDHP027BGI/neko,如下所示:

参考文献

[1] Extension插件:https://docs.dify.ai/zh-hans/plugins/quick-start/develop-plugins/extension-plugin

[2] Neko:https://marketplace.dify.ai/plugins/langgenius/neko

[3] Dify中的GoogleSearch工具插件开发例子:https://z0yrmerhgi8.feishu.cn/wiki/Ib15wh1rSi8mWckvWROckoT2n6g

[4] chore(1.0): improve some environment variables #12814:https://github.com/langgenius/dify/pull/12814

[5] Inconsistency between docker-compose.yaml and api on specifying entrypoint for pluginDaemon in v1.0.0-beta.1:https://github.com/langgenius/dify/issues/13113

[6] Dify中的Extension插件开发例子:以neko为例(原文链接):https://z0yrmerhgi8.feishu.cn/wiki/H5YRw43pgi7mOukWHJHc81ztnre

(文:NLP工程化)

发表评论

×

下载每时AI手机APP

 

和大家一起交流AI最新资讯!

立即前往