홈 / 문서 / 스트리밍

스트리밍

두 형식의 서버 전송 이벤트 — 이벤트 구조가 다르므로 혼동하면 아무 응답도 없는 것처럼 보입니다.

설정할 항목: stream 값을 true로 설정하면 응답은 다음 형식이 됩니다: text/event-stream. 두 엔드포인트 모두 스트리밍을 지원하지만, 다음과 같이 전송합니다: 서로 다른 이벤트 구조.

Anthropic 형식

curl -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"}]}'
event: 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 형식

data: {"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

from 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)

운영 참고 사항