froggeric/Qwen-Fixed-Chat-Templates
대화형 에이전트 프롬프트 렌더링과 툴 호출 포맷 정합성 보장 및 멀티턴 KV 캐시 동기화apache-2.0
Qwen 3.5/3.6용 단일 chat_template.jinja 파일로 Jinja 렌더링 오류와 KV 캐시 무효화, 에이전트 루프 정체, C++ 런타임 호환성 문제를 해결한다.
TL;DR
이 리포지토리는 Qwen 3.5 및 3.6 계열을 대상으로 한 단일 Jinja 템플릿으로서 다양한 추론 엔진에서 발생하던 렌더링 오류, KV 캐시 무효화, 토큰 낭비, 에이전트 루프 정체 문제를 해결하도록 설계되었다. 핵심 기법은 `<think>` 블록의 연대기적 보존과 경계 공백 정규화를 통해 로컬 KV 캐시와의 완전한 동기화를 달성하는 것, AST 평탄화와 minijinja 안전성 수정으로 C++ 런타임 파싱 병목을 제거하는 것, 그리고 연속 실패 카운터 기반의 두 단계 오류 에스컬레이션과 구조적 오류 검출로 무한 재시도 루프를 차단하는 것이다. 추가로 대용량 툴 페이로드를 제어하는 트렁케이션 설정과 JSON 오버라이드 옵션을 제공하되 JSON 모드에서는 트렁케이션을 자동 비활성화해 구조적 손상을 방지한다. 결과적으로 템플릿은 여러 엔진에서의 실무 호환성을 크게 개선하지만 JSON 모드 전환과 엔진별 구현 차이로 인해 일부 옵션은 환경별 테스트가 필요하다.
핵심 포인트
- 단일 chat_template.jinja 파일로 Qwen 3.5와 3.6 변형을 모두 처리하는 통합 접근을 취해 사용자가 엔진별로 별도의 템플릿을 유지할 필요를 없앴다. 이 통합은 템플릿 내부의 분기와 호환 레이어를 통해 각 엔진의 파싱 제약을 런타임 옵션으로 캡슐화한다. 그 결과 배포 복잡도가 낮아지고 유지보수 포인트가 단일화된다.
- minijinja 안전성 확보를 위해 Jinja 구문의 Python 전용 필터와 호출을 C++ 친화적 대체로 전면 개편했다는 점에서 C++ 추론 환경과의 실사용 호환성이 강조된다. 구체적으로 `replace` 기반 대체를 `split|join` 방식으로 바꾸고 `loop.previtem` 같은 비호환 API를 명시적 인덱싱으로 대체했다. 이 차별화는 llama.cpp와 같은 엔진에서의 크래시·무응답 문제를 예방한다.
- 툴 콜 처리 흐름에서 구조적 검증과 두 단계 오류 에스컬레이션을 결합해 단순 재시도만으로는 해결되지 않는 에이전트 루프 병목을 직접 표적으로 설정했다는 점이 특징이다. 길이 기반 필터와 구조적 매칭은 오탐을 줄이면서 실패 시의 행동 변화를 정밀하게 제어한다. 이 방식은 기존의 broad substring 매칭에서 발생하던 반복 실패 루프를 근본적으로 축소한다.
- 템플릿은 다양한 추론 엔진 환경에서 호환성을 맞추는 실용적 접근을 취해 LM Studio, llama.cpp, vLLM, MLX 등에서 동작하도록 설계되었다. 문법적 호환성 확보와 minijinja 안전성 보장을 통해 C++ 런타임에서 발생하던 크래시를 방지한다. Apache-2.0 라이선스로 상업적 사용과 수정이 자유로운 점도 실무 적용 관점에서 장점이다.
1.7k
LIKES
0
DOWNLOADS
2 / 0
조회수
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.