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