对于 PaiFlow 的用户来说,并不关心插件的 Schema 长什么样子,只管 CRUD 就好了,😄
当然了,对于首次接触 PaiFlow 的球友来说,插件服务的 CRUD 确实也需要花点时间去讲下,否则新手在第一次还真不太好说这些信息都会填。尤其是插件路径、授权方式的校验等信息,不太清楚该怎么填。
这篇就来手把手带大家实操一下。嘟嘟嘟,发车。
1.插件Schema的表结构
在 PaiFlow 中,我们把工具当成了一种可配置的资源。
和工作流的 DSL 很像,核心是一大段 JSON 字符串,因为 Link 服务的本职工作是把工具调起来,它不想关心工具背后是谁写的、用什么语言写的,它只需要有一份足够完整的说明书,能把请求拼出来就行。
在 PaiFlow 中,插件 Schema 一共存了两份。一份是给控制台 hub 用的,放在 paiflow-console.tool_box 表中。除了 schema 本体,往往还会带一些展示和运营属性,比如工具名称怎么展示、分类、备注、是否启用、是谁录入的、更新时间之类的。
另一份是给 Link 服务用的,放在 paiflow-link.tools_schema 表中。它更偏执行视角,关注怎么调用工具:schema 原文长什么样、工具的版本号是多少、解析后需要的关键信息能不能稳定拿到。
工作流引擎要调用工具时,Link 服务就是从这张表里把 schema 拉出来进行解析、拼请求,然后发出去,把结果再塞回工作流的。
1.1 tool_box 表结构
tool_box 中的字段信息如下所示,主要给前端使用,包含工具的图标、说明、web_schema、schema、鉴权等信息。
CREATE TABLE `tool_box` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'Primary key',
`tool_id` varchar(30) DEFAULT NULL COMMENT 'Core system tool identifier',
`name` varchar(64) DEFAULT NULL COMMENT 'Tool name',
`description` varchar(255) DEFAULT NULL COMMENT 'Tool description',
`icon` varchar(255) DEFAULT NULL COMMENT 'Avatar icon',
`user_id` varchar(256) DEFAULT NULL COMMENT 'User ID',
`app_id` varchar(60) DEFAULT NULL COMMENT 'appid',
`end_point` text COMMENT 'Request address',
`method` varchar(255) DEFAULT NULL COMMENT 'Request method',
`web_schema` longtext COMMENT 'Web protocol',
`schema` longtext COMMENT 'Protocol',
`visibility` int DEFAULT '0' COMMENT 'Visibility 0: only visible to self, 1: visible to some users',
`deleted` tinyint(1) DEFAULT '0' COMMENT 'Whether deleted: 1-deleted, 0-not deleted',
`create_time` timestamp NULL DEFAULT NULL COMMENT 'Creation time',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Modification time',
`is_public` bit(1) DEFAULT b'0',
`favorite_count` int DEFAULT '0' COMMENT 'Favorite count',
`usage_count` int DEFAULT '0' COMMENT 'Usage count',
`tool_tag` varchar(255) DEFAULT NULL,
`operation_id` varchar(255) DEFAULT NULL,
`creation_method` tinyint DEFAULT '0',
`auth_type` tinyint DEFAULT '0',
`auth_info` varchar(1024) DEFAULT NULL,
`top` int DEFAULT '0',
`source` tinyint DEFAULT '1',
`display_source` varchar(16) DEFAULT '1,2',
`avatar_color` varchar(255) DEFAULT NULL,
`status` tinyint NOT NULL DEFAULT '1' COMMENT 'Status 0: draft, 1: formal',
`version` varchar(100) DEFAULT NULL,
`temporary_data` mediumtext COMMENT 'Plugin temporary data',
`space_id` bigint DEFAULT NULL COMMENT 'Space ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
以古诗词插件为例:
id: 8
tool_id: tool@718dbda04bc
name: 今日诗词
description: 今日诗词
icon: http://oss-beijing-m8.openstorage.cn/SparkBotProd/icon/common/emojiitem_00_10@2x.png
user_id: admin
app_id: f740451b
end_point: https://v2.jinrishici.com/one.json
method: get
web_schema: {"toolRequestInput":[],"toolRequestOutput":[{"id":"c7f59479-d235-42a7-98ca-aca57949c641","name":"status","description":"success","type":"string","open":true,"nameErrMsg":"","descriptionErrMsg":""},{"id":"5c2fe98b-2c68-4d49-afed-cb31962b1e14","name":"data","description":"返回结果","type":"object","open":true,"nameErrMsg":"","descriptionErrMsg":"","children":[{"id":"da51f613-12c1-49af-b1d1-40fd8706ee52","name":"id","description":"5b8b9572e116fb3714e6fa41","type":"string","open":true,"nameErrMsg":"","descriptionErrMsg":""},{"id":"49358ee3-4307-43ae-b409-b8ad1761080a","name":"content","description":"斜月沉沉藏海雾,碣石潇湘无限路。","type":"string","open":true,"nameErrMsg":"","descriptionErrMsg":""},{"id":"9fdbbf56-8e19-4c96-abe3-08b356f899cc","name":"popularity","description":"334000","type":"integer","open":true,"nameErrMsg":"","descriptionErrMsg":""},{"id":"af80b103-1b2e-4995-8c47-ab83839019da","name":"origin","description":"出处","type":"object","open":true,"nameErrMsg":"","descriptionErrMsg":"","children":[{"id":"e3baf9b6-fadf-4854-b00e-273f85e81d61","name":"title","description":"春江花月夜","type":"string","open":true,"nameErrMsg":"","descriptionErrMsg":""},{"id":"5edcddca-1e65-4483-8adb-06b7b97bdfb6","name":"dynasty","description":"唐代","type":"string","open":true,"nameErrMsg":"","descriptionErrMsg":""},{"id":"ef25c5ae-b1d4-45a5-9540-63cc91faf193","name":"author","description":"张若虚","type":"string","open":true,"nameErrMsg":"...真诚点赞 诚不我欺
回复