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