Learn
Dify/24-plugin-dev

插件开发入门

第 9 章用了内置工具与插件。当你的业务系统有独特接口(内部 ERP、私有算法),就需要自己写插件把它接进 Dify。本章讲清插件的结构与最小开发路径。

1. 插件解决什么问题

插件让你把「外部能力」封装成 Dify 可识别的工具(Tool) 或模型供应商(Model Provider),在工作流与 Agent 里直接拖用,无需改平台源码。

2. 插件的基本结构

一个工具插件通常包含清单与实现:

# manifest.yaml 概要
name: my-erp-tool
version: 0.1.0
type: tool
label:
  zh: 内部 ERP 查询
tools:
  - name: query_order
    label: 查询订单
    parameters:
      - name: order_id
        type: string
        required: true
    endpoint: http://erp.internal/order
💡先想清输入输出契约

插件开发 80% 的工作量在「把外部接口的参数和返回,整理成清晰、可校验的 schema」。把字段类型、必填项、错误码先写清楚,实现反而简单。

3. 实现与本地调试

工具实现负责:接收 Dify 传来的参数 → 调用你的后端 → 把结果整理成文本/JSON 返回。

# 工具实现(伪代码)
def query_order(order_id: str):
    resp = requests.get(f"http://erp.internal/order/{order_id}")
    if resp.status_code != 200:
        return {"result": f"查询失败:{resp.status_code}"}
    data = resp.json()
    return {"result": f"订单 {order_id} 状态:{data['status']}"}

4. 注册与权限

开发完成后,在 Dify 控制台「插件 → 本地插件 / 上传」加载,系统会校验清单格式并暴露为可用工具。

# 本地调试常用:用 ngrok 之类把本机暴露给 Dify 调试
# 或直接把插件打包含上传到私有插件市场
⚠️插件里的密钥不要硬编码

ERP、内部系统的凭证应走插件环境变量或 Dify 的密钥配置,不要写死在代码里,否则会随插件包泄露。

🎯动手做

挑一个你最熟悉的简单 HTTP 接口(如查询天气、查快递),写一份插件清单,声明 1 个参数与 1 个返回字段,并试着在 Dify 里加载为工具。

小结

  • 插件把外部能力封装成可拖用的工具/模型供应商
  • 核心是写清 manifest 里的参数与返回 schema
  • 实现负责转发参数、整理返回、处理错误
  • 密钥走配置不硬编码;下一步讲多模型路由 →