登録して招待リンクを共有すると、動画再生報酬と紹介報酬を獲得できます。

検索結果 OpenAIAgentSDK
OpenAIAgentSDK コミュニティ
1つのキーワードが1つのコミュニティです。
コミュニティ作成
アカウント
見つかりません
OpenAIAgentSDK を含む検索結果
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 複数の LLM プロバイダを 1 つのエージェントシステムで混在させたいと思ったことはありませんか? `MultiProvider` を使えば、モデル名のプレフィックスで自動的にプロバイダをルーティングできます。 📌 タイトル:MultiProvider による接頭辞ルーティング 🔗 URL: 🧩 概要 `MultiProvider` は、モデル名のプレフィックス(例:`openai/gpt-4.1`)に基づいてリクエストを適切なプロバイダに自動ルーティングします。`openai_prefix_mode="model_id"` を設定すると `openai/...` をそのままモデル ID として扱い、`unknown_prefix_mode="model_id"` で未知のプレフィックスもモデル ID としてルーティングします。`openai_use_responses_websocket=True` で WebSocket トランスポートも有効化可能です。 🛠 使い方 ```python from agents import Agent, MultiProvider, RunConfig, Runner provider = MultiProvider( openai_base_url="", openai_api_key="...", openai_use_responses_websocket=True, openai_prefix_mode="model_id", unknown_prefix_mode="model_id", ) agent = Agent( name="Assistant", instructions="Be concise.", model="openai/gpt-4.1", ) result = await agent, "Hello", run_config=RunConfig(model_provider=provider), ) ``` 🏗 本番システムへの組み込み方 ・コストやレイテンシに応じて、エージェントごとに異なるプロバイダのモデルを割り当てる ・OpenRouter などの統合ゲートウェイと組み合わせ、`openai_prefix_mode="model_id"` でプレフィックス付きモデル名をそのまま渡す ・`RunConfig(model_provider=provider)` で実行時にプロバイダを切り替え、A/B テストを実施する ・WebSocket を有効にして、対応プロバイダでのストリーミング性能を向上させる 💡 ユースケース 🔀 タスクの難易度に応じた GPT-4.1 / GPT-5.5 の使い分け 🌐 OpenRouter 経由での複数プロバイダへのアクセス統合 💰 高コストモデルと低コストモデルのハイブリッド運用 🧪 異なるモデル間での品質比較テスト ⚠️ 注意点 デフォルトでは `openai/...` は OpenAI プロバイダのエイリアスとして扱われ、未知のプレフィックスは `UserError` を発生させます。OpenRouter など外部ゲートウェイを使う場合は、必ず `openai_prefix_mode` と `unknown_prefix_mode` を `"model_id"` に設定してください。プロバイダごとに対応する機能(ツール呼び出し、構造化出力など)が異なる点にも注意が必要です。 ✨ MultiProvider で、複数のモデルを自在に組み合わせたエージェントシステムを構築しましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 SDK が直接サポートしていないプロバイダ固有のパラメータを、エージェントに渡したいと思ったことはありませんか? `extra_args` を使えば、`ModelSettings` に任意のプロバイダ固有フィールドを追加できます。 📌 タイトル:extra_args の受け渡し 🔗 URL: 🧩 概要 `ModelSettings` の `extra_args` パラメータに辞書を渡すことで、SDK のトップレベルプロパティとして公開されていないプロバイダ固有のリクエストフィールドをモデルに送信できます。例えば OpenAI Responses API の `service_tier` や `user` などを指定可能です。これにより、SDK のアップデートを待たずに新しい API パラメータを利用できます。 🛠 使い方 ```python from agents import Agent, ModelSettings agent = Agent( name="English agent", instructions="You only speak English", model="gpt-4.1", model_settings=ModelSettings( temperature=0.1, extra_args={ "service_tier": "flex", "user": "user_12345", }, ), ) ``` 🏗 本番システムへの組み込み方 ・`service_tier` でコスト最適化(例:`"flex"` で低優先度バッチ処理を安価に実行) ・`user` フィールドでユーザー単位のトラッキングと不正利用検知を有効化する ・新しい API パラメータが追加された際、SDK の更新を待たずに即座に利用可能 ・環境変数や設定ファイルから `extra_args` を動的に構築し、デプロイ環境ごとに調整する 💡 ユースケース 💰 `service_tier: "flex"` でバッチ処理のコスト削減 👤 `user` フィールドによるユーザー単位の利用量追跡 🔧 プロバイダの新機能をリリース直後から活用 🏢 マルチテナント環境でのテナント別パラメータ注入 ⚠️ 注意点 同じリクエストフィールドを `ModelSettings` の直接プロパティと `extra_args` の両方で設定しないでください。重複設定は予期しない動作を引き起こす可能性があります。また、`extra_args` に渡す値はプロバイダの API 仕様に準拠している必要があり、SDK 側でのバリデーションは行われません。 ✨ extra_args で、SDK の枠を超えたプロバイダ固有の最適化を手軽に適用しましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
# OpenAI Agent SDKの便利で実践的な使い方 🌍 エージェントの応答をリアルタイムに届けましょう! Streamingイベントを使い分けることで、タイプライターUIからツール実行通知まで、ユーザー体験を劇的に向上させることができます。 📌 タイトル:Streaming 🔗 URL: 🧩 概要 OpenAI Agent SDKのStreamingは3種類のイベントを提供します。RawResponsesStreamEventはLLMの生トークンをリアルタイムに流し、RunItemStreamEventはメッセージ作成やツール呼び出しなどの粗い粒度のイベントを通知し、AgentUpdatedStreamEventはエージェント切り替えを検知します。cancel()による即時中断やターン単位のキャンセルも可能です。 🛠 使い方 `Agent(name="assistant", instructions="丁寧に回答してください")` を定義し、` "AIの最新動向を教えて")` でストリーミング実行します。`async for event in でイベントをイテレートし、`isinstance(event, RawResponsesStreamEvent)` の場合は ` でトークンをリアルタイム表示します。`isinstance(event, RunItemStreamEvent)` の場合は `event.item.type` が `"tool_called"` でツール呼び出し通知、`"tool_output"` で完了通知、`"message_output_created"` でメッセージ生成開始を表示します。`isinstance(event, AgentUpdatedStreamEvent)` では ` でエージェント切り替えを通知します。最後に `await で最終結果を取得します。 キャンセルは ` "長い分析をして")` で開始した後、ストリームイベントのループ内で `result.cancel()` を呼ぶと即座に中断、`result.cancel(mode="after_turn")` を呼ぶと現在のターン完了後に停止します。キャンセル後は `async for _ in pass` でイテレータを消費してリソースをクリーンアップします。 🏗 実践的な使い方 チャットUIでは、`RawResponsesStreamEvent`の`output_text.delta`を使ったタイプライター表示が基本です。しかし、ツール呼び出し中はトークンが流れないため、`RunItemStreamEvent`の`tool_called`イベントで「検索中...」のようなプログレス表示を挟むのがベストプラクティスです。 マルチエージェント構成では、`AgentUpdatedStreamEvent`で「リサーチャーからライターに切り替わりました」のような表示ができます。これにより、ユーザーは処理の流れを理解しやすくなります。 キャンセルは2モードあります。`cancel()`は即座に中断しますが、`cancel(mode="after_turn")`は現在のLLMターンが完了してからクリーンに停止します。どちらの場合も、キャンセル後にストリームイテレータを最後まで消費してリソースをクリーンアップすることが重要です。 💡 ユースケース ⌨️ チャットアプリでのタイプライター風リアルタイム表示 🔧 ツール実行中の「検索中...」「計算中...」プログレス表示 🔄 マルチエージェント切り替えのリアルタイム通知UI 🛑 ユーザーの「停止」ボタンによる安全なキャンセル処理 ⚠️ 注意点 - `cancel()`後もイテレータを消費しないとリソースリークが発生する可能性があります - `RawResponsesStreamEvent`はトークン単位のため高頻度です。UIの再描画頻度に注意してください - Streaming中のエラーはイベントとして流れてくるため、適切にハンドリングしてください ✨ Streamingイベントを適切に使い分けることで、エージェントが「考えている」「調べている」「書いている」をユーザーに伝える、応答性の高いUIが実現できます! #OpenAIAgentSDK# #AIAgent#
もっと見る
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 LLM API の一時的なエラーで、エージェント全体が落ちてしまった経験はありませんか? `ModelRetrySettings` を使えば、Runner がリトライ戦略を自動管理し、一時的な障害に耐性のあるエージェントを構築できます。 📌 タイトル:Runner 管理のリトライ 🔗 URL: 🧩 概要 `ModelSettings` の `retry` パラメータに `ModelRetrySettings` を指定することで、リトライ回数・バックオフ戦略・リトライポリシーを細かく制御できます。`max_retries` で最大試行回数、`backoff` で遅延戦略(`initial_delay`、`max_delay`、`multiplier`、`jitter`)、`policy` でリトライ対象のエラー種別を定義します。ただし、abort エラー・安全でないリプレイ・出力開始後のストリーム・ステートフルリクエストは絶対にリトライされません。 🛠 使い方 ```python from agents import Agent, ModelRetrySettings, ModelSettings, retry_policies agent = Agent( name="Assistant", model="gpt-5.5", model_settings=ModelSettings( retry=ModelRetrySettings( max_retries=4, backoff={ "initial_delay": 0.5, "max_delay": 5.0, "multiplier": 2.0, "jitter": True, }, policy=retry_policies.any( retry_policies.provider_suggested(), retry_policies.retry_after(), retry_policies.network_error(), retry_policies.http_status([408, 429, 500, 502, 503, 504]), ), ) ), ) ``` 利用可能なポリシーヘルパー: - `retry_policies.never()` - 常にリトライしない - `retry_policies.provider_suggested()` - プロバイダの指示に従う - `retry_policies.network_error()` - 一時的なネットワーク障害 - `retry_policies.http_status([...])` - 特定の HTTP ステータスコード - `retry_policies.retry_after()` - Retry-After ヘッダに従う - `retry_policies.any(...)` / `retry_policies.all(...)` - 組み合わせ 🏗 本番システムへの組み込み方 ・Runner レベルでデフォルトのリトライ設定を定義し、Agent レベルで `max_retries` のみオーバーライドする ・`jitter: True` で複数エージェントの同時リトライによるサンダリングハード問題を回避する ・429(レート制限)と 5xx(サーバーエラー)を必ずリトライ対象に含める ・Agent レベルの設定は Runner レベルの設定とディープマージされる 💡 ユースケース 🔄 レート制限(429)への自動バックオフ 🌐 ネットワーク瞬断時の自動回復 🏢 マルチテナント環境でのエージェント安定性確保 📊 バッチ処理での一時的エラーの吸収 ⚠️ 注意点 abort エラー、プロバイダがリプレイ不安全と判定したリクエスト、出力が開始されたストリーム、`previous_response_id` や `conversation_id` を使うステートフルリクエストは、安全性の観点からリトライされません。リトライポリシーの `policy` フィールドはシリアライズされないため、実行時にのみ有効です。 ✨ ModelRetrySettings で、一時的な障害に動じない堅牢なエージェントを構築しましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 ストリーミング中のエージェント実行を、ユーザーの操作でただちに停止できることをご存知ですか? `RunResultStreaming.cancel()` を使えば、ストリーミング実行を途中で安全にキャンセルできます。 📌 タイトル:RunResultStreaming.cancel() 🔗 URL: 🧩 概要 `RunResultStreaming` の `cancel()` メソッドを呼ぶと、ストリーミング中のエージェント実行を即座に、または現在のターン完了後に停止できます。キャンセル後もクリーンアップのために `stream_events()` の非同期イテレータを最後まで消費する必要があります。`is_complete` プロパティでランが終端状態に達したかどうかを確認でき、`final_output` や `interruptions` などのサマリプロパティは最後のトークン後に確定します。 🛠 使い方 ```python from agents import Agent, Runner agent = Agent(name="Assistant", instructions="You are helpful.") result = "Write a long essay...") async for event in # ユーザーがキャンセルボタンを押した場合 if user_cancelled(): result.cancel() # キャンセル後もイテレータを最後まで消費する continue # 通常のイベント処理 handle_event(event) # クリーンアップ完了後に状態を確認 print(f"Complete: {") ``` 🏗 本番システムへの組み込み方 ・チャット UI の「停止」ボタンと連携し、ユーザー主導のキャンセルを実装する ・キャンセル後も `stream_events()` を最後まで消費してリソースリークを防ぐ ・`is_complete` を確認し、キャンセルされた実行と正常完了を区別してログに記録する ・コスト管理として、不要な生成を早期に打ち切りトークン消費を抑える 💡 ユースケース 🛑 チャットボットの「生成停止」ボタン実装 💰 長大な応答のトークンコスト削減 ⏱ タイムアウトベースの自動キャンセル 🔄 ユーザーが質問を変更した際の前回実行の中断 ⚠️ 注意点 `cancel()` を呼んだ後に `stream_events()` の消費をスキップすると、リソースのクリーンアップが正しく行われません。必ずイテレータを最後まで走らせてください。また、キャンセルのタイミングによっては現在のターンが完了するまで停止しない場合があります。 ✨ cancel() で、ユーザーが主導権を持てるレスポンシブなストリーミング体験を実現しましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 エージェントが「人間の承認待ち」で止まったとき、その状態を保存して後から再開できることをご存知ですか? `to_state()` と interruptions を使えば、承認フローを含むエージェント実行を中断・再開できます。 📌 タイトル:to_state() と interruptions による中断/再開 🔗 URL: 🧩 概要 ツールが人間の承認を必要とする場合、`result.interruptions` に保留中の承認リクエストが格納されます。` で現在の実行状態を `RunState` としてスナップショット化し、`state.approve()` / `state.reject()` で各中断を処理した後、` state)` で実行を再開できます。直接ツール・ネストされたハンドオフ・` のいずれから発生した中断にも対応します。 🛠 使い方 ```python from agents import Agent, Runner agent = Agent(name="Assistant", instructions="Use tools when needed.") result = await "Delete temp files...") # 中断があるか確認 if result.interruptions: # 実行状態をスナップショット化 state = # 各中断を承認または拒否 for interruption in result.interruptions: state.approve(interruption) # state.reject(interruption) # 拒否する場合 # 承認済みの状態で再開 result = await state) ``` 🏗 本番システムへの組み込み方 ・`RunState` をシリアライズして DB に保存すれば、非同期の承認ワークフローを実現できる ・Slack ボタンや管理画面と連携し、人間の承認後に `approve()` → ` で再開する ・ストリーミング実行時は `stream_events()` を最後まで消費してから interruptions にアクセスする ・複数の中断を個別に承認/拒否でき、きめ細かいアクセス制御が可能 💡 ユースケース 🔐 ファイル削除やデータ変更など破壊的操作の事前承認 💳 決済処理前の人間によるダブルチェック 📋 ワークフローの段階的承認(上長エスカレーション) 🔄 長時間処理の途中保存と後日再開 ⚠️ 注意点 ストリーミング実行の場合、`stream_events()` を完全に消費する前に interruptions へアクセスすると正しい結果が得られません。また、`RunState` は実行時のエージェント構成と紐づいているため、エージェントの定義を変更した後に古い state で再開すると予期しない動作になる可能性があります。 ✨ to_state() で、人間の判断を挟む安全なエージェントワークフローを構築しましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 エージェントが長時間タスクの途中でクラッシュしたとき、最初からやり直しになっていませんか? 永続実行統合を使えば、障害を跨いでエージェントの進行状況を保持し、中断したところから再開できます。 📌 タイトル:永続実行統合 🔗 URL: 🧩 概要 OpenAI Agent SDKは、複数の永続実行オーケストレーターとの統合をサポートしています。**Temporal**(永続的な長時間ワークフロー)、**Dapr**(CNCFベンダー中立オーケストレーター、自動障害回復)、**Restate**(軽量な永続エージェントフレームワーク、プロセス/コンテナ/サーバーレス対応)、**DBOS**(SQLite/Postgresベースのエージェント進行状況保存)の4つが公式に統合されています。いずれも標準の `Runner` インターフェースと連携し、Human-in-the-Loopパターン(一時停止・承認・再開)をサポートします。 🛠 使い方 ```python # Temporal統合の例 # pip install temporalio from temporalio.contrib.openai_agents import openai_workflow # Dapr統合の例 # Dapr CLIとランタイムをセットアップ後 # dapr run -- python agent_workflow.py # Restate統合の例 # pip install restate-sdk # Restateのドキュメントに従いエージェントをデプロイ # DBOS統合の例 # pip install dbos from dbos import DBOS # 各オーケストレーターの詳細は公式ドキュメントを参照: # Temporal: # Dapr: # Restate: # DBOS: ``` 🏗 本番システムへの組み込み方 ・長時間実行エージェント(リサーチ、データ処理)の障害耐性を確保する ・Human-in-the-Loopパターンで、承認待ちの間エージェントを一時停止し、承認後に再開する ・既存のオーケストレーション基盤(Temporal/Dapr)がある場合は、その上でエージェントを実行する ・サーバーレス環境ではRestateやDBOSで軽量にエージェントの永続性を実現する 💡 ユースケース 🔄 障害時の自動再開が必要な長時間リサーチエージェント ✅ 人間の承認ステップを含むワークフロー自動化 🏗 マイクロサービスアーキテクチャでのエージェントオーケストレーション 💾 エージェントの進行状況のチェックポイント保存 ⚠️ 注意点 各オーケストレーターは独自のインフラ要件(Temporalサーバー、Daprランタイム、Restateサービス、DBOSのDB)を持つため、運用コストと複雑さを考慮して選択してください。ベンダー中立を重視するならDapr(CNCF)やRestate、既存のワークフロー基盤があるならTemporal、最小構成で始めるならDBOSが適しています。統合の成熟度はそれぞれ異なるため、本番導入前に十分な検証を行ってください。 ✨ 永続実行統合で、エージェントを「落ちても止まらない」堅牢なシステムに進化させましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 マルチターンのストリーミングで、毎回HTTPコネクションを張り直すオーバーヘッドが気になりませんか? WebSocketトランスポートを使えば、永続接続でレスポンスをストリーミングし、レイテンシを大幅に削減できます。 📌 タイトル:Responses WebSocket トランスポート 🔗 URL: 🧩 概要 `set_default_openai_responses_transport("websocket")` を呼ぶと、SDKのレスポンス取得がHTTPからWebSocketに切り替わります。特にマルチターンのストリーミングでは `responses_websocket_session()` を使うことで、セッション内でWebSocket接続を再利用し、ターンごとの接続オーバーヘッドを排除できます。セッション内では ` でストリーミング実行を行います。`ping_interval` と `ping_timeout` でハートビートを設定でき、長い推論ターンでは `ping_timeout` を大きくするか `None` に設定してタイムアウトを防ぎます。 🛠 使い方 ```python from agents import ( Agent, set_default_openai_responses_transport, responses_websocket_session, ) # グローバルにWebSocketを有効化 set_default_openai_responses_transport("websocket") agent = Agent(name="Chat", instructions="Be helpful.") # セッションで接続を再利用 async with responses_websocket_session( responses_websocket_options={ "ping_interval": 20.0, "ping_timeout": 60.0, }, ) as ws: first = "Say hello.") async for event in pass # ストリーミングイベントを処理 second = agent, "Now say goodbye.", previous_response_id=first.last_response_id, ) async for event in pass ``` 🏗 本番システムへの組み込み方 ・対話型チャットアプリで、WebSocket接続を再利用してターン間のレイテンシを削減する ・推論モデル(o4-miniなど)の長い思考時間に対応するため、`ping_timeout` を十分大きく設定する ・`previous_response_id` と組み合わせてサーバー管理型の会話をWebSocket上で継続する ・ハートビートが不要な場合は `ping_timeout=None` でタイムアウトを無効化する 💡 ユースケース ⚡ リアルタイムチャットアプリのレイテンシ最適化 🔄 マルチターン対話での接続再利用 🧠 推論モデルの長時間思考対応 📡 イベント駆動型のストリーミング処理 ⚠️ 注意点 WebSocketトランスポートはオプション機能であり、すべての環境で利用可能とは限りません。プロキシやファイアウォールがWebSocket接続をブロックする場合があります。`ping_timeout` が短すぎると、長い推論ターンで接続が切断される可能性があるため、ユースケースに応じて適切に調整してください。 ✨ WebSocketの永続接続で、ストリーミング体験を次のレベルに引き上げましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 モデルが一度に大量のツール呼び出しを発行して、レート制限やリソース枯渇に悩んでいませんか? ローカルツールの同時実行数を制限することで、SDK側でのツール実行を安全にコントロールできます。 📌 タイトル:ローカルツールの同時実行数制限 🔗 URL: 🧩 概要 `RunConfig` の `tool_execution` に `ToolExecutionConfig(max_function_tool_concurrency=N)` を指定すると、SDK側でのローカルファンクションツールの同時実行数を制限できます。デフォルトは `None`(無制限)で、モデルが発行したツール呼び出しをすべて同時に実行します。これは `ModelSettings.parallel_tool_calls` とは別のレイヤーで機能します。`parallel_tool_calls` はモデルが複数ツールを同時に「発行するかどうか」を制御し、`max_function_tool_concurrency` は発行済みツールをSDKが「何個同時に実行するか」を制御します。 🛠 使い方 ```python from agents import Agent, RunConfig, Runner, ToolExecutionConfig agent = Agent( name="Worker", instructions="Use tools as needed.", tools=[fetch_data, process_item, save_result], ) result = await agent, "Run the required tool calls.", run_config=RunConfig( tool_execution=ToolExecutionConfig( max_function_tool_concurrency=2, ), ), ) ``` 🏗 本番システムへの組み込み方 ・外部APIのレート制限に合わせて同時実行数を制限し、429エラーを回避する ・DB接続プールのサイズに合わせて同時実行数を調整する ・`parallel_tool_calls=True`(モデル側)と `max_function_tool_concurrency`(SDK側)を組み合わせて、並列発行は許可しつつ実行スループットを制御する ・リソース集約的なツール(画像生成やファイル処理など)の同時実行を制限してメモリ使用量を抑える 💡 ユースケース 🔧 レート制限のある外部APIとの安全な連携 🗄 データベースコネクション数の保護 🖥 CPU/メモリ集約的なツールのリソース管理 ⚡ モデルの並列発行とSDKの実行制限の独立制御 ⚠️ 注意点 `max_function_tool_concurrency` はSDK側のローカル実行にのみ影響し、hosted toolやAPIレベルの並列性には関与しません。値を小さくしすぎると、多数のツール呼び出しがキューに溜まり、全体のレスポンスが遅くなる可能性があります。`parallel_tool_calls` との役割の違いを理解したうえで、両方を適切に設定してください。 ✨ ツール同時実行数の制限で、外部リソースに優しいエージェントを構築しましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
# OpenAI Agent SDKの便利で実践的な使い方 🌍 エージェントの処理が数時間、あるいは数日にわたる場合、プロセスが落ちても大丈夫ですか? Durable execution統合を使えば、長時間実行や人間承認フローを安全に実現できます。 📌 タイトル:Running agents – Durable execution integrations 🔗 URL: 🧩 概要 Durable execution統合は、エージェントの実行状態を永続化し、プロセス障害やサーバー再起動後も途中から再開できる仕組みです。人間の承認を待つワークフロー(数時間〜数日)や、長時間のバッチ処理で特に威力を発揮します。Temporal、Dapr、Restate、DBOSなどのフレームワークとの統合がサポートされています。 🛠 使い方 DBOSとAgent SDKを組み合わせた例です。`DBOS()` で初期化し、`Agent(name="approval-agent", instructions="...")` でエージェントを定義します。`@DBOS.workflow()` デコレータを付けた非同期関数 `expense_approval_workflow(report_id)` の中で、`await input=...)` で経費レポートを分析し、`await DBOS.recv(f"approval-{report_id}", timeout_seconds=86400 * 7)` で最大7日間の承認待ちを行います。`approval["approved"]` が `True` なら再度 ` で承認済みレポートを処理します。 🏗 実践的な使い方 **人間承認ワークフロー** 経費精算、コンテンツ公開、契約書レビューなど、人間の承認が必要なプロセスにエージェントを組み込む場合、承認待ちの間にプロセスが落ちても状態が保持されます。承認が来た時点で自動的に処理を再開できます。 **障害からの自動復旧** Temporal/Dapr/Restate/DBOSのいずれも、プロセスクラッシュやサーバー再起動後に自動的に最後のチェックポイントから再開する仕組みを持っています。LLM呼び出しの途中で障害が発生しても、完了済みのステップは再実行されません。 **小中規模プロジェクトにはDBOS** TemporalやDaprはインフラの構築と運用コストが高いですが、DBOSはSQLite(ローカル開発)やPostgres(本番)だけで動作します。専用のオーケストレーションサーバーが不要なため、小中規模のプロジェクトに最適です。 **段階的なエージェントパイプライン** 複数のエージェントステップを持つパイプライン(調査→分析→レポート生成→レビュー→承認)を、各ステップの完了をチェックポイントとして永続化できます。途中で失敗しても、最初からやり直す必要がありません。 💡 ユースケース 📋 経費精算の承認フロー(マネージャーの承認を数日待つ) 📝 コンテンツ公開パイプライン(エディターレビュー→承認→公開) 🔄 長時間バッチ処理の障害復旧(数百件のドキュメント処理) 🏢 契約書レビューワークフロー(法務チームの確認待ち) ⚠️ 注意点 - Durable executionフレームワークの選択はインフラ要件に依存します。既にTemporalを使っているならTemporalを、新規で軽量に始めるならDBOSを検討してください。 - 永続化される状態にLLMのレスポンス全文を含めるとストレージコストが増大します。必要な情報だけを保存するよう設計してください。 - 人間承認のタイムアウトを設定してください。無期限に待つワークフローはリソースリークの原因になります。 - DBOSのSQLiteバックエンドはローカル開発には便利ですが、本番環境ではPostgresを使用してください。 ✨ Durable executionで、プロセス障害を恐れずに長時間ワークフローを構築しましょう! #OpenAIAgentSDK# #AIAgent#
もっと見る