Qwen-3 채팅 템플릿 분석

Qwen-3는 유연하고 효율적인 채팅 템플릿을 도입합니다

Qwen의 Qwen-3 모델은 이전 모델인 Qwen-2.5 및 QwQ보다 더 정교한 채팅 템플릿을 특징으로 합니다. 이 업데이트된 Jinja 템플릿은 모델이 추론을 처리하고, 대화 문맥을 관리하며, 도구와 상호작용하는 방식에 중요한 개선 사항을 도입하여 에이전트 워크플로우를 더욱 신뢰할 수 있고 효율적으로 만듭니다.

enable_thinking 플래그를 통한 선택적 추론

Qwen-3는 enable_thinking 플래그를 사용하여 사용자가 추론 기능을 토글할 수 있도록 하여, 이전 모델에서 볼 수 있었던 강제적인 chain-of-thought 패턴에서 벗어납니다.

enable_thinking이 false로 설정되면, 템플릿은 빈 <think></think> 쌍을 삽입하여 모델이 단계별 사고를 건너뛰도록 신호합니다. 반면, QwQ와 같은 모델은 <think> 태그를 생성 프롬프트에 직접 포함시켜 모든 대화에서 추론을 강제합니다. 플래그가 true로 설정되면, 모델은 추론에 참여할지 여부를 스스로 결정할 수 있는 자율성을 유지합니다.

rolling checkpoint를 통한 동적 문맥 관리

Qwen-3는 대화 진행 상황에 따라 추론 블록을 지능적으로 보존하거나 가지치기하는 "rolling checkpoint" 시스템을 활용합니다. 이 시스템은 메시지 목록을 역순으로 탐색하여 도구 호출이 아니었던 가장 최근의 사용자 턴을 식별합니다. 템플릿은 해당 인덱스 이후의 모든 어시스턴트 응답에 대해 전체 <think> 블록을 보존하는 반면, 이전 메시지에 대해서는 이를 제거합니다.

이 동적인 접근 방식은 다음과 같은 몇 가지 기술적 이점을 제공합니다:

  • Active plan preservation: 모델은 다단계 도구 호출 중에 현재 계획을 계속 표시합니다.
  • Nested workflow support: 정보 손실 없이 중첩된 도구 워크플로우에 대한 문맥을 유지합니다.
  • Token efficiency: 모델이 더 이상 필요하지 않은 추론 블록을 제거하여 토큰을 절약합니다.
  • Noise reduction: "stale" 추론이 새로운 작업에 방해되지 않도록 방지합니다.

개선된 도구 인자 직렬화

Qwen-3는 이중 이스케이프를 방지하기 위해 도구 인자에 대한 타입 체크를 구현하여 도구 호출의 신뢰성을 향상시킵니다. 이전의 Qwen-2.5와 같은 모델에서는 입력이 이미 JSON 인코딩된 문자열인지 여부에 관계없이 모든 tool_call.arguments 필드가 | tojson 필터를 거쳤습니다. Qwen-3는 이제 인자가 이미 문자열인지 확인합니다. 만약 그렇다면, 이를 직접 출력하고, 입력이 문자열이 아닌 경우에만 | tojson을 적용합니다.

기본 시스템 프롬프트의 제거

기본 시스템 프롬프트(예: "You are Qwen, created by Alibaba Cloud. You are a helpful assistant")를 사용했던 Qwen-2.5 시리즈와 달리, Qwen-3 및 QwQ는 기본 시스템 프롬프트 없이 출시됩니다. 이러한 생략에도 불구하고, 모델은 사용자가 물어볼 때 자신의 제작자를 정확하게 식별할 수 있는 능력을 유지합니다.

Sources

관련

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch