きめ細かいツールストリーミングは、すべてのモデルとすべてのプラットフォームで一般提供されており、ベータヘッダーは不要です。バッファリングやJSON検証なしでツール使用パラメータ値のストリーミングを可能にし、大きなパラメータの受信開始までのレイテンシーを削減します。
きめ細かいツールストリーミングを使用する場合、無効または部分的なJSON入力を受信する可能性があります。コード内でこれらのエッジケースを考慮するようにしてください。
きめ細かいツールストリーミングは、すべてのモデルとすべてのプラットフォーム(Claude API、Amazon Bedrock、Google Vertex AI、Microsoft Foundry)で利用可能です。使用するには、きめ細かいストリーミングを有効にしたいツールで eager_input_streaming を true に設定し、リクエストでストリーミングを有効にします。
APIできめ細かいツールストリーミングを使用する方法の例を以下に示します:
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 65536,
"tools": [
{
"name": "make_file",
"description": "Write text to a file",
"eager_input_streaming": true,
"input_schema": {
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "The filename to write text to"
},
"lines_of_text": {
"type": "array",
"description": "An array of lines of text to write to the file"
}
},
"required": ["filename", "lines_of_text"]
}
}
],
"messages": [
{
"role": "user",
"content": "Can you write a long poem and make a file called poem.txt?"
}
],
"stream": true
}' | jq '.usage'この例では、きめ細かいツールストリーミングにより、Claudeは lines_of_text パラメータが有効なJSONかどうかを検証するためのバッファリングなしで、長い詩の行をツール呼び出し make_file にストリーミングできます。これにより、パラメータ全体がバッファリングされて検証されるのを待つことなく、パラメータストリームが到着するたびに確認できます。
きめ細かいツールストリーミングでは、ツール使用チャンクのストリーミングがより速く開始され、多くの場合、チャンクが長くなり、単語の区切りが少なくなります。これはチャンキング動作の違いによるものです。
例:
きめ細かいストリーミングなし(15秒の遅延):
Chunk 1: '{"'
Chunk 2: 'query": "Ty'
Chunk 3: 'peScri'
Chunk 4: 'pt 5.0 5.1 '
Chunk 5: '5.2 5'
Chunk 6: '.3'
Chunk 8: ' new f'
Chunk 9: 'eatur'
...きめ細かいストリーミングあり(3秒の遅延):
Chunk 1: '{"query": "TypeScript 5.0 5.1 5.2 5.3'
Chunk 2: ' new features comparison'きめ細かいストリーミングはバッファリングやJSON検証なしでパラメータを送信するため、結果のストリームが有効なJSON文字列で完了する保証はありません。
特に、停止理由 max_tokens に達した場合、ストリームはパラメータの途中で終了し、不完全になる可能性があります。一般的に、max_tokens に達した場合の処理を行うための特別なサポートを記述する必要があります。
きめ細かいツールストリーミングを使用する場合、モデルから無効または不完全なJSONを受信する可能性があります。この無効なJSONをエラーレスポンスブロックでモデルに返す必要がある場合、適切な処理を確保するためにJSONオブジェクトでラップすることができます(適切なキーを使用して)。例:
{
"INVALID_JSON": "<your invalid json string>"
}このアプローチにより、モデルはコンテンツが無効なJSONであることを理解しつつ、デバッグ目的で元の不正なデータを保持できます。
無効なJSONをラップする際は、ラッパーオブジェクトで有効なJSON構造を維持するために、無効なJSON文字列内の引用符や特殊文字を適切にエスケープしてください。
Was this page helpful?