사고형 로컬 LLM에 짧은 응답을 시킬 때는 max_tokens를 넉넉하게 잡아야 한다. 그렇지 않으면 모델이 '생각'하느라 예산을 다 써버려 정작 출력은 텅 비게 된다.
최근 자동화 스크립트의 이미지 묘사 부분이 며칠째 제대로 작동하지 않아 삽질했다. 노트 파이프라인에서 블로그에 쓸 이미지 스케치 설명을 Qwen3.6 모델(사고형 모델이다)에 요청하고 있었다.
"이 그림 장면을 한 줄로 묘사해 줘"라고 시켰고, max_tokens=300을 설정했다. 한 줄짜리 설명이니 300토큰이면 충분하다고 봤다. 그런데 예상과 달리 텅 빈 응답이 계속 넘어왔다.
문제는 내가 쓴 파이썬 코드 response.splitlines()[0]에서 터졌다. 빈 응답이니 당연히 IndexError가 났다.
문제는 이 예외를 조용히 삼키고 "이미지 없이 진행"하는 로직이 있었던 것. 에러 로그가 남지 않으니 며칠 동안 이미지 스케치 작업이 조용히 빠지는 걸 알아차리지 못했다. 평소엔 잘 돌아가는 줄 알았지.
재현 스크립트를 만들어 단계별로 traceback을 찍어보니 원인이 명확해졌다. Qwen3.6 같은 '사고형' 모델들은 실제 출력을 내기 전에 내부적으로 추론(thinking) 과정에서 토큰을 소모한다. max_tokens=300은 모델이 생각할 예산까지 포함된 것이라, 한 줄짜리 응답이라도 생각을 마치는 데 그 예산을 다 써버린 것이다. 그래서 정작 출력할 토큰은 남지 않아 빈 문자열이 나온 거였다.
해결책은 간단했다. max_tokens를 2500으로 대폭 늘려줬다. 모델이 충분히 생각하고도 남을 만큼의 예산을 주는 셈이다. 그래도 혹시 모를 상황에 대비해 빈 응답이 오면 한 번 더 재시도하고, 그것마저 실패하면 미리 정해둔 폴백 문장으로 대체하도록 했다.
이번 경험으로 두 가지를 배웠다. 사고형 LLM에 아무리 짧은 응답을 요구하더라도 max_tokens는 넉넉하게 설정해야 한다. 그리고 예외를 조용히 삼키는 코드는 반드시 원인 추적이 가능하도록 로그를 남겨야 한다.

'로컬 LLM 구축' 카테고리의 다른 글
| LLM 에이전트 반복 지시 자동화: 스킬과 메모리 활용법 (0) | 2026.09.04 |
|---|---|
| 맥에서 로컬 LLM 시작하기, 무엇을 받아서 어떻게 켜나 (0) | 2026.08.28 |
| 로컬 LLM과 클라우드 API, 무엇을 어디에 맡길까 (0) | 2026.08.27 |
| 맥미니 48GB, 스왑이 차면 프로세스가 소리 없이 죽습니다 (0) | 2026.08.26 |
| LM Studio 컨텍스트 길이 제한, 26만 토큰 모델이 4096으로 돌고 있었다 (0) | 2026.08.25 |