第 30 期:Dify 插件开发与 Marketplace 发布
Plugin 生态
graph TB
subgraph "Dify Plugin 类型"
Plugin[Plugin] --> Tool[🔧 Tool 工具类]
Plugin --> Model[🤖 Model 模型类]
Plugin --> Extension[🧩 Extension 扩展类]
Tool --> T1[搜索工具]
Tool --> T2[数据处理工具]
Model --> M1[自定义模型接入]
Model --> M2[模型代理/网关]
Extension --> E1[Moderation 内容审核]
Extension --> E2[External Data 外部数据源]
end开发环境搭建
# 安装 Dify Plugin CLI
pip install dify-plugin-daemon
# 初始化插件项目
dify plugin init my-awesome-plugin
cd my-awesome-plugin
# 项目结构
# my-awesome-plugin/
# ├── manifest.yaml # 插件清单
# ├── README.md # 插件说明
# ├── _assets/ # 图标等资源
# │ └── icon.svg
# ├── provider/ # Provider 定义
# │ └── my_provider.yaml
# └── tools/ # 工具实现
# ├── my_tool.yaml # 工具描述
# └── my_tool.py # 工具逻辑
开发一个 GitHub Star 查询工具
manifest.yaml
version: 0.0.1
type: plugin
author: your-name
name: github-stats
label:
en_US: GitHub Stats
zh_Hans: GitHub 统计
description:
en_US: Query GitHub repository statistics
zh_Hans: 查询 GitHub 仓库统计数据
icon: _assets/icon.svg
created_at: 2026-04-05
tools/github_stars.yaml
identity:
name: github_stars
author: your-name
label:
en_US: GitHub Stars Lookup
zh_Hans: GitHub Star 查询
description:
human:
en_US: Look up star count and other stats for a GitHub repository
zh_Hans: 查询 GitHub 仓库的 Star 数量等统计信息
parameters:
- name: repo
type: string
required: true
label:
en_US: Repository
zh_Hans: 仓库
description:
en_US: "GitHub repository in format: owner/repo"
zh_Hans: "GitHub 仓库名,格式: owner/repo"
output:
type: object
tools/github_stars.py
from typing import Any
from dify_plugin import Tool
from dify_plugin.entities.tool import ToolInvokeMessage
import requests
class GitHubStarsTool(Tool):
def _invoke(self, tool_parameters: dict[str, Any]) -> ToolInvokeMessage:
repo = tool_parameters["repo"]
try:
response = requests.get(
f"https://api.github.com/repos/{repo}",
headers={"Accept": "application/vnd.github.v3+json"},
timeout=10
)
if response.status_code == 404:
return self.create_text_message(f"仓库 {repo} 不存在")
data = response.json()
stats = {
"name": data["full_name"],
"description": data["description"],
"stars": data["stargazers_count"],
"forks": data["forks_count"],
"open_issues": data["open_issues_count"],
"language": data["language"],
"created_at": data["created_at"],
"updated_at": data["updated_at"],
"license": data.get("license", {}).get("spdx_id", "Not specified")
}
text = (
f"📊 **{stats['name']}**\n"
f"📝 {stats['description']}\n\n"
f"⭐ Stars: {stats['stars']:,}\n"
f"🍴 Forks: {stats['forks']:,}\n"
f"🐛 Open Issues: {stats['open_issues']:,}\n"
f"💻 Language: {stats['language']}\n"
f"📜 License: {stats['license']}\n"
f"📅 Created: {stats['created_at'][:10]}"
)
return self.create_text_message(text)
except Exception as e:
return self.create_text_message(f"查询失败: {str(e)}")
本地测试
# 启动测试服务器
dify plugin dev
# 在 Dify 后台 → Settings → Plugins → 安装本地插件
# 输入: http://localhost:5003
打包与发布到 Marketplace
# 打包为 .difypkg 文件
dify plugin package ./my-awesome-plugin
# 输出: my-awesome-plugin-0.0.1.difypkg
# 发布到 Dify Marketplace
# 1. 访问 https://marketplace.dify.ai
# 2. 注册开发者账号
# 3. 上传 .difypkg 文件
# 4. 填写发布信息
# 5. 提交审核
graph LR
Dev[开发] --> Test[本地测试]
Test --> Package[打包 .difypkg]
Package --> Submit[提交 Marketplace]
Submit --> Review[官方审核]
Review --> Publish[上架发布]
Publish --> Users[全球用户安装使用]恭喜!
🎉 你已经完成了 Dify 全攻略 30 期教程的学习!
回顾你掌握的技能:
- ✅ 从零部署 Dify 平台
- ✅ 构建可视化 AI Workflow
- ✅ 企业级 RAG 知识库
- ✅ 多模式 Agent 智能体
- ✅ 生产环境高可用架构
- ✅ 插件开发与 Marketplace 发布
你已经从 Dify 初学者蜕变为 Agentic Workflow 的践行者!