SK 데보션 블로그의 Teus가 vLLM과 opencode 환경에서 설정 가능한 `thinking_token_budget` 파라미터의 실제 동작 원리를 분석한다. 흔한 오해와 달리 이 값은 'LLM이 이만큼 생각하라'는 지시가 아니라 'thinking 토큰 생성량의 상한'이며, -1로 설정하면 무제한 추론 시간을 보장한다는 점을 vLLM 소스 코드 수준에서 확인한다.
핵심 포인트- `thinking_token_budget`은 LLM 내부 reasoning 과정에서 생성할 수 있는 thinking 토큰의 최대 수를 상한 제한하는 파라미터다.
- 21500으로 설정하면 "21500만큼 생각해"가 아니라 "21500 토큰을 초과하지 마"는 의미다.
- -1로 설정하면 unlimited 상태가 돼 thinking 과정이 예산 초과로 중단되지 않는다.
- opencode.jsonc에서 vLLM 모델에 `thinking_token_budget`과 `reasoningEffort`를 함께 전달할 수 있다.
- 빠른 응답이 필요할 때 낮은 값으로 thinking 시간을 절약하는 데 유용한 설정이다.
상세 정리- 배경: opencode, Claude Code 등에서 `reasoningEffort`를 high/low로 지정할 수 있지만, 내부에서 어떤 파라미터가 실제로 넘겨지는지 공식 문서만으로는 불분명하다.
- vLLM 문서 확인: `docs.vllm.ai`의 reasoning_outputs 문서에 `thinking_token_budget`이 LLM reasoning 최대 토큰 수 제한으로 명시돼 있다.
- opencode 설정 예시: `opencode.jsonc`에서 vLLM 모델의 `options` 안에 `"thinking_token_budget": 21500`을 추가하면, LLM 요청 payload에 해당 값이 실제로 포함돼 전달된다.
- 핵심 오해 교정: 이 파라미터는 "더 많이 생각하게" 만드는 설정이 아니다. vLLM 내부에서 `remaining_budget <= 0` 조건 시 `force_index = [0]`으로 강제 종료하는 로직(thinking_budget_state.py)이 동작한다.
- 유효값 범위: `sampling_params.py` 소스에 따르면 비음수 정수 또는 -1(unlimited)만 허용된다. 그 외 값은 `VLLMValidationError`가 발생한다.
- -1의 의미: -1 설정 시 LLM이 thinking 과정 도중 예산 초과로 강제 중단되지 않아 최대한의 자율적 추론 시간을 보장받는다.
- 실용적 용도: 모델이 불필요하게 긴 thinking 시간을 소비하지 않게 제한해 응답 속도를 빠르게 만들고 싶을 때 유용하다. 반대로 추론 품질을 최대화하려면 -1로 설정한다.
왜 읽나vLLM 또는 opencode 환경에서 로컬 추론 모델의 reasoning 설정을 다루는 AI 인프라 엔지니어에게, `thinking_token_budget`의 실제 동작을 소스 코드 수준으로 검증한 짧고 실용적인 레퍼런스.