Source: https://aiprimetech.io/ja/docs/api-reference/streaming/ [ホーム](/ja/) / [ドキュメント](/ja/docs/) / ストリーミング # ストリーミング 両形式のサーバー送信イベント:イベント構造が異なるため、取り違えると何も受信されていないように見えます。 ページをコピー [ Markdownで表示](/ja/docs/api-reference/streaming.md) [ ChatGPTに質問](https://chatgpt.com/?q=Read%20https%3A//aiprimetech.io/docs/api-reference/streaming.md%20and%20answer%20questions%20about%20it.%20Start%20with%20a%20short%20summary.) [ Claudeで質問](https://claude.ai/new?q=Read%20https%3A//aiprimetech.io/docs/api-reference/streaming.md%20and%20answer%20questions%20about%20it.%20Start%20with%20a%20short%20summary.) 設定する項目: stream をtrueにすると、レスポンスは次の形式になります: text/event-stream。両方のエンドポイントがストリーミングに対応していますが、出力するイベントの構造は それぞれ異なります. ## Anthropic形式 ``` Copycurl -N https://aiprimetech.io/v1/messages \ -H "x-api-key: $CLAUDEAPIKEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{"model":"claude-sonnet-4-6","max_tokens":512,"stream":true, "messages":[{"role":"user","content":"Count to five"}]}' ``` ``` Copyevent: message_start data: {"type":"message_start","message":{"id":"msg_...","usage":{"input_tokens":9}}} event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"One"}} event: message_delta data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":14}} event: message_stop data: {"type":"message_stop"} ``` テキストが届くイベント: content_block_delta イベント内の次の場所: delta.text。最終的な出力トークン数が届くイベント: message_delta。次の識別子は使用しません: message_start. ## OpenAI形式 ``` Copydata: {"choices":[{"delta":{"content":"One"},"index":0}]} data: {"choices":[{"delta":{},"finish_reason":"stop","index":0}]} data: [DONE] ``` テキストが届く場所: choices[0].delta.content。ストリームの終端には、次のリテラルが data: [DONE] 終端マーカーとして送信されます。これはJSONではありません。 この不一致により、エラーのない空のレスポンスが発生します。クライアントが次の形式を解析しようとすると、 choices[].delta.content Messagesのストリームからは毎回何も見つからないまま、成功と報告されます。ストリーミングが動作しているように見えても何も返されない場合は、解析している構造を確認してください。 ## Python、Anthropic SDK ``` Copyfrom anthropic import Anthropic client = Anthropic(api_key=class="s">"sk-your-key", base_url=class="s">"https://aiprimetech.io") with client.messages.stream( model=class="s">"claude-sonnet-4-6", max_tokens=512, messages=[{class="s">"role": class="s">"user", class="s">"content": class="s">"Count to five"}], ) as stream: for text in stream.text_stream: print(text, end=class="s">"", flush=True) ``` ## 運用上の注意点 - 使用するモデルは、 curl -N を手動テスト時に使用してください。そうしないと、curlがストリーム全体をバッファリングし、何も起きていないように見えます。 - 自分のアプリの前段にあるプロキシでバッファリングを無効にしてください(proxy_buffering off をnginxで設定)。そうしないと、クライアントには最後に応答全体がまとめて届きます。 - ストリームの途中で接続が切れても、すでに生成されたトークンは課金対象です。 - ストリーミングによって料金は変わりません。変わるのは、バイトが届くタイミングだけです。 [Messages API非ストリーミングのリファレンス](/ja/docs/api-reference/messages/)[エラーストリーム途中の障害](/ja/docs/api-reference/errors/)[トラブルシューティング空のレスポンス](/ja/docs/guides/troubleshooting/) [前へモデルのエンドポイント](/ja/docs/api-reference/models-endpoint/)[次へエラー](/ja/docs/api-reference/errors/)