コンテンツにスキップ

オーケストレーション

アーキテクチャとコード

オーケストレーション

マルチエージェント・オーケストレーション層 — 企業、エージェント、ウェイクアップ、実行、ライブイベント — そして作業を流す運用シーケンス。

マルチエージェント・オーケストレーション層と作業を流すシーケンス。上部の全画面ボタンをご利用いただくか、オーケストレーション図を新しいタブで開く ↗

企業オーケストレーションシステム

企業システムはマルチエージェント・オーケストレーション層です。企業、エージェント、プロジェクト、ゴール、課題、ルーチン、アクティビティ、実行、承認、企業スコープのファイルを所有します。

主要ドメインオブジェクト

オブジェクト目的
Companyエージェント、課題、プロジェクト、シークレット、チャネル、ファイルのテナント境界
Agent役割、アダプタ設定、ランタイム設定、インストラクション、スキル、環境変数を持つ企業のチームメイト
Project課題とファイル向けのワークスペースとプロジェクトスコープの設定
Goal課題やルーチンをまとめる高位の目標
Issueエージェントに割り当てられる、またはライフサイクル状態を移行する企業作業の単位
Routineエージェントが所有するスケジュール型またはトリガー型の定期作業
Wakeup requestエージェントを実行する理由を伝える永続キュー項目
Heartbeat run1回のエージェント呼び出しの実行記録
Activity logユーザー、エージェント、システムアクションの監査/イベント履歴
Company secret環境変数バインディングで使用される企業スコープのシークレット参照

ウェイクソース

エージェント実行は次のソースから開始される可能性があります。

  • エージェントに割り当てられた課題
  • 課題コメントまたはメンション
  • 承認段階または審査決定
  • ユーザーがハートビート実行をクリック
  • バックグラウンドのハートビートタイマー発火
  • ルーチンタイマー発火
  • チャネル受信メッセージがエージェントにルーティング
  • 企業エージェントへのダイレクトチャットメッセージ送信

これらはすべて実行前にウェイクコンテキストに正規化されます。エージェントは、ウェイクがUI、タイマー、課題、チャネルのどこから来たかを、受け取るウェイクフィールドを通じて以外は知る必要はありません。

ウェイクアップキューフロー

apps/api/src/orchestration/engine/wakeup.ts が永続キューのヘルパーを所有します。

作業ソース
enqueueWakeup(agentId, source, reason, payload, contextSnapshot)
agentWakeupRequest ステータスがqueued
スケジューラまたは即時ランナーがウェイクアップをクレーム
heartbeat_runs 行が作成または更新
agent-invoker がランタイムプロセスを起動
ウェイクアップが完了または失敗

ウェイクアップレコードが捕捉する情報:

  • agentId
  • source
  • triggerDetail
  • reason
  • payload
  • contextSnapshot
  • キューステータスとタイムスタンプ

コンテキストスナップショットは、プロダクトイベントからランタイム実行への安定した受け渡しとなるため重要です。例えば、課題割り当てウェイクアップには、後で課題が変わったとしても課題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 イベント
ランタイムが実行トークンAPI経由でタスク/インボックスを読み取る
ランタイムがコメント、課題更新、ファイル書き込み、承認依頼を行う
課題/アクティビティ/実行のライブイベントが利用者にストリーム
heartbeat.run.completed または heartbeat.run.failed

企業エージェントとのダイレクトチャット

ユーザーが企業エージェントを選択
ダイレクトチャットセッションが解決または作成
エージェント設定から選択ランタイム/モデルを取得
メッセージがランタイムアダプタ経由で送信
応答がチャットパネルにストリーム
そのエージェントのセッションIDが記憶される

ダイレクトチャットは企業課題を作成する必要はありません。それでも企業コンテキスト、エージェントインストラクション、スキル、ファイル、環境変数、チャネルツールを使用できます。

ハートビートタイマー

ハートビートスケジューラのチック
runtime_config.heartbeat.enabled を持つエージェントを読み取り
間隔と実行中ポリシーをチェック
enqueueWakeup(source=“timer”, reason=“heartbeat_timer”)
課題IDなしで実行を開始
エージェントがインボックスライトまたはハートビートインストラクションを確認
作業がなければエージェントが終了

エージェント設定でハートビートをオンにすると、スケジューラ入力が更新されます。次のスケジューラチックは、エージェントプロセスを起動したままにすることなく、新しいランタイム設定を観測します。

ルーチンタイマー

ルーチンスケジューラのチック
nextFireAt で有効なルーチントリガーを探す
ルーチンウェイクコンテキストを作成
ルーチンポリシーに従いエージェント実行を開始またはキュー
UTCで nextFireAt を更新
次回実行をユーザー/ブラウザのタイムゾーンで表示

UTCが保存形式です。ルーチンのタイムゾーンがスケジュールの発火タイミングを制御します。ユーザーやエージェントがタイムゾーンを指定しない場合、ブラウザのタイムゾーンをデフォルトとして使えます。

チャネル受信メッセージ

外部チャネルメッセージ
トランスポートプラグインがメッセージを検証・解析
チャネルセッションが企業/エージェント/セッションにマップ
ディスパッチがランタイムコンテキストを構築
ランタイムが応答
ストリームシンクが送信応答を送信または編集
チャネルセッションと監査状態が更新

次に読む