Skip to main content
1回のテキスト生成だけでは足りないアプリケーションには、@phaseo/agent-sdkを使用します:
  • 複数ステップのツールループ
  • ローカルランタイムツール
  • SDKが返す状態から再開できる実行
  • 人による承認を明示的に待つ一時停止
  • 型付きの最終出力
  • 既存のTypeScript SDKを通じたゲートウェイ経由のモデルターン
このパッケージはインストールして使うSDKであり、ホスト型エージェントプラットフォームではありません。アプリケーション、デプロイモデル、返された実行状態を保存する方法は利用者が用意します。

状態モデル

Agent SDKはPhaseoがホストするサービスに実行状態を保存しません。
  • run()は後で続行するために必要な状態全体を返します。 リクエスト間やプロセス再起動後も実行を再開したい場合は、返された状態をアプリケーション独自のストアに保存してください。
  • continueRun()は前回の実行状態をそのまま受け取ります。
Phaseoはアプリケーションの外部に何も保存しません。

インストール

SDKの内容

  • createAgent()
  • defineTool()
  • createGatewayAgentClient()
  • 以前に返された実行状態から続行するcontinueRun()
  • 段階的に取得でき、再生も可能な結果を返すstream()とcontinueStream()
  • stepCountIs()、maxCost()、hasToolCall()などの停止条件ヘルパー

最初のエージェント

基本的な考え方

ランタイムループでは、次の4つを行います:
  1. 現在のメッセージ状態をモデルクライアントへ送信します
  2. 返されたローカルツール呼び出しを実行します
  3. ツールの結果を次のターンに追加します
  4. 各ステップの完了時に更新された実行状態を返します
これにより、ホスト型のオーケストレーション製品に依存せず、アプリケーション内で再開可能なループを実現できます。

基本プリミティブ

createAgent()

createAgent()で次を定義します:
  • 安定したid
  • 指示
  • 1つのモデルまたはプリセット
  • 少数のツール一覧
  • 任意の出力パーサー
  • 任意の人によるレビュー規則
  • 任意の再試行とツール実行の制御
最初のエージェントは範囲を絞りましょう。通常は1つのワークフローと1〜2個のツールで十分です。

defineTool()

ローカルランタイムツールでは次を定義します:
  • id
  • description
  • 任意のJSONparameters
  • 任意の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経由で実行する場合は、ゲートウェイアダプターを使用します。 次のようなゲートウェイ固有の制御を渡せます:
  • responseFormat
  • plugins
  • gatewayTools
  • toolChoice
  • webSearchOptions
  • providerOptions
  • promptCacheKey
  • includeMeta
これにより、実行ごとに生のリクエストペイロードを作り直す代わりに、ルーティング、検索、構造化出力、プラグインのデフォルトをモデルクライアントの近くに保てます。

アプリケーション側での永続化

アプリケーションで実行再開が必要な場合は、返されたAgentRunResultを直接保存するか、非同期のload(runId)およびsave(result)メソッドを持つstateアクセサーを用意します。これにより、シリアル化したレコードを各層に渡さず、続行中の実行でrunIdを使用できます。 SDKには設計上、永続化アダプターやホスト型の状態バックエンドは含まれていません。 そのため、次のことができます:
  • 1回限りの実行をプロセス内だけで完結させる
  • 一時停止中または未完了の実行をアプリケーション独自のレコードにシリアル化する
  • 保存した実行状態を読み込み直し、後でcontinueRun()に渡す

人によるレビューと続行

実行をチェックポイントで一時停止し、承認を待つ場合はhumanReviewを使用します:
人による明示的な入力で続行します:

型付き出力

アプリケーションで型付きの最終値が必要な場合はparseOutputを使用します:
モデルの挙動をより厳密にするには、ゲートウェイアダプターの構造化出力と組み合わせます:

ランタイム制御

モデルの再試行

一時的なモデルエラーが発生したとき、実行をfailedとして保存する前に再試行するにはmodelRetryを使います:
maxRetriesは、最初のモデルリクエスト後に行う追加試行の数です。 永続化されたステップレコードでは、最終的な再試行数をmodelAttemptsに保存します。

ローカルツールの並行実行

1回のモデルターンで複数の独立したツールを安全に呼び出せる場合は、toolExecution.toolConcurrencyを設定します:
ランタイムは引き続きツール結果メッセージの順序を保持します。

プリセットによるルーティング

ルーティング、プロンプト、パラメーターのデフォルトをアプリのコードに埋め込まず、ダッシュボードで管理する場合はpresetを使います:

イベントフック

ログ、テレメトリー、内部ワークフロー向けのライフサイクルフックが必要な場合はonEventを使います。 現在のイベント:
  • run.started
  • run.resumed
  • step.started
  • step.completed
  • step.failed
  • step.cancelled
  • model.requested
  • model.completed
  • model.failed
  • tool.started
  • tool.completed
  • tool.failed
  • checkpoint.saved
  • run.waiting_for_human
  • run.cancelled
  • run.completed
  • run.failed
ステップが成功すると、チェックポイント付きのステップが永続化された後にランタイムがstep.completedを発行します。

エラー処理

ゲートウェイのエラーはAgentGatewayErrorとして再スローされます:
ゲートウェイ由来のエラーの場合、失敗した実行とステップにはerrorDetailsも保存されます。

同梱の例

現在、パッケージには次の例が含まれています:
  • examples/research-brief-agent.ts
  • examples/support-triage-agent.ts
  • examples/coding-review-agent.ts
  • examples/parallel-tool-agent.ts

現在のスコープ

このSDKは、アプリケーション構築の基本要素に意図的に焦点を当てています:
  • ローカルまたはアプリケーション管理のチェックポイント永続化
  • ゲートウェイ経由のモデルターン
  • ローカルツール
  • 再開可能なエージェントループ
  • ステップごとに正規化されたトークン使用量、コスト、警告、終了理由、ツール結果
ホスト型オーケストレーションプラットフォームを目指したり、特定のリモート永続化バックエンドを同梱したりはしません。

関連ガイド

最終更新日 2026年10月2日