# Claude Agent SDKの便利だけど知られていない機能
🌍 エージェントの実行中にメッセージを送りたいと思ったことはありませんか?ストリーミング入力で対話的なセッションが実現します!
ストリーミング入力モードを使えば、エージェント実行中にメッセージの追加、中断、画像送信が可能です。
📌 タイトル:ストリーミング入力モード
🔗 URL:
🧩 概要
ストリーミング入力モード(推奨)は、`AsyncGenerator` を使った永続的なインタラクティブセッションを提供します。通常のシングルメッセージ入力(ワンショット)と異なり、セッション中にメッセージのキューイング、画像の添付、実行の中断が可能です。`yield` でメッセージを順次送信し、条件に応じてフォローアップメッセージを動的に生成できるため、チャットインターフェースや複雑なワークフローに最適です。
🛠 使い方
```python
# Python - ストリーミング入力でインタラクティブセッション
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, AssistantMessage, TextBlock
import base64
async def message_generator():
# 最初のメッセージ
yield {
"type": "user",
"message": {"role": "user", "content": "セキュリティの問題を分析してください"},
}
# フォローアップ(画像付き)
with open("diagram.png", "rb") as f:
image_data = base64.b64encode(
yield {
"type": "user",
"message": {
"role": "user",
"content": [
{"type": "text", "text": "このアーキテクチャ図もレビューしてください"},
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": image_data}},
],
},
}
options = ClaudeAgentOptions(max_turns=10, allowed_tools=["Read", "Grep"])
async with ClaudeSDKClient(options) as client:
await client.query(message_generator())
async for message in client.receive_response():
if isinstance(message, AssistantMessage):
for block in message.content:
if isinstance(block, TextBlock):
print(block.text)
```
```typescript
// TypeScript - AsyncGenerator でメッセージを逐次送信
import { query, type SDKUserMessage } from "
@anthropic-ai/claude-agent-sdk";
async function* generateMessages(): AsyncGenerator
{
yield {
type: "user",
message: { role: "user", content: "Analyze this codebase for security issues" },
parent_tool_use_id: null,
};
// 条件に応じてフォローアップ
await new Promise((resolve) => setTimeout(resolve, 2000));
yield {
type: "user",
message: { role: "user", content: "Now focus on authentication" },
parent_tool_use_id: null,
};
}
for await (const message of query({
prompt: generateMessages(),
options: { maxTurns: 10, allowedTools: ["Read", "Grep"] }
})) {
if (message.type === "result" && message.subtype === "success") {
console.log(message.result);
}
}
```
🏗 本番システムへの組み込み方
・チャットUIのメッセージ送信をジェネレータの `yield` に接続して、ユーザー入力をリアルタイムでエージェントに渡します
・画像アップロードを `base64` エンコードしてメッセージに含めることで、ビジュアル分析が可能になります
・中断シグナルを送信してエージェントの方向転換を行えるため、長時間実行タスクの制御に活用できます
・セッション中のコンテキストが自然に維持されるため、複数ターンの会話を管理する手間が省けます
💡 ユースケース
💬 カスタムチャットボットでユーザーとエージェントの対話的なセッションを構築する
🖼 コードレビュー中にスクリーンショットや設計図を動的に送信して分析させる
🔄 長時間のコード分析中に追加の指示やフォーカスエリアの変更を送る
⚠️ 注意点
・シングルメッセージ入力では画像添付、動的メッセージキューイング、リアルタイム中断がサポートされません
・ステートレス環境(Lambda関数など)ではシングルメッセージ入力を使用してください
・Python ではストリーミング入力に `ClaudeSDKClient` のコンテキストマネージャが必要です
✨ ワンショットで終わらない対話こそ、AIエージェントの本領発揮です。ストリーミング入力でリッチな体験を構築しましょう!
#ClaudeAgentSDK# #AIAgent#