본문으로 건너뛰기

스트리밍 & 멀티턴 대화

중급

API에서 채팅 같은 경험을 구축할 때의 두 가지 실용적 현실: 사용자가 출력을 즉시 보도록 스트리밍하고, API가 무상태이므로 히스토리를 직접 관리하는 것입니다.

스트리밍

스트리밍이 없으면 사용자는 전체 응답을 기다립니다. 스트리밍을 쓰면 토큰이 생성되는 대로 도착합니다 — 체감 속도가 훨씬 좋습니다. SDK의 스트리밍 헬퍼를 사용하세요:

with client.messages.stream(
model="claude-sonnet-4-6", max_tokens=1024,
messages=[{"role": "user", "content": "Explain RAG in two sentences."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)

멀티턴: 히스토리는 당신이 보관합니다

API는 호출 사이에 메모리가 없습니다(이유). 대화를 이어가려면 매번 이전 교환 전체를 다시 보내세요:

messages = [{"role": "user", "content": "Hi, I'm planning a trip."}]
# ... get assistant reply, then append both turns:
messages.append({"role": "assistant", "content": assistant_text})
messages.append({"role": "user", "content": "Make it 3 days."})
# send the full `messages` list again

긴 대화는 윈도우를 채웁니다

히스토리가 늘어날수록 컨텍스트 윈도우를 잡아먹고 비용이 올라갑니다. 전략:

  • 오래된 턴을 짧은 요약으로 요약/압축하여 앞으로 가지고 가세요.
  • 관련 없는 이전 턴을 잘라내세요.
  • 안정적인 접두부에 대해 다시 비용을 내지 않도록 **프롬프트 캐싱**과 결합하세요.

다음