> For the complete documentation index, see [llms.txt](https://tinyhumans.gitbook.io/openhuman/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tinyhumans.gitbook.io/openhuman/zh/gong-neng/workflows.md).

# 工作流

基于开源 tinyflows 引擎构建的持久化可视化自动化。智能体会在聊天中提出工作流；你在画布上审阅它、保存它，然后它会按计划或在实时应用事件下运行，在暂停 f

<figure><img src="https://2734108774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fe42lJPkxRsAFpQOln2KW%2Fuploads%2Fgit-blob-e83e42ae169daf6738562541cce02f0bc6e30456%2Fworkflows.png?alt=media" alt=""><figcaption><p>视觉画布上的一个工作流。代理提出图表；你审核每一步并保存。</p></figcaption></figure>

聊天很适合一次性的提问。 **工作流** 用于你希望完成的事情 *每次*：分流每封新的支持邮件，给每个提到你团队的 Linear 工单归档，并在每周一 9 点发布摘要。深受以下启发 [n8n](https://n8n.io) 和 [Zapier](https://zapier.com)，工作流是一张已保存、带类型的步骤图，你可以在画布上看到，它会在没有你参与的情况下运行。其底层由开源的 [tinyflows](https://github.com/tinyhumansai/tinyflows) 引擎以及与 OpenHuman 其余部分相同的信任与审批机制提供支持。与 n8n 和 Zapier 的区别在于：不是你构建图表，而是代理构建。

## 代理构建它，你来批准

你不需要拖拽方块就能开始。用聊天描述自动化，例如 *“每当有新邮件来自客户时，总结一下并发到我的 Slack”*，然后代理使用其 `propose_workflow` 工具来草拟一整张工作流图。该提议会以 **工作流提议卡** 的形式出现在聊天中，并附有每一步的通俗英文摘要。

两个设计保证让这很安全：

* 该 `propose_workflow` 工具 **只会验证并描述** 一个候选图表。它绝不可能自行创建或启用任何流程。
* 该 **唯一** 从提议到 *新的* 已保存工作流的路径是你在卡片上点击 **保存并启用** 。这会直接从应用中调用 `flows_create` RPC，而不是由代理调用。

有一个刻意的例外：当 *你* 开始构建时（Workflows 页面提示栏会先创建流程并在其上打开 copilot），构建代理可以用它的 `save_workflow` 工具完成工作——它会在沙盒干跑之后把构建好的图写入那个 **已经存在的** 流程上。它仍然不能自己创建流程、启用或禁用流程，或更改审批关卡，而且真正的测试运行始终需要你先明确确认。

## 工作流由什么组成

工作流图由 **15 种节点类型**组成：恰好一个 `触发器`，加上任意组合的 `代理` （一次完整的代理执行，带工具） `tool_call`, `http_request`, `代码` （JavaScript 或 Python） `条件`, `分支`, `转换`, `拆分输出`, `合并`, `输出解析器`, `子工作流`, `记忆`, `去重`，以及 `循环`.

图通常是一条直线或分叉扇出，但也可能包含一个 **有界循环**：一个 `循环` 节点在其 `body` 端口上发出输出，直到其 `max_iterations` 上限（或一个可选的 `条件`）指示停止，然后在 `done`上输出。你通过把 body 中最后一个节点连回 `循环` 节点来闭合循环。上限始终是有限的，而 `on_exceeded` 决定达到上限意味着： `错误` 使运行失败并指出循环名称， `继续` 停止循环，并将上一轮的项通过 `done`.

触发器有几种类型。目前上线的是：

* **计划**：由 cron 支持；流程按其计划触发，并在每次应用启动时重新注册自己。
* **应用事件**：来自已连接集成的实时 [触发器](/openhuman/zh/gong-neng/integrations/triggers.md) 事件（新的 Gmail 线程、Notion 变更、Linear 工单），由工具包 + 触发器 slug 匹配。
* **手动**：Workflows 页面上的运行按钮或 `flows_run` RPC。
* **恢复**：继续一个在审批关卡暂停的运行。

每个流程都有一个分发锁，这意味着计划触发的突发不会并发运行同一个流程两次。

## 信任、审批与人在回路中

每次流程运行都在一个专用信任来源下执行（`TrustedAutomation → Workflow`）。原因是：流程的 *操作* （它调用哪些工具、访问哪些 URL）是你在保存时批准的静态图配置。运行时触发负载（一个 webhook 正文、一个传入事件）保持 **不受信任**：它可以把参数输入这些预先声明的操作，但绝不可能引入新的操作。

此外，每个流程都有一个 **“对外部输出操作要求审批** ”开关。开启后，运行中的每个外部影响工具或 HTTP 调用都会停在 [审批关卡](/openhuman/zh/gong-neng/approval-gate.md) 并等待真正的决定。运行的信任根不会自动放行任何内容。

当运行暂停时，你会在通知中收到一张 **流程审批卡** ，上面标明流程名称和待处理步骤。批准后，运行会通过 `flows_resume`从它停止的地方继续。运行是持久化并有检查点的，所以“今天晚些时候”也没问题。

## 看它运行

* **`/flows`**：工作流中心，显示每个工作流、其启用开关、最近一次运行状态（`已完成` / `待审批` / `失败`），以及一个运行按钮。
* **`/flows/:id`**：一个只读的 **画布视图** ，将工作流图渲染为节点和边，因此你可以准确看到你批准了什么。
* **运行检查器**：一个抽屉面板，逐步显示每次运行的每一步（节点标签、发出的输出和最终状态），在运行完成前每 2 秒实时轮询一次。
* 完整 **运行历史** 按流程持久保存：状态、开始/结束时间、待审批项、错误，以及重建出的逐步输出。

## 面向开发者的 RPC 接口

该 `flows` 域（`crates/openhuman-core/src/flows/`）在 `openhuman.flows_*`: `下暴露十个控制器`, `获取`, `列表`, `更新`, `删除`, `设置启用`, `运行`, `恢复`, `列出运行`, `获取运行`。参见 [Agent Harness](/openhuman/zh/kai-fa/architecture/agent-harness.md) 页面，了解流程运行如何共享 tinyagents 执行栈。

## 另见

* [触发器](/openhuman/zh/gong-neng/integrations/triggers.md)：会触发 `app_event` 工作流。
* [审批关卡](/openhuman/zh/gong-neng/approval-gate.md)：待审批项如何展示以及何时过期。
* [Cron 与调度](/openhuman/zh/gong-neng/native-tools/cron.md)：一次性和周期性的代理任务（工作流是结构化的多步骤升级版）。
