15분
"왜 응답이 잘리죠?" - API 사용 5대 실수
Day 3: API 활용 & 토큰 이해
"왜 응답이 잘리죠?" - API 사용 5대 실수
LLM 기초 > 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 잘림의 차이를 구별하는 방법을 알려주세요.
이 팁이 도움이 됐나요?