
先说结论
我们组现在是按节点往同一条 Workflow 上接东西。不管你是新写了一个 skill,还是新做了一个 node,本质上都是往工作流里加一个节点。对这样的节点,我们有三条硬要求:讲得清、人能用、脚本优先。
这三条不是为了形式上的规范,而是为了同一件事:这个节点在任何时候都有人能接手。作者讲得清,出了问题才有人懂;人能用,Agent 挂掉时才有人兜得住;脚本优先,平时才跑得稳、跑得省。
任何一条不满足,节点就打回去重写。
目录
- 1. 背景:大家在同一条工作流上接节点
- 2. 原则一:自己写的东西,自己要讲得清
- 3. 原则二:Agent 能用,人也要能用
- 4. 原则三:脚本优先
- 5. 一个例子:测试执行节点
- 6. 三条原则其实是一件事
- 7. 收个尾
1. 背景:大家在同一条工作流上接节点
我们组的测试工作已经工作流化了:发现版本、准备环境、读取任务、板端执行、整理结果、发送通知,每一步都是一个节点,节点之间只靠约定好的输入输出衔接。
谁要加一个新流程,或者写了一个 skill 想分享给大家、放进现有工作流,都要以 skill 或 node 的形式提交。这两者没有实质区别:都是一段有明确输入输出、会被别人和 Agent 反复调用的能力。
AI Coding 让写一个节点变得很快。快本身不是问题,问题是作者可能完全不理解自己交上来的东西。个人项目里,这只是自己的风险;放进共享工作流,一个节点出事,整条流程就停了。
所以我们在节点准入这里立了三条原则。
2. 原则一:自己写的东西,自己要讲得清
提交节点时,作者要在组会或者其他场合给大家讲一遍:它做什么、内部怎么走、输入输出是什么、哪里可能出问题。
这一步真正的目的,不是让听的人听懂,而是让讲的人自己理清楚。道理和费曼学习法、小黄鸭调试法一样:讲不出来的地方,往往就是没想清楚的地方。
现在不少人是纯氛围编程(Vibe Coding)的写法:AI 生成、跑通、提交,对里面的东西一无所知。这样的节点一旦接进工作流出了问题,唯一的办法就是再开一个 AI,让它从头去读代码。
如果对提交的东西完全没有约束,常见的问题有两类:
- 兼容性差。我们的节点至少要在 Windows 和 Linux 两个平台上都能跑,放任不管时,路径、编码、命令差异往往没人考虑。
- 内部逻辑乱。流程层层嵌套、职责不清,作者自己也说不出某一步为什么存在。
归结起来就一句话:自己写出来的东西,一定要能给别人说明白。
3. 原则二:Agent 能用,人也要能用
节点不能只满足「让 Agent 走一遍没问题」,它在人手里也必须能正常用。
原因很直接:Agent 会挂。可能是后面的模型出了问题,也可能是 Agent 框架本身出了问题。这时候不能当甩手掌柜,得有人马上接得上。
具体要求有两条:
- 能力要封装好,最好做成 CLI,一行命令就能跑,参数尽量少。
- 说明文件要写得精炼、简洁、易懂,人一眼就能看明白。
一般来说,人能看明白的说明,Agent 也能看明白。反过来却不一定:Agent 能硬啃下来的复杂调用方式,人在紧急时刻往往根本上不了手。
4. 原则三:脚本优先
执行方式的优先级是:脚本 > Agent > 人。
一个节点如果脚本能跑,Agent 一般也能跑。但一旦交给 Agent,灵活性和不确定性是一起来的:这次这么做,下次可能那么做,出错的概率也不算小。而且 Agent 更费钱,也更费时间。流程足够固定时,用脚本代替一定是最优解。
| 执行方式 | 优点 | 代价 | 适合 |
|---|---|---|---|
| 脚本 | 确定、快、便宜 | 要求流程固定 | 输入输出明确、可以重复的步骤 |
| Agent | 灵活,能应对变化 | 不确定、费钱、费时 | 探索阶段、异常处理 |
| 人 | 能判断、能负责 | 最慢、最占人力 | 需要做决定、担责任的环节 |
这不是说一开始就不能用 Agent。节点刚起步时,很多步骤只能先让 Agent 去做,这没关系。但 Agent 跑通以后,要回头试一试:这一步能不能用脚本、用 CLI 固定下来?哪怕复杂一点,只要能做出来,就把它落地成脚本。
初期用 Agent 探路没问题,但要长期稳定运行,能不用 Agent 的地方就尽量不用。
5. 一个例子:测试执行节点
我们有一套 Agent 驱动的自动化测试工作流,中间最重要的节点是测试任务执行。它分两类:一类是按测试单执行测试用例,一类是按问题单复现问题。
这个大节点内部其实有很多小步骤:从 Jira 拉取这次要执行或复现的任务、准备环境、在开发板上执行,最后整理结果,把报告交给下一个节点。
5.1 不按原则来:做成一个黑盒
最快的做法,是把整个节点交给 Agent,做成一个黑盒。一两天,最多两三天,就能开发出来。代价也很明显:
- 做的人对里面的框架完全不了解,这违反了原则一。
- 内部流程复杂,Agent 一旦挂掉,人想介入,会发现还不如从零开始手动做,这违反了原则二。
- 可从零手动做,又接不上前后节点:不知道任务该怎么取,也没法按下一个节点要的格式正常提交报告。结果就是一个节点出问题,整条工作流跟着废掉。Agent 驱动的节点尤其容易这样。
落到具体步骤上,问题会更细:
- 拉取 Jira 任务时,Agent 有时现写一段脚本,有时直接调底层的 REST API,有时调用要带一长串参数。它很灵活,但人没法照着做。
- 输出报告时,让 Agent 手写一份 JSON 很轻松,让人手写就很麻烦。
5.2 按原则来:拆开、封装、脚本化
按三条原则来做,开发时间会长一些,但节点的形态完全不同。
首先是理清结构。作者要给别人讲清楚这个节点,就必须先把它拆成若干小步骤,知道每一步的输入输出。
然后是拉取任务。底层仍然是 Jira 的 REST API,但我们不让 Agent 每次直接去调它,而是在上面封一个 Python 脚本。Agent 用的时候直接调这个脚本,就能知道这次要执行什么任务;人用的时候,同样一行 CLI 命令,拿到同样的结果。人可以无缝顶替 Agent 的位置。
最后是提交报告。同样封成 CLI,只需要填几个参数,比如通过与否、结论是什么,命令就直接生成下一个节点需要的报告,没有人需要手写 JSON。
1 | # 以下命令仅为示意 |
这样一来,Agent 挂了,节点不会挂;节点不挂,整条工作流就不会挂。
| 对比项 | 黑盒做法 | 按原则做法 |
|---|---|---|
| 开发时间 | 一两天 | 更长,需要拆分和封装 |
| 作者理解 | 基本不了解内部 | 能讲清每一步 |
| 拉取任务 | Agent 现写脚本或直接调 REST API | 封装好的脚本,一行命令 |
| 提交报告 | 手写 JSON | CLI 填几个参数 |
| Agent 挂掉时 | 人接不上,整条工作流停摆 | 人用同样的命令接上,工作流继续 |
6. 三条原则其实是一件事
三条原则看起来各管各的,其实指向同一件事:节点在任何时候都有人能接手。
- 原则一保证有人懂:作者理解它,出了问题知道从哪里查。
- 原则三决定平时谁来跑:能固定下来的交给脚本,稳定又省钱。
- 原则二决定出事时谁来兜:Agent 挂了,人用同样的 CLI 顶上。
原则二和原则三,很多时候是同一个动作:把一步能力封装成简单的脚本或 CLI,平时 Agent 调它,出事时人调它。反过来,让 Agent 每次直接调底层接口、现写脚本,看起来很灵活,实际上同时违反了这两条。
7. 收个尾
AI Coding 让写一个节点变得很便宜,但要让一个节点在工作流里长期稳定地跑下去,成本并没有跟着降下来。
| 原则 | 防住什么 | 怎么验收 |
|---|---|---|
| 讲得清 | 作者不懂自己的节点,出事只能让 AI 从头读 | 能在组会上讲清结构、输入输出和风险 |
| 人能用 | Agent 挂掉后节点跟着挂,整条工作流停摆 | 人能用一行 CLI 顶替 Agent 完成这个节点 |
| 脚本优先 | Agent 带来的不确定性、成本和耗时 | 已经固定的步骤都落地成了脚本 |
这三条是我们组内一直在用的底线。写得快不算本事,写出来的东西能被别人接得住,才算真正交付了。
