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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中logger命令的使用方法详解

文章目录 一、基础语法二、核心功能选项三、‌设施与优先级对照‌1. 常用设施(Facility)2. 优先级(Priority)从低到高:3. 组合示例‌ 四、典型使用场景1. 记录简单消息2. 带标签和优先级3. 记录命令输出4. 发送到远程服…

【图论 并集查找】P3671 [USACO17OPEN] Where‘s Bessie? S|普及+

本文涉及知道点 C图论 C并集查找 预计2025年5月29号 7:00发布 P3671 [USACO17OPEN] Where’s Bessie? S 题目描述 Farmer John 一直以精通技术而闻名,他正在测试他的新型无人机搭载的奶牛定位相机。这款相机据说可以拍摄他的田地并自动确定奶牛的位置。不幸的是…

《软件工程》第 13 章 - 软件维护

知识思维导图 13.1 软件维护与进化的概念 1. 核心概念 软件维护:软件交付使用后,为纠正错误、改善性能或其他属性而进行的修改过程软件进化:随着时间推移,软件系统为适应环境变化和用户需求而不断演变的过程 2. 维护类型&#…

AI Agent助力医疗科研突破

最近,AI Agent在医疗科研领域的突破格外引人注目。非营利组织Future House宣布其多智能体系统Robin在约10周内,为干性年龄相关性黄斑变性(dAMD)发现了一种潜在新疗法,这一成果展示了AI在加速科学发现,特别是…

(高级)高级前端开发者指南:框架运用与综合实战

当您已经掌握了HTML5、CSS3和JavaScript的基础知识后,接下来就是学习现代前端框架和性能优化的高级阶段。本文将重点介绍Vue.js/React的组件化开发、状态管理和路由配置,以及前端性能优化的核心技巧。通过丰富的代码示例和详细讲解,帮助您在实…

提示词写的好,用VSCODE+python+Claude3.5开发edge扩展插件(2)

导入文件夹: 导入扩展成功: 通过网盘分享的文件:Meteor New Tab.zip 链接: https://pan.baidu.com/s/1fXOhuoYboO_Afzqhuo5Eew?pwdxeix 提取码: xeix edge收藏夹书签过多时在扩展显示可以搜索筛选,

CUDA加速的线性代数求解器库cuSOLVER

cuSOLVER是NVIDIA提供的GPU加速线性代数库,专注于稠密和稀疏矩阵的高级线性代数运算。它建立在cuBLAS和cuSPARSE之上,提供了更高级的线性代数功能。 cuSOLVER主要功能 1. 稠密矩阵运算 矩阵分解: LU分解 (gesvd) QR分解 (geqrf) Cholesky分解 (potrf…

Redis之金字塔模型分层架构

在分布式系统架构中,Redis 凭借其卓越的读写性能成为缓存层的核心组件。但如何精准判断数据是否适合进入 Redis,以及如何科学量化 “高频查询” 标准,始终是高性能系统设计的关键课题。 数据访问特征金字塔模型是用于评估数据是否适合进入 R…

JVM 垃圾回收机制深度解析(含图解)

JVM 垃圾回收机制深度解析(含图解) 一、垃圾回收整体流程 垃圾回收图解 #mermaid-svg-KPtxlwWntQx8TOj3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KPtxlwWntQx8TOj3 .error-icon{fill…

MySQL快速入门篇---联合查询

一、什么是联合查询 1.1、概念 联合查询是SQL中用于合并多个SELECT语句结果集的操作。条件是被合并的结果集列数相同并且数据类型兼容。也可以说一次查询涉及两张或两张以上的表,就称为联合查询。 1.2、为什么要使用联合查询 如果数据被拆分到多个表中&#xff…

Spring Boot AI 之 Chat Client API 使用大全

ChatClient提供了一套流畅的API用于与AI模型交互,同时支持同步和流式两种编程模型。 流畅API包含构建Prompt组成元素的方法,这些Prompt将作为输入传递给AI模型。从API角度来看,Prompt由一系列消息组成,其中包含指导AI模型输出和行为的指令文本。 AI模型主要处理两类消息: …

基于点标注的弱监督目标检测方法研究

摘要 在计算机视觉领域,目标检测需要大量精准标注数据,但人工标注成本高昂。弱监督目标检测通过低成本标注训练模型,成为近年研究热点。本文提出一种基于点标注的弱监督目标检测算法,仅需在图像中物体中心点标注,即可高…

外网如何连接内网中的mysql数据库服务器?简单网络工具方案

当内网服务器部署好mysql数据库后,在局域网外需要用程序进行mysql 远程访问,而mysql因为安全的因素,默认的时候用户设置的是不能远程连接,只能本地连接,这个时候就需要自己去修改其中的设置。下面就介绍一下相关mysql的…

无人机避障——深蓝学院浙大栅格地图以及ESDF地图内容

Occupancy Grid Map & Euclidean Signed Distance Field: 【注意】:目的是为了将有噪声的传感器收集起来,用于实时的建图。 Occupancy Grid Map: 概率栅格: 【注意】:由于传感器带有噪声,在实际中基于…

Rocky Linux 8.9 升级至 8.10 测试可通过以下步骤完成

一、执行升级‌ sudo dnf -y update --disablerepoappstream 二、重启系统‌ reboot ‌三、验证升级结果‌ ‌检查系统版本‌ 执行命令确认版本已更新 cat /etc/redhat-release 输出应包含 Rocky Linux release 8.10

固定翼无人机抛投技术分析!

一、技术要点 1. 结构设计优化 传动组件创新:采用齿轮-齿条传动(替代传统丝杆结构),简化机械设计,降低成本并提高可靠性。例如,通过电机驱动齿轮带动齿条移动,实现柱销与抛投物插孔的精准分…

Oracle中的[行转列]与[列转行]

目录 一、原始数据 二、行转列的多种实现方式 1.CASE WHEN 2.DECODE 3.PIVOT(Oracle独有) 4.使用LEAD开窗函数 三、列转行的多种实现方式 1.UNPIVOT(Oracle独有) 2.UNION ALL合并结果集 四、行转列练习:CASE WHEN/DECODE/PIVOT/lag/LEAD 1.CASE WHEN 2…

【Excel VBA 】窗体控件分类

一、Excel 窗体控件分类 Excel 中的窗体控件分为两大类型,适用于不同的开发需求: 类型所在选项卡特点表单控件开发工具 → 插入 → 表单控件简单易用,直接绑定宏,兼容性好,适合基础自动化操作。ActiveX 控件开发工具…

[ 计算机网络 ] 深入理解OSI七层模型

🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步!!&…

线性代数之张量计算,支撑AI算法的数学原理

目录 一、张量计算的数学本质 1、线性代数:张量的几何与代数性质 2、微积分:梯度与自动微分 3、优化理论:张量分解与正则化 4、张量计算的核心操作 二、张量计算在AI算法中的作用 1、数据表示与处理 2、神经网络的参数表示 3、梯度计算与优化 三、张量计算在AI中的…