Claude Code의 `reasoning_effort` 파라미터가 vLLM 기반 오픈소스 모델에서 실제로 작동하는지 소스 코드 레벨로 추적한 실험적 분석이다. GLM 5.2를 대상으로 vLLM의 Anthropic-to-OpenAI 변환 경로를 역추적하여 reasoning effort 설정이 모델까지 전달되는 메커니즘을 해부했다. 실험 결과 `"high"` 외의 모든 effort 값이 `"max"`로 통일되는 GLM 5.2 채팅 템플릿의 조건부 로직을 발견했으며, 이는 effort를 낮춰 토큰을 절약하려는 시도가 역효과를 낼 수 있음을 시사한다.
핵심 포인트- Claude Code는 vLLM `/v1/messages` 엔드포인트에 `output_config.effort` 형태로 reasoning effort를 전달
- vLLM이 이를 Anthropic-to-OpenAI 변환 레이어를 거쳐 `reasoning_effort` 파라미터로 변환
- GLM 5.2 채팅 템플릿에서 `"high"`만 별도 분기되고, 나머지 값(`"low"`, `"medium"`, `"xhigh"`)은 모두 `"max"`로 수렴
- effort를 낮춰 토큰을 줄이려는 시도는 실질적 효과 없음 — 오히려 토큰 소비가 증가할 가능성
- `"xhigh"` 와 `"max"` 명시 설정도 동일하게 `"max"` 시스템 프롬프트로 귀결됨
상세 정리- Claude Code는 자체 API 규격에 따라 `output_config.effort` 필드에 effort 수준을 문자열로 전달
- vLLM은 Anthropic 형식의 요청을 받아 내부적으로 OpenAI 형식으로 변환하는 호환 레이어를 보유
- 변환 과정에서 `effort` 값은 `reasoning_effort`로 그대로 전달되며, 이 시점에는 아직 값 변경 없음
- GLM 5.2 모델의 채팅 템플릿(Jinja2 기반)에 도달하면 조건 분기가 발생: `"high"` 여부를 확인
- `"high"` 인 경우: 시스템 프롬프트에 `"high"`로 기재됨 — 이것이 유일하게 구별되는 값
- `"high"` 가 아닌 경우(`"low"`, `"medium"`, `"xhigh"`, `"max"` 등): 모두 `"max"` 로 변환되어 시스템 프롬프트에 삽입
- 즉, effort를 `"low"`로 낮춰도 모델 입장에서는 `"max"` 지시와 동일하게 작동
- 이 동작은 Claude 네이티브 API 설계 의도와 완전히 다른 결과를 초래
- 실용적 결론: vLLM + GLM 환경에서 reasoning effort 다운그레이드는 의미 없음
- `"high"`만이 실질적으로 다른 동작을 유발하는 유일한 값
- effort 값에 따른 토큰 절약을 기대하는 vLLM 사용자는 이 제약을 인지해야 함
왜 읽나Claude Code를 vLLM 기반 오픈소스 모델과 연동할 때 reasoning effort 파라미터의 실제 동작을 소스 코드로 검증한 유일한 분석으로, 운영 비용 최적화를 위해 effort 설정을 활용하려는 엔지니어에게 필수적인 함정 정보를 제공한다.