オーケストレーション
オーケストレーション
マルチエージェント・オーケストレーション層 — 企業、エージェント、ウェイクアップ、実行、ライブイベント — そして作業を流す運用シーケンス。
マルチエージェント・オーケストレーション層と作業を流すシーケンス。上部の全画面ボタンをご利用いただくか、オーケストレーション図を新しいタブで開く ↗。
企業オーケストレーションシステム
企業システムはマルチエージェント・オーケストレーション層です。企業、エージェント、プロジェクト、ゴール、課題、ルーチン、アクティビティ、実行、承認、企業スコープのファイルを所有します。
主要ドメインオブジェクト
| オブジェクト | 目的 |
|---|---|
| Company | エージェント、課題、プロジェクト、シークレット、チャネル、ファイルのテナント境界 |
| Agent | 役割、アダプタ設定、ランタイム設定、インストラクション、スキル、環境変数を持つ企業のチームメイト |
| Project | 課題とファイル向けのワークスペースとプロジェクトスコープの設定 |
| Goal | 課題やルーチンをまとめる高位の目標 |
| Issue | エージェントに割り当てられる、またはライフサイクル状態を移行する企業作業の単位 |
| Routine | エージェントが所有するスケジュール型またはトリガー型の定期作業 |
| Wakeup request | エージェントを実行する理由を伝える永続キュー項目 |
| Heartbeat run | 1回のエージェント呼び出しの実行記録 |
| Activity log | ユーザー、エージェント、システムアクションの監査/イベント履歴 |
| Company secret | 環境変数バインディングで使用される企業スコープのシークレット参照 |
ウェイクソース
エージェント実行は次のソースから開始される可能性があります。
- エージェントに割り当てられた課題
- 課題コメントまたはメンション
- 承認段階または審査決定
- ユーザーがハートビート実行をクリック
- バックグラウンドのハートビートタイマー発火
- ルーチンタイマー発火
- チャネル受信メッセージがエージェントにルーティング
- 企業エージェントへのダイレクトチャットメッセージ送信
これらはすべて実行前にウェイクコンテキストに正規化されます。エージェントは、ウェイクがUI、タイマー、課題、チャネルのどこから来たかを、受け取るウェイクフィールドを通じて以外は知る必要はありません。
ウェイクアップキューフロー
apps/api/src/orchestration/engine/wakeup.ts が永続キューのヘルパーを所有します。
enqueueWakeup(agentId, source, reason, payload, contextSnapshot)agentWakeupRequest ステータスがqueuedheartbeat_runs 行が作成または更新agent-invoker がランタイムプロセスを起動ウェイクアップレコードが捕捉する情報:
agentIdsourcetriggerDetailreasonpayloadcontextSnapshot- キューステータスとタイムスタンプ
コンテキストスナップショットは、プロダクトイベントからランタイム実行への安定した受け渡しとなるため重要です。例えば、課題割り当てウェイクアップには、後で課題が変わったとしても課題IDとソースコンテキストが含まれます。
実行ライフサイクル
実行ステータスはエージェントステータスと同じではありません。
queued -> running -> succeeded | failed | cancelled実行ステータスは1つの実行試行を表現します。エージェントステータスはエージェントの可視状態を表現します。queued状態の実行が、既にrunning状態のエージェントを「停止した」ように上書きすべきではありません。UIとイベント利用者は、実行ライフサイクルイベントとエージェントライフサイクルイベントを別ストリームとして扱うべきです。
エージェントステータス
エージェントステータスは、エージェント状態が実際に変化したときにのみ更新すべきです。例:
- idle
- active
- running
- paused
- error
キュー中の作業は実行のプロパティです。エージェント近くに表示してもよいですが、バックエンドが意図的にエージェントステータスイベントを設定しない限り、エージェントの主要ライフサイクルとして扱うべきではありません。
ライブイベントバス
apps/api/src/orchestration/engine/event-bus.ts が企業ライブイベントを発行します。共有型は packages/shared/src/orchestration/types/live.ts に、イベント名は packages/shared/src/orchestration/constants.ts にあります。
主要なイベントファミリー:
| イベントファミリー | 目的 |
|---|---|
heartbeat.run.queued | 実行が存在し、待機中または起動中 |
heartbeat.run.running | 実行が開始された |
heartbeat.run.log | ランタイムSDKストリームイベント、ツールイベント、テキスト、思考、システムイベント |
heartbeat.run.completed | 実行が成功裏に完了 |
heartbeat.run.failed | 実行が失敗 |
heartbeat.run.cancelled | 実行がキャンセルされた |
agent.status | エージェント状態が変化 |
issue.created | エージェントまたはユーザーが課題を作成 |
issue.updated | ステータスや担当者を含む課題フィールドが変更 |
issue.comment.created | コメントが書き込まれた |
issue.deleted | 課題がソフトまたはハード削除された |
activity.logged | 監査ログエントリが作成された |
ライブイベントペイロードには、利用者が企業全体を再取得せずに更新できる十分な非正規化データを含めるべきです。
- 実行ID、実行ステータス、セッションID、アダプタ種別、タイムスタンプ
- エージェントID、エージェント名、役割、ステータス、アダプタ/ランタイムメタデータ
- 課題ID、識別子、タイトル、ステータス、担当者、プロジェクト、ゴール
- アクティビティのアクター、アクション、エンティティ、詳細
復旧時の再取得は依然として許容されますが、通常パスではイベントペイロードを直接消費すべきです。
アクティビティログ
アクティビティログはUIフィード項目だけでなく監査記録です。以下を保存します。
- 企業ID
- アクター種別
- アクターID
- エージェントID
- 実行ID
- アクション
- エンティティ種別
- エンティティID
- 詳細
ライブイベントがメモリから消えた後でも、課題、実行、ルーチン、エージェントアクションの周辺で何が起きたかを再構築するために使用されます。
運用シーケンス
課題の割り当て
activity.logged が発火queueIssueAssignmentWakeup がウェイクアップをキュー登録heartbeat.run.queued イベントagent-invoker がランタイムを起動heartbeat.run.running イベントheartbeat.run.completed または heartbeat.run.failed企業エージェントとのダイレクトチャット
ダイレクトチャットは企業課題を作成する必要はありません。それでも企業コンテキスト、エージェントインストラクション、スキル、ファイル、環境変数、チャネルツールを使用できます。
ハートビートタイマー
runtime_config.heartbeat.enabled を持つエージェントを読み取りenqueueWakeup(source=“timer”, reason=“heartbeat_timer”)エージェント設定でハートビートをオンにすると、スケジューラ入力が更新されます。次のスケジューラチックは、エージェントプロセスを起動したままにすることなく、新しいランタイム設定を観測します。
ルーチンタイマー
nextFireAt で有効なルーチントリガーを探すnextFireAt を更新UTCが保存形式です。ルーチンのタイムゾーンがスケジュールの発火タイミングを制御します。ユーザーやエージェントがタイムゾーンを指定しない場合、ブラウザのタイムゾーンをデフォルトとして使えます。