#创作者训练营
dify的发展历程
dify 第一个版本,定义RAG的chatbot。后面发布了dify workflow的版本,通过工作流的形式定义Agent. 功能包括模板,应用,RAG, Tools。现在到第三个版本,添加了自定义插件的功能,允许用户开发插件实现自己的功能,这又是一个大的进步。
dify plugin
dify 1.0 之后允许用户自己开发插件 开发环境:
- python >= 3.12
- Dify 插件脚手架工具 (dify-plugin-daemon) 下载地址:github.com/langgenius/… ,目前版本是0.11。 根椐自己电脑系统下载相应的版本。 目前插件类型:
开发
以下开发环境以window 为例:
dify.exe plugin init 初始化项目
之后,需配置
- 输入plugin name, author,description,repository url,
- 选择开发语言: python
- 选择插件类型:tool
- 接下来会提示是否需要包含 Provider 验证、持久存储等附加功能,对于简单项目不需要。
回车之后,项目会在当前目录下初始化生成.
D:.
│ .difyignore
│ .env
│ .env.example
│ .gitignore
│ GUIDE.md
│ main.py
│ manifest.yaml
│ PRIVACY.md
│ README.md
│ requirements.txt
├─provider
│ │ dify-one.py
│ │ dify-one.yaml
├─tools
│ │ dify-one.py
│ │ dify-one.yaml
└─_assets
icon.svg
- .difyignore 不打包的文件和文件夹
- .gitignore git 忽略的文件和文件夹
- tools 目录 插件开发主要代码目录
- provider 目录 外部凭证获取
- .env 插件的环境变量,如插件host, key
配置虚拟环境
python -m venv .venv
或 conda create -n .venv python=3.12
tools 开发代码
identity:
name: dify-one
author: song
label:
en_US: dify-one
zh_Hans: dify-one
pt_BR: dify-one
description:
human:
en_US: dify test
zh_Hans: dify test
pt_BR: dify test
llm: dify test
parameters:
- name: deepseek_output
type: string
required: true
label:
en_US: deepseek output string
zh_Hans: deepseek输出内容
pt_BR: deepseek output string
human_description:
en_US: plugin demo by fengjian
zh_Hans: plugin demo by fengjian
pt_BR: plugin demo by fengjian
llm_description: plugin demo by fengjian
form: llm
extra:
python:
source: tools/dify-one.py
重点看下parameters 下,定义一个变量,deepseek_output
extra 下定义 开发文件的路径
.py 文件
class DifyOneTool(Tool):
def _invoke(self, tool_parameters: dict[str, Any]) -> Generator[ToolInvokeMessage]:
context = tool_parameters['deepseek_output']
if '</think>' in context :
result = context.split('</think>')[1]
else:result = context
yield self.create_text_message(result)
程序从tool_parameters 取出参数 deepseek_oupput (定义在yaml中)
把 < think>.... </ think> 部分删除
用create_text_message() 包裹文本,返回结果
上面代码,实现功能: 把deepseek返回结果 中 < think> </ think> 部分删除
测试及打包
打包命令 :dify.exe plugin package ./dify-one
打包时,需将开发包 写入.difyignore, 忽略这些文件夹,不然大小超过1M, 会提示打包失败。
打包完成后,在当前目录产生 .difypkg 文件