Penguin工作流引擎:自己定流程控制权用啥模型

Penguin工作流引擎:自己定流程控制权用啥模型

💡 原文中文,约4700字,阅读约需12分钟。
📝

内容提要

Penguin是一个用TypeScript编写的可组合工作流引擎,强调用户完全掌控流程,而非依赖平台预设。它通过代码定义工作流,区分确定性脚本和Agent推理,避免滥用AI,并支持持久运行和多种触发器。作者已用其自举开发,挑战了主流平台对开发流程的控制。

🔎

延伸解读

代码 vs 自然语言:精确性的胜利

Penguin选择用TypeScript定义工作流,而非自然语言,这背后是对逻辑精确性的追求。自然语言灵活但模糊,容易产生歧义,而代码能清晰表达分支、并行、阻塞等复杂逻辑。例如,用`await Promise.all`实现并行,三行代码即可完成,无需担心模型理解偏差。这种设计哲学强调,当流程需要精确控制时,代码是更可靠的表达方式。

Agent的合理边界:确定性任务交给脚本

Penguin区分确定性与不确定性任务,将读取ticket、开PR等确定性操作交给脚本或适配器,而Agent仅负责需要推理的部分。这避免了每次调用MCP或CLI都消耗LLM推理资源,降低成本与出错风险。主流趋势让Agent包揽一切,但Penguin反其道而行,认为Agent应被限制在擅长领域,其他交给确定性代码,实现效率与可靠性的平衡。

自举与可组合性:工具成熟度的标志

作者用Penguin构建Penguin自身,即自举,这通常意味着抽象已足够完备。Penguin的核心原语仅三个:Workflows、Adapters、Messages,工作流可像函数一样互相调用,支持拆分、测试与组合。这种可组合性让复杂流程得以模块化,每个部分独立迭代,最终拼装成完整流程,体现了代码定义流程的灵活性与强大性。

控制权与复杂度的权衡:自由还是负担?

Penguin将全部控制权交给用户,但也将全部复杂度一并交付。用户需编写TypeScript定义流程,而非在UI中点击配置,这要求更高的技术门槛。文章指出,这中间隔着的不是技术选型,而是认知层级。对于普通开发者,这种自由可能变成负担,而平台预设的流程虽受限但易用。Penguin的beta标签暗示其尚未成熟,这一悖论仍待解答。

Q&A

Penguin工作流引擎是什么?

Penguin是一个用TypeScript编写的可组合工作流引擎,强调用户完全掌控流程,而非依赖平台预设。它通过代码定义工作流,区分确定性脚本和Agent推理,避免滥用AI,并支持持久运行和多种触发器。

Penguin的设计哲学是什么?

Penguin的设计哲学包括:你掌控工作流,不依赖平台预设;代码优于自然语言,复杂逻辑用TypeScript表达更清晰;确定性的用脚本,不确定的用Agent,不滥用Agent调用;持久运行,关闭终端不影响工作流执行;响应多种触发器,如Slack、GitHub、Jira、Webhook等。

Penguin如何解决Agent工作流中“Agent完成”和“需要人工输入”的模糊问题?

Penguin通过引入“gate”机制来解决这个问题。gate是一个确定性的暂停点,例如“Slack来了一条新消息,你要不要暂停实现先去回复”。这样Agent停下来的原因只有两种:要么真的做完了,要么在gate等你,没有第三种模糊地带。

为什么Penguin选择用TypeScript代码而不是自然语言来定义工作流?

因为代码比自然语言更适合描述逻辑。自然语言灵活但模糊,而代码精确,能清晰表达分支、并行、阻塞、超时、重试等复杂逻辑。例如,用TypeScript写`await Promise.all([workflowB(), workflowC()])`然后`await workflowD()`,三行搞定,没有歧义。

Penguin对MCP和CLI的使用持什么态度?

Penguin认为MCP和CLI被用在了不该用的地方。它主张将确定性的事情写成脚本直接调用,比如读GitHub issue直接调用REST API,而不是让Agent去调MCP或CLI,因为每次调用都涉及LLM推理,成本高且有出错风险。Agent只负责真正需要推理的部分。

Penguin是否可以不使用Agent?

可以。Penguin允许构建一个包含步骤、阻塞器、完整逻辑的工作流,从头到尾不调用任何Agent。这意味着工作流引擎本身是核心,Agent只是可选的插件,这与主流Agent框架相反。

Penguin的安装和使用要求是什么?

Penguin的安装命令是`npm install -g @mikaelweiss/penguin`,需要Node 24或更新版本。第一次运行会在`~/.penguin/`目录下创建starter catalog,包含九个开箱即用的工作流。每个工作流都是独立进程,关闭终端仍可运行,终端只是viewer。

Penguin的作者是如何使用Penguin的?

作者Mikael Weiss已经用Penguin在自己的工作中跑通了从ticket到PR的全流程,甚至用Penguin来构建Penguin本身,实现了自举(bootstrapping)。

Penguin与主流平台(如Vercel、Linear)在工作流控制权上有什么不同?

主流平台如Vercel、Linear等将工作流封装成黑盒,预设了流程,用户只能在他们的轨道上运行。而Penguin将控制权完全交给用户,通过代码定义工作流,不依赖任何平台预设,用户自己画图纸。

🏷️

标签

➡️

继续阅读