@phaseo/agent-sdkを使用します:
- 複数ステップのツールループ
- ローカルランタイムツール
- SDKが返す状態から再開できる実行
- 人による承認を明示的に待つ一時停止
- 型付きの最終出力
- 既存のTypeScript SDKを通じたゲートウェイ経由のモデルターン
状態モデル
Agent SDKはPhaseoがホストするサービスに実行状態を保存しません。run()は後で続行するために必要な状態全体を返します。 リクエスト間やプロセス再起動後も実行を再開したい場合は、返された状態をアプリケーション独自のストアに保存してください。continueRun()は前回の実行状態をそのまま受け取ります。
インストール
SDKの内容
createAgent()defineTool()createGatewayAgentClient()- 以前に返された実行状態から続行する
continueRun() - 段階的に取得でき、再生も可能な結果を返す
stream()とcontinueStream() stepCountIs()、maxCost()、hasToolCall()などの停止条件ヘルパー
最初のエージェント
基本的な考え方
ランタイムループでは、次の4つを行います:- 現在のメッセージ状態をモデルクライアントへ送信します
- 返されたローカルツール呼び出しを実行します
- ツールの結果を次のターンに追加します
- 各ステップの完了時に更新された実行状態を返します
基本プリミティブ
createAgent()
createAgent()で次を定義します:
- 安定した
id - 指示
- 1つのモデルまたはプリセット
- 少数のツール一覧
- 任意の出力パーサー
- 任意の人によるレビュー規則
- 任意の再試行とツール実行の制御
defineTool()
ローカルランタイムツールでは次を定義します:
iddescription- 任意のJSON
parameters - 任意の
timeoutMs inputSchemaとoutputSchemaのランタイムバリデーターexecute()、execute: false、または人の介入を伴うコールバックrequireApproval、onError、nextTurnParams、進捗イベント
context.signalを中断し、実行をfailedとしてマークして、タイムアウトエラーを再スローします。
スキーマには関数、またはparse()かsafeParse()を公開する任意のオブジェクトを指定できます。不正なモデル引数やツール結果は、ツール境界を越える前にエラーになります。
承認、HITL、手動ツール
副作用を伴うツールを呼び出しごとに制御します:run.pause.pendingToolCallsで実行が一時停止します。並行する呼び出しを混同しないよう、正確な呼び出しIDを指定して再開してください:
execute: falseを設定し、結果をtoolOutputsで渡します。対話型ツールではonToolCalledからnullを返します。続行後、onResponseReceivedでユーザーの応答を検証または変換できます。
進捗を出力するツール
非同期ジェネレーターは、途中結果を公開してから最終結果を1つ返せます:tool.preliminary_resultイベントとして、またステップのpreliminaryResultsに表示されます。
ストリーミング結果
stream()はストリーミング対応モデルクライアントで同じ状態機械を開始します。結果は再生可能なため、UI、テレメトリー、永続化コードから同時に読み取れます:
getReasoningStream()、getItemsStream()、getToolStream()、getFullStream()を使い分けます。cancel()は実行を中断します。
型付き実行アイテムの表示
getItemsStream()はAgentItem<TOutput>を返します。これはswitchで安全に分岐できる判別付きユニオンです:
run()またはstream()の後、同じ順序付きアイテム契約をcompleted.itemsから利用できます。プロバイダーの出力はメッセージ、推論、ツール呼び出し、ツール結果、エラー、最終出力のアイテムに正規化されます。プロバイダー固有のフィールドは、正規化済みアイテムのrawProviderItemから引き続き取得できます。
停止条件と動的なターン
停止条件は配列で組み合わせます。最初に一致した条件が理由を記録し、stopped状態の実行を返します:
context.setContext()でアプリケーションコンテキストを設定し、直後のターンをnextTurnParamsで上書きできます。
createGatewayAgentClient()
モデルターンをPhaseo Gateway経由で実行する場合は、ゲートウェイアダプターを使用します。
次のようなゲートウェイ固有の制御を渡せます:
responseFormatpluginsgatewayToolstoolChoicewebSearchOptionsproviderOptionspromptCacheKeyincludeMeta
アプリケーション側での永続化
アプリケーションで実行再開が必要な場合は、返されたAgentRunResultを直接保存するか、非同期のload(runId)およびsave(result)メソッドを持つstateアクセサーを用意します。これにより、シリアル化したレコードを各層に渡さず、続行中の実行でrunIdを使用できます。
SDKには設計上、永続化アダプターやホスト型の状態バックエンドは含まれていません。
そのため、次のことができます:
- 1回限りの実行をプロセス内だけで完結させる
- 一時停止中または未完了の実行をアプリケーション独自のレコードにシリアル化する
- 保存した実行状態を読み込み直し、後で
continueRun()に渡す
人によるレビューと続行
実行をチェックポイントで一時停止し、承認を待つ場合はhumanReviewを使用します:
型付き出力
アプリケーションで型付きの最終値が必要な場合はparseOutputを使用します:
ランタイム制御
モデルの再試行
一時的なモデルエラーが発生したとき、実行をfailedとして保存する前に再試行するにはmodelRetryを使います:
maxRetriesは、最初のモデルリクエスト後に行う追加試行の数です。
永続化されたステップレコードでは、最終的な再試行数をmodelAttemptsに保存します。
ローカルツールの並行実行
1回のモデルターンで複数の独立したツールを安全に呼び出せる場合は、toolExecution.toolConcurrencyを設定します:
プリセットによるルーティング
ルーティング、プロンプト、パラメーターのデフォルトをアプリのコードに埋め込まず、ダッシュボードで管理する場合はpresetを使います:
イベントフック
ログ、テレメトリー、内部ワークフロー向けのライフサイクルフックが必要な場合はonEventを使います。
現在のイベント:
run.startedrun.resumedstep.startedstep.completedstep.failedstep.cancelledmodel.requestedmodel.completedmodel.failedtool.startedtool.completedtool.failedcheckpoint.savedrun.waiting_for_humanrun.cancelledrun.completedrun.failed
step.completedを発行します。
エラー処理
ゲートウェイのエラーはAgentGatewayErrorとして再スローされます:
errorDetailsも保存されます。
同梱の例
現在、パッケージには次の例が含まれています:examples/research-brief-agent.tsexamples/support-triage-agent.tsexamples/coding-review-agent.tsexamples/parallel-tool-agent.ts
現在のスコープ
このSDKは、アプリケーション構築の基本要素に意図的に焦点を当てています:- ローカルまたはアプリケーション管理のチェックポイント永続化
- ゲートウェイ経由のモデルターン
- ローカルツール
- 再開可能なエージェントループ
- ステップごとに正規化されたトークン使用量、コスト、警告、終了理由、ツール結果