MyBotBoxMyBotBox
Architecture

実行とデータフロー

ワークフローの実行がトリガーからハンドラー、ログ、コスト計測へとどのように進むか。

ワークフローは、ボタン、Webhook、スケジュール、インバウンドポーリングのいずれによってトリガーされても、同じライフサイクルをたどります。

ライフサイクル

flowchart LR
    classDef step fill:#00D4AA,stroke:#0F766E,color:#06302B
    classDef data fill:#3B82F6,stroke:#1E40AF,color:#fff
    classDef gate fill:#FF6B35,stroke:#C2410C,color:#fff

    S1["Build<br/>canvas"]:::step --> S2{"Validate<br/>reference checks"}:::gate
    S2 --> S3["Save<br/>blocks + edges"]:::data
    S3 --> S4["Deploy<br/>immutable version"]:::step
    S4 --> S5["Bind trigger<br/>webhook · schedule · poll"]:::step
    S5 --> S6["Execute<br/>resolve inputs → handlers"]:::step
    S6 --> S7["Logs + cost<br/>per-block metering"]:::data

実行中に起こること

sequenceDiagram
    participant T as Trigger
    participant A as API
    participant S as Serializer
    participant X as Executor
    participant H as Handler
    participant L as LLM / Integration
    participant D as Database

    T->>A: Fire (webhook / schedule / manual)
    A->>S: serialize(workflow)
    S->>S: Build graph + topological sort
    S-->>A: Execution plan
    A->>X: execute(plan)
    loop For each block
        X->>H: handle(block, inputs)
        alt AI / Integration block
            H->>L: Provider call
            L-->>H: Result
        else Data block
            H->>D: Query / insert
            D-->>H: Rows
        end
        H-->>X: Block output (stored in context)
    end
    X->>D: Write execution log + cost
    A-->>T: Result (streamed when applicable)

主要な特性

  • トポロジカル実行 — ブロックは依存関係の順序で実行されます。parallel および loop ブロックは、トレース ID を共有する独立したサブコンテキストを生成します。
  • 型付きディスパッチ — 各ブロックは単一のインターフェースの背後にある 30 種類のハンドラーのいずれかに解決されるため、コアを変更することなく新しいブロックタイプを追加できます。
  • ストリーミング — AI ブロックは Server-Sent Events を通じてトークンをストリーミングで返します。エディターは実行の進行中にリアルタイムの出力を表示します。
  • コスト計測 — すべてのブロックは入出力トークンとコストを実行ログに記録し、使用状況ページで確認できます。

同期と非同期

ユーザーが開始した実行はリクエスト内で同期的に実行されます。トリガーされたワークフローや長時間実行されるワークフローは Cloud Tasks にディスパッチされ、バックグラウンド関数で実行されるため、リクエストタイムアウトの制約を受けません。

同期実行はプラットフォームのリクエストタイムアウトに縛られます。実行時間が長くなる可能性のあるワークフローには、非同期でディスパッチされる Webhook またはスケジュールトリガーを使用することをお勧めします。