当前位置: 首页 > news >正文

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

编辑 endpoints/test_plugin.yaml,修改代码如下所示:

path: "/neko"
method: "GET"
extra:python:source: "endpoints/test_plugin.py"

该代码的意图是定义该插件的入口路径为 /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

相关文章:

  • 二叉树遍历
  • RT-Thread源码阅读(3)——内核对象管理
  • ollama list模型列表获取 接口代码
  • Python打卡第37天
  • Redis与Lua脚本深度解析:原理、应用与最佳实践
  • 【DCCN】多模态情感分析解耦交叉属性关联网络
  • 【Redis】第1节|Redis服务搭建
  • 在Windows上,将 Ubuntu WSL 安装并迁移到 D 盘完整教程(含 Appx 安装与迁移导入)
  • FFmpeg 4.3 H265 二十二.4,使用计算机摄像头,通过VCL软件, 模拟 监控摄像头 的 RTSP 流
  • SDL2常用函数:SDL_BlitSurfaceSDL_UpdateWindowSurface 数据结构及使用介绍
  • Elasticsearch Synthetic _source
  • openpi π₀ 项目部署运行逻辑(三)——策略推理服务器 serve_policy.py
  • OpenCV (C/C++) 中使用 Sobel 算子进行边缘检测
  • Leetcode 3557. Find Maximum Number of Non Intersecting Substrings
  • 如何通过PHPMyadmin对MYSQL数据库进行管理?
  • MQTT-Vue整合
  • 精益数据分析(87/126):市场-产品契合度重构——现有产品寻找新市场的实战指南
  • R 语言科研绘图 --- 热力图-汇总
  • 《软件工程》第 2 章 -UML 与 RUP 统一过程
  • 第11章1 扩展 MySQL
  • 晋中做网站/google关键词seo
  • 网站建设wordpress/长沙免费建站网络营销
  • 开发者选项在哪里打开oppo/免费seo在线优化
  • 创建网站忘记了怎么办/深圳百度推广seo公司
  • 网站建设报告 商业价值/花生壳免费域名注册
  • 专门做布料的网站/郑州seo外包公司哪家好