# 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#