> 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).

# 工作流

<figure><img src="/files/d7067775145070d6b03fc3fa604dd92e8df05168" 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 页面提示栏会先创建流程并在其上打开副驾驶），构建智能体可以使用其 `save_workflow` 工具——它会把构建好的图写入那个 **已存在的** 流程，在沙盒干运行之后。它仍然不能自行创建流程、启用或禁用流程，或更改审批门槛，而一次真正的测试运行始终需要你先明确确认。

## 工作流由什么组成

一个工作流图由以下内容组成 **15 种节点类型**：且恰好一个 `触发器`，再加上任意组合的 `智能体` （一次完整的带工具智能体轮次）， `tool_call`, `http_request`, `代码` （JavaScript 或 Python）， `条件`, `切换`, `转换`, `split_out`, `合并`, `输出解析器`, `子工作流`, `记忆`, `去重`，以及 `循环`.

一个图通常是一条直线或一个扇出结构，但它也可能包含一个 **有界循环**：一个 `循环` 节点在其 `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`**：Workflows 中心，展示每个流程及其启用开关、上次运行状态（`已完成` / `待审批` / `失败`），以及一个运行按钮。
* **`/flows/:id`**：一个只读的 **画布视图** ，以节点和边的形式渲染，方便你准确看到自己批准了什么。
* **运行检查器**：一个抽屉面板，逐步显示每次运行（节点标签、输出内容和最终状态），每 2 秒实时轮询一次，直到运行结束。
* 完整 **运行历史** 按流程持久保存：状态、开始/结束时间、待审批项、错误，以及重建的逐步输出。

## RPC 接口面（面向开发者）

这个 `flows` 域（`src/openhuman/flows/`）下暴露了 10 个控制器： `openhuman.flows_*`: `创建`, `获取`, `列表`, `更新`, `删除`, `设置启用`, `运行`, `恢复`, `列出运行`, `获取运行`。参见 [智能体执行框架](/openhuman/zh/kai-fa-zhong/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)：一次性和重复性的智能体任务（工作流是结构化的多步骤升级版）。
* [潜意识循环](broken://pages/8f1b13c03e1006c2498f2a57983552beefceb5ac)：与事件驱动工作流相辅相成的后台感知层。
