插件守护进程与执行环境
插件守护进程与执行环境
相关源文件
本章引用的主要源码文件:
api/core/entities/knowledge_entities.pyapi/core/entities/provider_entities.pyapi/core/helper/marketplace.pyapi/core/plugin/endpoint/exc.pyapi/core/plugin/entities/endpoint.pyapi/core/plugin/entities/marketplace.pyapi/core/plugin/entities/plugin.pyapi/core/plugin/entities/plugin_daemon.pyapi/core/plugin/entities/request.pyapi/core/plugin/impl/base.pyapi/core/plugin/impl/datasource.pyapi/core/plugin/impl/endpoint.pyapi/core/plugin/impl/exc.pyapi/core/plugin/impl/model.pyapi/core/plugin/impl/oauth.pyapi/core/plugin/impl/plugin.pyapi/migrations/versions/2025_07_22_0019-375fe79ead14_oauth_refresh_token.pyapi/migrations/versions/2025_09_08_1007-c20211f18133_add_headers_to_mcp_provider.pyapi/schedule/check_upgradable_plugin_task.pyapi/services/plugin/oauth_service.pyapi/tasks/process_tenant_plugin_autoupgrade_check_task.pyapi/tests/test_containers_integration_tests/services/tools/test_mcp_tools_manage_service.pyapi/tests/unit_tests/core/plugin/test_endpoint_client.pyapi/tests/unit_tests/core/plugin/test_plugin_runtime.pyapi/tests/unit_tests/tasks/test_process_tenant_plugin_autoupgrade_check_task.pyapi/tests/unit_tests/utils/http_parser/test_oauth_convert_request_to_raw_data.pyweb/app/components/base/tab-header/index.tsxweb/app/components/base/tab-slider-new/index.tsxweb/app/components/base/tab-slider-plain/index.tsxweb/app/components/base/tab-slider/index.tsxweb/app/components/header/header-wrapper.tsxweb/app/components/plugins/marketplace/hydration-server.tsxweb/app/components/plugins/plugin-page/plugins-panel.tsxweb/app/components/plugins/types.tsweb/app/components/tools/mcp/headers-input.tsxweb/context/query-client-server.tsweb/context/query-client.tsxweb/hooks/use-query-params.spec.tsxweb/hooks/use-query-params.tsweb/service/use-plugins.ts
本文描述了插件守护进程服务和执行环境,该环境支持在 Dify 中安全、隔离地执行第三方插件。有关特定插件类型(工具、模型提供方)的信息,请参阅工具提供方类型与架构。对于不需要插件守护进程的内置工具,请参阅内置工具与 API 工具集成。
目的与范围
插件守护进程是一个独立的基于 Go 的服务,负责管理第三方插件的生命周期和执行。它提供以下功能:
- 安全隔离:插件在主 API 服务之外的独立进程空间中执行。
- 资源管理:对插件操作进行 CPU、内存和执行时间限制。
- 包管理:插件包的安装、缓存和版本管理。
- 市场集成:从 Dify 市场发现和安装插件。
- 多语言支持:提供带有隔离环境的 Python 插件运行时。
系统架构
插件守护进程作为独立服务与主 Dify API 并行运行,通过 HTTP 通信并在隔离环境中管理插件执行。
高层组件架构
来源:api/core/plugin/impl/base.py:62-71、api/core/plugin/impl/plugin.py:25-30、api/core/helper/marketplace.py:12-13。
插件守护进程服务
插件守护进程作为独立容器部署,拥有自己的生命周期和配置。
服务配置
服务配置由 dify_config 对象驱动,该对象将环境变量映射到 Pydantic 设置。
| 配置项 | 值 | 描述 |
|---|---|---|
| URL | PLUGIN_DAEMON_URL | 插件守护进程服务的基础 URL |
| 端口 | 5002 | 守护进程的默认 HTTP API 端口 |
| 认证密钥 | PLUGIN_DAEMON_KEY | 用于认证对守护进程 API 请求的密钥 |
| 超时时间 | PLUGIN_DAEMON_TIMEOUT | 守护进程请求的超时时间(默认 600 秒) |
| 最大包大小 | PLUGIN_MAX_PACKAGE_SIZE | 上传插件包的最大大小 |
来源:api/core/plugin/impl/base.py:41-52、api/core/helper/marketplace.py:21-22。
执行环境
插件在由守护进程管理的隔离 Python 环境中执行,并受插件清单中定义的严格资源限制约束。
插件资源需求
PluginResourceRequirements 类定义了每个插件的约束条件,包括内存限制和特定的权限范围(工具、模型、节点、端点、存储)。
来源:api/core/plugin/entities/plugin.py:26-58。
执行流程与逻辑
PluginInstaller 负责处理与守护进程的生命周期任务通信。例如,获取插件的 README 或从标识符安装插件。
来源:api/core/plugin/impl/plugin.py:119-140、api/core/plugin/entities/plugin_daemon.py:70-77。
插件安装与生命周期
插件从 PluginInstallationSource 定义的四个主要来源安装:Github、Marketplace、Package(本地上传)和 Remote(调试)。
来源:api/core/plugin/entities/plugin.py:19-23。
安装过程
PluginInstaller 类提供了与守护进程交互进行包管理的方法。
upload_pkg:将.dify包文件上传到守护进程api/core/plugin/impl/plugin.py:77-100。install_from_identifiers:通过唯一标识符触发多个插件的安装api/core/plugin/impl/plugin.py:119-140。fetch_plugin_installation_task:轮询正在进行的安装任务的状态api/core/plugin/impl/plugin.py:153-161。
市场集成
Dify 与市场集成以实现插件发现。marketplace.py 辅助模块负责处理与市场 API 的直接通信。
# api/core/helper/marketplace.py
def download_plugin_pkg(plugin_unique_identifier: str):
return download_with_size_limit(get_plugin_pkg_url(plugin_unique_identifier), dify_config.PLUGIN_MAX_PACKAGE_SIZE)
来源:api/core/helper/marketplace.py:16-21、web/service/use-plugins.ts:201-204。
自动升级机制
Dify 包含一个后台任务系统,用于根据租户特定策略检查和应用插件更新。
自动升级策略
租户可以通过 TenantPluginAutoUpgradeStrategy 配置策略:
- LATEST:始终升级到最新版本。
- FIX_ONLY:仅在补丁版本(X.Y.Z -> X.Y.Z+1)发生变化时升级。
- DISABLED:不进行自动更新。
来源:api/tasks/process_tenant_plugin_autoupgrade_check_task.py:160-163。
升级任务流程
来源:api/schedule/check_upgradable_plugin_task.py:25-64、api/tasks/process_tenant_plugin_autoupgrade_check_task.py:149-178。
数据模型与实体
插件清单(manifest.json)
PluginDeclaration 类表示插件的元数据,包括其类别、作者和所需资源。
| 字段 | 类型 | 描述 |
|---|---|---|
version | str | 插件版本字符串 |
category | PluginCategory | 工具、模型、扩展、代理策略等 |
resource | PluginResourceRequirements | 内存和权限限制 |
plugins | Plugins | 提供的组件列表(工具、模型、端点) |
来源:api/core/plugin/entities/plugin.py:70-113。
自然语言到代码实体的映射
| 系统概念 | 代码实体 | 文件 |
|---|---|---|
| 安装任务 | PluginInstallTask | api/core/plugin/entities/plugin_daemon.py:161-166 |
| 插件实体 | PluginEntity | api/core/plugin/entities/plugin.py:157-168 |
| 守护进程客户端 | BasePluginClient | api/core/plugin/impl/base.py:62-71 |
| 市场辅助模块 | marketplace.py | api/core/helper/marketplace.py:1-13 |
| 插件安装器 | PluginInstaller | api/core/plugin/impl/plugin.py:25-210 |
来源:api/core/plugin/entities/plugin_daemon.py:161-166、api/core/plugin/impl/base.py:62-71、api/core/plugin/impl/plugin.py:25-30。