PaiFlow 插件架构思考:为什么要用 Link 连接外部能力
在工作流系统里,Workflow Engine 更像汽车的发动机,负责节点调度、流程流转和变量传递。
但真正的业务系统,不可能只靠工作流和 LLM。
我们还需要调用天气、TTS、OCR、搜索、文件服务、企业内部接口,甚至 MCP。
如果这些能力全部直接写进 Workflow Engine,系统很快就会变成这样:
Workflow
├── TTS SDK
├── OCR SDK
├── 搜索 SDK
├── 天气 API
├── 企业内部 RPC
└── MCP
Workflow 会越来越重,维护成本也会越来越高。
所以 PaiFlow 把这部分能力单独拆出来,形成了 Link 插件服务。
可以简单理解为:
Link 是 Workflow 和外部能力之间的统一连接层。
1. Link 解决的核心问题
Workflow 应该关心的是:
我要调用什么工具?
参数是什么?
结果交给哪个节点?
而不应该关心:
URL 是什么?
GET 还是 POST?
参数放 Query 还是 Body?
怎么鉴权?
底层到底是 HTTP、RPC 还是 MCP?
这些事情全部交给 Link。
于是整体架构变成:
Workflow
↓
Link
↓
外部能力
这背后最重要的思想就是:
业务编排和外部能力解耦。
2. Link 本质上做两件事
工具管理
首先要告诉系统:
现在有哪些工具可以使用。
比如一个天气工具,需要保存:
工具名称
工具 ID
工具描述
参数
返回值
调用地址
HTTP Method
版本
鉴权方式
这些信息通常通过 OpenAPI Schema 描述,并保存到数据库中。
所以可以把工具管理理解成:
给每个工具建立一份机器可以理解的“使用说明书”。
工具执行
Workflow 真正运行到插件节点时,只需要告诉 Link:
toolId
operationId
version
参数
Link 再根据工具 Schema 找到:
调用哪个地址
使用什么 Method
参数放在哪里
需要什么 Header
是否需要鉴权
最后构造真实请求并执行。
整个过程就是:
Workflow
↓
PluginNode
↓
Link
↓
读取 Tool Schema
↓
解析 OpenAPI
↓
构造 HTTP 请求
↓
执行外部工具
↓
返回 Workflow
3. Schema 为什么重要
Link 能做到统一执行各种工具,关键就在 Schema。
Schema 可以理解成:
工具和系统之间的契约。
例如:
server = https://api.xxx.com
method = POST
path = /tts
text = string
text = required
有了这份描述以后,执行器不需要提前知道这是 TTS、天气还是 OCR。
它只需要:
读取 Schema
↓
解析 Schema
↓
按照 Schema 执行
这就是典型的:
契约驱动执行。
以后增加新工具时,不一定需要修改 Workflow Engine,只需要增加新的工具定义。
4. 为什么还需要 toolId、operationId 和 version
可以这样理解:
toolId
= 哪个工具
operationId
= 工具里的哪个能力
version
= 使用哪个版本
比如:
toolId = weather
里面可能有:
currentWeather
weatherForecast
airQuality
这些就是不同的 operation。
而 version 解决的是兼容问题。
比如天气 API 从:
v1
升级到了:
v2
老工作流仍然可以继续使用 v1,新工作流使用 v2。
所以:
版本化可以降低工具升级对已有工作流的影响。
5. Redis、MySQL、HTTP Executor 分别是什么角色
这些组件不要和 Link 的核心思想混在一起。
可以简单理解:
MySQL
= 保存工具档案
Redis
= 缓存工具配置,提高查询速度
Schema Parser
= 读取工具说明书
HttpExecutor
= 真正发送 HTTP 请求
它们只是 Link 不同层次的实现组件。
真正核心仍然是:
统一描述
+
统一执行
6. 什么时候适合使用这种架构
当系统开始出现大量外部能力时,就非常适合增加一层 Link。
典型场景包括:
- 工作流需要接入很多第三方 API;
- 工具数量会不断增加;
- 同一个工具可能存在多个版本;
- 希望工具可以动态创建,而不是每增加一个工具就修改 Workflow;
- 未来可能同时接 HTTP、RPC、MCP 等不同协议;
- 希望统一做鉴权、限流、超时、日志和安全治理。
如果系统只有两三个非常固定的内部接口,而且以后基本不会变化,那么直接调用反而可能更简单。
所以 Link 并不是为了“多一层架构”。
它真正适合解决的是:
外部能力越来越多以后,如何控制复杂度。
7. 最值得沉淀的几个架构思想
PaiFlow 的 Link 背后,其实可以抽象出几条很通用的软件设计思想:
Workflow
→ 业务编排
Link
→ 能力适配与路由
Tool Schema
→ 能力契约
Schema Parser
→ 契约解释
Executor
→ 底层执行
MySQL
→ 元数据持久化
Redis
→ 性能优化
External Tool
→ 真正的能力提供者
其中最重要的一句话是:
上层只表达“我要做什么”,中间层负责解决“具体怎么做”。
这也是 Link 真正的价值。
总结
PaiFlow 的 Link 不是某一个具体插件。
它更像是一套:
外部能力接入基础设施。
Workflow 负责流程,Link 负责连接工具。
通过统一的 Tool Schema 和执行协议,不管下面接的是天气、TTS、OCR、HTTP API,还是未来的 MCP,对 Workflow 来说都可以表现成一个统一的 Tool。
这就是插件架构真正想解决的问题:
不是怎么调用一个 API,而是当未来有一百个 API 时,系统依然能够保持清晰。