본문 바로가기
C.W.K.
Stream
Lesson 09 of 10 · published

SDK의 함정 — 재시도, 스트리밍, 취소

~12 min · providers, sdk

Level 0수련생
0 XP0/100 lessons0/14 achievements
0/120 XP to next level120 XP to go0% complete

SDK도 프롬프트의 실제 행동을 바꿔

SDK마다 재시도, 스트리밍, 취소, 도구 반복을 다르게 처리하므로 같은 프롬프트도 감싼 SDK에 따라 다르게 움직여. 여러 제공업체를 잇는 코드에서 가장 흔한 운영 버그가 여기서 나와.

재시도

  • 대부분 일시 오류를 지수형 대기로 다시 시도하지만 기본 횟수는 달라.
  • 429 재시도는 보통 안전하지만 도구 호출 중 5xx 재시도는 부작용을 두 번 실행할 수 있어.
  • 멱등하지 않은 행동은 SDK 자동 재시도를 끄고 애플리케이션이 멱등성 키로 다뤄.

스트리밍

  • Anthropic의 content_block_delta와 OpenAI의 choices[0].delta처럼 사건 모양이 달라.
  • 도구 인수는 조각으로 오므로 끝까지 모아야 해.
  • 스트림 중 ‘connection closed’를 성공으로 착각하지 마.

취소

  • 대부분 스트림을 실제로 닫아야 청구도 멈춰.
  • Python 비동기 생성기에 asyncio.wait_for를 씌우지 말고 각 조각을 기다리며 취소 범위를 써.
  • 에이전트 취소는 실행 중인 도구에도 전달해야 뒤 작업과 청구가 멈춰.

Code

명시적인 취소를 갖춘 스트리밍 (Python)·python
async def stream_response(req):
    async with client.messages.stream(**req) as stream:
        try:
            async for event in stream:
                yield event
        except asyncio.CancelledError:
            await stream.close()  # explicit close → server stops billing
            raise

External links

Exercise

제공업체 하나에서 긴 스트리밍 호출을 시작해 중간에 취소해봐. 로그나 콘솔에서 토큰 청구가 멈췄는지 확인하고, 계속된다면 명시적인 닫기 처리를 추가해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.