1. 项目背景
Dify 的模型供应商列表里有 OpenAI、Anthropic,但也有 Ollama、Xinference、LocalAI——甚至你可以接入自己开发的自定义模型后端。这些"非官方" Provider 之所以能无缝接入,靠的是插件系统(Plugin System)。插件不是直接跑在 Dify 的 Python 进程里的——而是在一个独立的 Go 服务(Plugin Daemon)中运行。这套"插件沙箱"架构有三个核心价值:
安全隔离:一个插件出了 bug(如内存泄漏、死循环)不会拖垮整个 Dify API。Daemon 可以独立 kill 插件进程并重启。
语言无关:插件可以用 Python 写,也可以用 Go 写。Python 插件通过 gRPC 与 Daemon 通信,Go 插件直接被 Daemon 加载为子进程。
热插拔:安装、升级、卸载插件都不需要重启 Dify——Daemon 动态管理插件生命周期。
理解这套架构意味着你能:评估第三方插件的安全性、排查"插件模型调不通"时知道是 Daemon 问题还是网络问题、甚至自己开发一个插件发布到 Marketplace。
2. 项目设计
小胖:(看着 docker-compose 里的 plugin_daemon 服务)“大师,为啥 Plugin Daemon 用 Go 写?Dify 后端全是 Python,搞两种语言不是增加维护负担吗?”