waiting_for_human と続行に必要なすべての情報を持って、(エラーではなく)通常どおり戻ります。結果全体を保存し、アプリケーション内で判断を集めてから、保存した結果と判断をエージェントの続行メソッドに渡します。
Phaseo は Agent SDK の実行を保存しません。リクエストやプロセスの再起動後も残す必要がある再開可能な状態は、アプリケーション側で保存してください。
ツール呼び出しを承認または拒否する
承認が必要なツール、手動ツール、人が介在するツールは、実行される前に実行を一時停止します。保留中の各呼び出しには、モデルのcall(id を含む)と kind(approval、manual、hitl のいずれか)があります。同じツールへの2つの呼び出しを区別できるよう、すべての呼び出しにはツール名ではなく正確な呼び出し ID で応答してください。
承認された呼び出しはツールを実行します。拒否された呼び出しは、ツールの結果として {"error": "<reason>"} をモデルに送ります。デフォルトの理由は Tool call rejected です。
一時停止そのものにも
kind があります。Go と C# は、ツールによる一時停止すべてで tool_approval を設定します。PHP、Ruby、Java は、保留中の呼び出しのいずれかが承認を必要とする場合は tool_approval、それ以外は最初の呼び出しの種類を設定します。Rust は、承認の呼び出しには tool_approval、保留中のすべての呼び出しが外部の結果を必要とする場合は external_output、両方が混在する場合は tool_input を使います。
ツールごとではなくすべてのツール呼び出しで承認を必須にするには、エージェント定義に requireApproval を設定します(Python と Ruby では require_approval、Go と C# では RequireApproval)。TypeScript では関数 requireApproval(call, context) です。Rust は Tool::require_approval() によるツールごとの承認だけに対応しています。各種類のツールの定義方法はツールにあります。
手動ツールと人が介在するツールに結果を渡す
manual と hitl の呼び出しには、アプリケーションが生成した結果を呼び出し ID ごとに渡します。Rust では、Tool::external(...) で作成したツールがこれに当たります。
Missing output for tool call <id> で失敗します(Go では小文字の missing、Python では ValueError、Rust では AgentError)。人の入力メッセージは、ツール出力の代わりにはなりません。
人によるレビューのために一時停止する
エージェント定義に人によるレビューのコールバックを設定すると、実行が続く前に各モデルレスポンスを確認できます。一時停止するにはreason(必要に応じて payload も)を持つレビューリクエストを返し、続ける場合は何も返しません。一時停止の kind は human_review です。コールバックは、実行 ID、ステップ番号、メッセージ、モデルのレスポンス、パース済みの出力を受け取ります(Rust では、実行 ID とエージェント ID、ステップ番号、メッセージ、レスポンス、アプリケーションのコンテキスト)。
Run <id> is waiting for human input で失敗します(Go では run <id> is waiting for human input、Java では Run is waiting for human input)。Rust では空でない human_input が必要です。TypeScript は構造化された humanMessages も受け付けます。
リクエスト間で実行状態を保存する
実行結果はプレーンなデータです。データベース、オブジェクトストア、ジョブレコードに保存し、アプリケーションのcontext はシリアライズ可能に保ってください。実行を続行できるのは、同じ ID を持つエージェントだけです。保存と再開の完全な流れは、永続的なエージェントループのクックブックにあります。
SDK に実行の保存と読み込みを任せるには、load(runId) と save(result) を持つ状態アクセサーを渡します。SDK は各実行と続行の後に保存し、レコードをすべての層に渡す代わりに実行 ID で続行できるようになります。
AgentDefinition はシリアライズされた実行に含まれません。実際に使われたモデルとステップ上限は RunRecord に保存されるため、実行ごとの上書きは続行後も有効です。
何を保存する場合でも、保存した実行の暗号化と保持期間、承認と人の入力に対する認可、再開後に再実行される副作用の冪等性は、アプリケーションが責任を持ちます。