【ai】dify+python开发AI八字排盘插件
off999 2025-07-21 17:07 6 浏览 0 评论
Dify 插件是什么?
你可以将 Dify 插件想象成赋予 AI 应用增强感知和执行能力的模块化组件。它们使得将外部服务、自定义功能以及专用工具以”即插即用”的简洁方式集成到基于 Dify 构建的 AI 应用中成为可能。通过插件,你的 AI 应用可以更好地”看”、“听”、“说”、“画”、“计算”、“推理”,连接外部 API,甚至执行真实世界的操作。
为什么选择开发 Dify 插件?
扩展 AI 能力: 为基于 Dify 的应用赋予专业工具、多模态处理、连接现实世界服务等无限可能。
定制化 Dify 体验: 通过构建专属插件,精准满足特定业务场景或工作流的需求。
重塑智能流程: 利用自定义工具和 Agent 策略,优化 RAG 流程、增强 Agent 推理能力。
实现模块化与解耦: 将功能作为独立的插件进行开发和管理,提高代码的可维护性和灵活性。
享受开发者友好体验: 我们提供强大的 SDK、便捷的远程调试工具和清晰的文档,助你高效开发。
AI 应用
Dify 插件是赋予 AI 应用增强感知和执行能力的模块化组件。可以将外部服务、自定义功能以及专用工具以”即插即用”的简洁方式集成到基于 Dify 构建的 AI 应用中。
dify支持的开发插件类型: 针对每种插件类型,提供专门的开发指南:
模型 (Models: 学习如何将不同的 AI 模型打包、配置并作为插件进行管理。
工具 (Tools): 为 Agent 和工作流构建专业能力,如数据分析、内容处理、自定义集成等。
Agent 策略 (Agent Strategies): 创建自定义的推理策略(如 ReAct, CoT, ToT)来赋能 Dify 中的自主 Agent。
扩展 (Extensions): 通过 HTTP Webhook 实现与外部服务的集成,处理复杂逻辑。
包 (Bundles): 了解如何将多个插件组合打包,以便于分发和部署
Dify 标准结构介绍
your_plugin/
├── _assets/ # 图标和视觉资源
├── provider/ # 提供者定义和验证
│ ├── your_plugin.py # 凭证验证逻辑
│ └── your_plugin.yaml # 提供者配置
├── tools/ # 工具实现
│ ├── feature_one.py # 工具功能实现
│ ├── feature_one.yaml # 工具参数和描述
│ ├── feature_two.py # 另一个工具实现
│ └── feature_two.yaml # 另一个工具配置
├── utils/ # 辅助函数
│ └── helpers.py # 通用功能逻辑
├── working/ # 进度记录和工作文件
├── .env.example # 环境变量模板
├── main.py # 入口文件
├── manifest.yaml # 插件主配置
├── README.md # 文档
└── requirements.txt # 依赖列表
- 插件描述
- resource所需资源(权限、内存)
- plugins 指向provider
- meta 支持的架构、python版本、隐私协议,仓库地址等
- your_plugin.py 验证这个插件的依赖、环境、资源等
- your_plugin.yaml 描述了这个插件是干什么的,有哪些工具,这个是dify查找工具的入口
- 一个工具一组py和yaml
- py为对应的工具的实现,需要符合dify的规范
- yaml 有几个作用
- 识工具的唯一性identity
- description描述工具
- parameters 工具所需的参数
- extra 指定工具的实现python
实现
温馨提示:如果大家使用agent开发,比如cursor、codebuddy,可以直接使用官方的提示词。
dify提供了一个dify-plugin-daemon 工具用于辅助开发,是一个脚手架,可以直接一步步的执行,生成框架。
# 复制工具YAML文件作为模板
cp tools/existing_tool.yaml tools/new_feature.yaml
# 复制工具Python实现
cp tools/existing_tool.py tools/new_feature.py
- 更新YAML中的名称、描述和参数
- 更新Python文件中的类名和实现逻辑
- 确保每个文件只包含一个Tool子类
在provider/your_plugin.yaml中添加新工具:
tools:
- tools/existing_tool.yaml
- tools/new_feature.yaml # 添加新工具
插件初始化
1、执行 .\dify-plugin.exe plugin init
2、填写插件名称、Author、和插件描述
3、上下键选择插件类型,选中以后回车
4、上下键选择权限,然后tab切换选中
5、描述最小版本
一路按提示操作,最后会生成基础版本的插件。
调试
在.env文件中修改REMOTE_INSTALL_URL和REMOTE_INSTALL_KEY
执行python -m main
安装插件
dify 的插件,默认是开启签名认证的。有两种方案:
1、关闭签名验证
在dify部署的.env中,搜索FORCE_VERIFYING_SIGNATURE,并改为false
FORCE_VERIFYING_SIGNATURE=false
//之后
docker compose down
docker compose up -d
- 使用自签名(只能在开源版本中使用,官方是单独的一套)
执行下面的命令,-f 后面为插件名。
.\dify-plugin.exe signature generate -f wuyunliuqi
生成公钥和私钥对
o wuyunliuqi.private.pem 私钥,用来加签名
o wuyunliuqi.public.pem 公钥,用来验签名
# 先打包 会打包出来一个wuyunliuqi.difypkg 文件
.\dify-plugin.exe plugin package .\wuyunliuqi
# 加签,使用指定的签名对wuyunliuqi.difypkg 进行加签,
.\dify-plugin.exe signature sign wuyunliuqi.difypkg -p wuyunliuqi.private.pem
修改docker-compose文件,在plugin_daemon中添加公钥
plugin_daemon:
image:langgenius/dify-plugin-daemon:0.1.2-local
restart:always
environment:
THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED:true
THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS: /app/storage/public_keys/wuyunliuqi_key.public.pem
这种自签名比较适合,有源码,有多个插件,都可以用这对公私钥进行加签验签。
插件应用
1、添加节点的时候,直接选择工具
2、找到自己开发的插件,然后添加插件进去
3、设置对应的变量即可
常见错误排查
当遇到Multiple subclasses of Tool错误时:
- 检查问题文件:
- 寻找形如class AnotherTool(Tool):的额外类定义
- 确保文件中只有一个继承自Tool的类
- 例如:如果encrypt.py包含EncryptTool和DecryptTool,保留EncryptTool并将DecryptTool移至decrypt.py
- 检查导入错误:
- 确认导入的函数名或类名是否拼写正确
- 注意下划线、大小写等细节
- 修正导入语句中的拼写错误## 文件结构与代码组织规范
当遇到xxx error for ToolProviderConfiguration错误时:
出现该报错,直接看工具的yaml文件,根据提示,比如下面的报错,缺少identity和extra(这是用大模型生成的时候报的)
ValueError: Error loading plugin configuration: 3 validation errors for ToolProviderConfiguration
identity.description - Field required
identity.icon - Field required
extra - Field required
当遇到Failed to parse response from plugin daemon to PluginDaemonBasicResponse [PluginToolProviderEntity]错误时:
PS:装完插件所有插件都不能用了
缺少了main.py文件。每个Dify插件都必须有这个入口文件:
from dify_plugin import Plugin, DifyPluginEnv
plugin = Plugin(DifyPluginEnv(MAX_REQUEST_TIMEOUT=120))
if __name__ == '__main__':
plugin.run()
遇到invalid parameter type 'text-input'错误时:
大模型在YAML里写的参数类型是text-input,但Dify框架不支持这个类型。
- type (必填)参数类型,目前支持string、number、boolean、select、secret-input、file、files、model-selector、app-selector 九种类型,分别对应字符串、数字、布尔值、下拉框、加密输入框、文件、文件集、模型选择、应用选择,对于敏感信息,请使用 secret-input 类型。
- form (必填)表单类型,目前支持llm、form两种类型,建议填写llm不要填写form
总结
Dify插件开发整体还算友好,但坑也不少……
遇到问题时,优先查官方文档和示例代码(示例代码比较老旧),AI只能做参考,避免被带跑偏,走弯路浪费更多时间和精力。
相关推荐
- Python开发管理神器--UV 使用教程:从安装到项目管理
-
UV是一个用Rust编写的高效Python包和项目管理工具,提供了比传统工具更快的速度和更强的功能。本文将指导你如何使用UV从安装到运行一个Python项目。重点:它可以独立安装,可...
- python入门-Day 26: 优化与调试(python优化方法)
-
优化与调试,内容包括处理模型运行中的常见问题(内存、依赖)、调整参数(如最大生成长度),以及练习改进Day25的文本生成结果。我会设计一个结构化的任务,帮助你掌握优化和调试技巧,同时提升模型性能...
- Python安装(python安装发生严重错误)
-
Windows系统1.安装python1.1下载Python安装包打开官方网站:https://www.python.org/downloads/点击"DownloadPython3.1...
- UV 上手指南:Python 项目环境/包管理新选择
-
如果你是一位Python开发者,曾因pipinstall的安装速度而感到沮丧,或者希望Python的依赖管理能够像Node.js那样高效顺滑,那么UV可能正是你所需要的工具。UV...
- uv——Python开发栈中的高效全能小工具
-
每天写Python代码的同学,肯定都离不开pip、virtualenv、Poetry等基础工具,但是对这些工具可能是又恨又离不开。那么有什么好的替代呢,虫虫今天就给大家介绍一个替代他们的小工具uv,一...
- 使用Refurb让你的Python代码更加优秀
-
还在担心你写的Python代码是否专业,是否符合规范吗?这里介绍一个Python代码优化库Refurb,使用它可以给你的代码提出更加专业的建议,让你的代码更加的可读,规范和专业。下面简单介绍这个库的使...
- 【ai】dify+python开发AI八字排盘插件
-
Dify插件是什么?你可以将Dify插件想象成赋予AI应用增强感知和执行能力的模块化组件。它们使得将外部服务、自定义功能以及专用工具以”即插即用”的简洁方式集成到基于Dify构建的AI...
- 零基础AI开发系列教程:Dify升级指南
-
Dify近期发布很是频繁,基本两三天一个版本。值得肯定的是优化和改进了很多问题,但是官方的升级文档有点分散,也有点乱。我这里整理了一个升级文档供大家参考,如果还没有升级到新版本的小伙伴,可以按照我的文...
- 升级到PyTorch 2.0的技巧总结(如何更新pytorch版本)
-
来源:DeepHubIMBA本文约6400字,建议阅读12分钟在本文将演示PyTorch2.0新功能的使用,以及介绍在使用它时可能遇到的一些问题。PyTorch2.0发布也有一段时间了,大家...
- dify 1.6.0版本发布解读:引入MCP支持与多项核心优化升级指南详解
-
2025年7月10日,dify发布了1.6.0版本。这是一次功能深度升级与性能优化的综合性更新,标志着dify在技术规范支持、操作体验以及系统稳定性方面迈出了重要的一步。本文将从核心新特性、功能增强、...
- Python教程(十四):列表(List)(python列表方法总结)
-
昨天,我们学习了变量作用域,理解了局部和全局变量的概念。今天,我们将开始探索Python的数据结构,从最常用的**列表(List)**开始。列表是Python中最灵活、最常用的数据结构,它可以存储不同...
- Python列表操作(python列表有哪些基本操作)
-
Python添加列表4分钟阅读在Python操作列表有各种方法。例如–简单地将一个列表的元素附加到for循环中另一个列表的尾部,或使用+/*运算符、列表推导、extend()和i...
- Python字符串变形术:replace替换+join连接,10分钟掌握核心操作
-
字符串替换魔法:replace()实战手册核心价值:一键更新文本内容,精准控制替换范围#基础替换:Python变Javas="hellopython"print(s.re...
- python集合set() 数据增册改查统计序循常用方法和数学计算
-
概念特点定义和创建常用操作集合间的关系集合数学操作集合生成式遍历概念:可变、无序、不重复的序列数据容器特点:无序,不支持下标唯一性,可以删除重复数据可修改定义和创建赋值法:语法:s={x,....
- Python列表方法append和extend的区别
-
在Python编程中,列表是一种非常常用的数据结构。而列表有两个方法append()和extend(),它们看起来有点相似,但实际上有着明显的区别。今天咱们就来好好唠唠这俩方法到底有啥不同。基本区别a...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)