15

"왜 응답이 잘리죠?" - API 사용 5대 실수

Day 3: API 활용 & 토큰 이해

학습 목표

API 사용 시 흔히 저지르는 실수와 해결법을 파악한다 스트리밍 구현 시 주의사항을 이해한다

API 사용 5대 실수


실수 1: 응답이 중간에 잘림

[증상]
"CNC 서보 알람의 원인은 다음과 같습니다:
 1. 서보 모터 과부하
 2. 엔코더 이상
 3. 전원"           ← 여기서 갑자기 끝남

[원인]
max_tokens가 너무 작음 (기본값이 작거나 명시적으로 낮게 설정)

[해결]
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[...],
    max_tokens=1500  # 충분히 크게 설정
)

# 잘렸는지 확인하는 방법
if response.choices[0].finish_reason == "length":
    print("경고: 응답이 max_tokens에 의해 잘렸습니다!")

실수 2: 스트리밍에서 None 체크 누락

# 나쁜 예 (에러 발생!)
for chunk in stream:
    print(chunk.choices[0].delta.content)
    # TypeError: delta.content가 None일 수 있음!

# 좋은 예
for chunk in stream:
    content = chunk.choices[0].delta.content
    if content is not None:  # None 체크 필수!
        print(content, end="", flush=True)

실수 3: 대화 히스토리 무한 증가

# 나쁜 예: 대화가 길어지면 토큰 폭발
messages = [{"role": "system", "content": system_prompt}]

while True:
    user_input = input("질문: ")
    messages.append({"role": "user", "content": user_input})

    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages  # 계속 커짐!
    )

    assistant_msg = response.choices[0].message.content
    messages.append({"role": "assistant", "content": assistant_msg})
    # 10번 대화하면 messages에 20개+ 메시지
    # → 매번 수천 토큰이 입력으로 소비
# 좋은 예: 최근 N개만 유지
MAX_HISTORY = 10  # 최근 10개 메시지만

messages = [{"role": "system", "content": system_prompt}]

while True:
    user_input = input("질문: ")
    messages.append({"role": "user", "content": user_input})

    # 히스토리 크기 제한
    if len(messages) > MAX_HISTORY + 1:  # +1은 system
        messages = [messages[0]] + messages[-(MAX_HISTORY):]

    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages
    )
    # ...

실수 4: 모든 에러에 재시도

# 나쁜 예: 401 에러에도 재시도 (영원히 실패)
try:
    response = client.chat.completions.create(...)
except Exception:
    time.sleep(1)
    response = client.chat.completions.create(...)  # 또 실패

# 좋은 예: 재시도 가능한 에러만 재시도
RETRYABLE = (RateLimitError, APITimeoutError, APIConnectionError)

try:
    response = client.chat.completions.create(...)
except AuthenticationError:
    raise  # 재시도 불가
except RETRYABLE:
    # 지수 백오프로 재시도
    ...

실수 5: 타임아웃 미설정

# 나쁜 예: 타임아웃 없음 → 서버 문제 시 무한 대기
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[...]
    # timeout 없음!
)

# 좋은 예: 30초 타임아웃
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[...],
    timeout=30.0  # 30초 후 타임아웃
)
AI로 학습하기 — 꿀팁
API 응답 잘림 원인 5가지 진단AI 학습 팁

LLM 응답이 중간에 잘리는 현상은 max_tokens 설정 외에도 여러 원인이 있습니다. 내 이해가 완전한지 점검하세요.

LLM API 응답이 중간에 잘리는 문제에 대해 '그냥 max_tokens를 늘리면 해결된다'는 접근이 맞는지 검증해주세요. (1) max_tokens 이외에 응답이 잘리는 실제 원인 4가지, (2) 각 원인이 제조 AI 앱(설비 점검 보고서 생성, 불량 리포트 요약 등)에서 발생하는 구체적 증상, (3) '스트리밍 구현 시 응답이 잘리는 것처럼 보이는 UI 버그'와 실제 API 잘림의 차이를 구별하는 방법을 알려주세요.
이 팁이 도움이 됐나요?