跳转到主要内容
Endpoint 是插件对外暴露的 HTTP 接口,用于与外部系统集成。本文以 Neko Cat 项目为例,讲解其结构。完整的插件代码参考 GitHub 仓库

分组定义

Endpoint 分组是多个 Endpoint 的集合。在 Dify 插件中创建新的 Endpoint 时,可能需要填写以下配置。
Endpoint 分组配置表单
除了 Endpoint Name 之外,可通过编写分组的配置来添加表单项。保存后,即可看到该分组包含的多个接口,它们共用同一份配置。
Endpoint 分组接口列表

结构

  • settings (map[string] ProviderConfig):Endpoint 配置定义。
  • endpoints (list[string],必填):指向具体的 endpoint 接口定义。
settings:
  api_key:
    type: secret-input
    required: true
    label:
      en_US: API key
      zh_Hans: API key
      ja_Jp: API key
      pt_BR: API key
    placeholder:
      en_US: Please input your API key
      zh_Hans: 请输入你的 API key
      ja_Jp: あなたの API key を入れてください
      pt_BR: Por favor, insira sua chave API
endpoints:
  - endpoints/duck.yaml
  - endpoints/neko.yaml

接口定义

  • path (string):遵循 Werkzeug 接口标准。
  • method (string):接口方法,仅支持 HEADGETPOSTPUTDELETEOPTIONS
  • extra (object):基本详情之外的配置信息。
    • python (object)
      • source (string):实现此接口的源代码。
path: "/duck/<app_id>"
method: "GET"
extra:
  python:
    source: "endpoints/duck.py"

接口实现

实现一个继承自 dify_plugin.Endpoint 的子类,并实现其 _invoke 方法。
  • 输入参数
    • r (Request):来自 werkzeugRequest 对象。
    • values (Mapping):从路径解析出的路径参数。
    • settings (Mapping):此 Endpoint 的配置信息。
  • 返回
    • 来自 werkzeugResponse 对象,支持流式响应。
    • 不支持直接返回字符串。
示例代码:
import json
from typing import Mapping
from werkzeug import Request, Response
from dify_plugin import Endpoint

class Duck(Endpoint):
    def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
        """
        Invokes the endpoint with the given request.
        """
        app_id = values["app_id"]

        def generator():
            yield f"{app_id} <br>"

        return Response(generator(), status=200, content_type="text/html")

注意事项

  • Endpoint 仅在插件被调用时实例化,并非长期运行的服务。
  • 开发 Endpoint 时注意安全性,避免执行危险操作。
  • Endpoint 可用于处理 Webhook 回调,或为其他系统提供对接接口。
如果你刚接触插件开发,可先阅读 插件开发入门开发者速查表

相关资源


Edit this page | Report an issue