Qwen 3.5 도구 호출 에이전트 사용 개선: 서버 상태 및 클라이언트 측 해결 방법

Qwen 3.5 에이전트 환경에서의 도구 호출 버그
코딩 에이전트나 함수 호출 루프와 같은 에이전트 환경에서 Qwen 3.5 모델을 실행할 때, 네 가지 특정 버그로 인해 도구 호출이 완전히 실패할 수 있습니다.
네 가지 핵심 버그
- XML 도구 호출이 일반 텍스트로 유출됨: Qwen 3.5는 도구 호출을 XML 형식(예: <function=bash><parameter=command>ls</parameter></function>)으로 출력합니다. 서버가 이를 파싱하지 못할 때—특히 텍스트가 XML 앞에 있거나 사고 기능이 활성화된 경우—도구 호출이 finish_reason: stop과 함께 원시 텍스트로 도착하여 에이전트가 실행하지 못합니다.
- <think> 태그가 텍스트로 유출되어 컨텍스트를 오염시킴: llama.cpp는 enable_thinking: false 설정과 관계없이 내부적으로 thinking=1을 강제 적용하여, 태그가 여러 턴에 걸쳐 누적되고 다중 턴 세션을 파괴합니다.
- 잘못된 finish_reason: 서버가 도구 호출이 존재할 때 "stop"을 전송하여 에이전트가 이를 최종 응답으로 처리하게 합니다.
- 비표준 finish_reason: 일부 서버는 "eos_token", "", 또는 null을 반환하여, 대부분의 프레임워크가 도구 호출 존재 여부를 확인하기 전에 알 수 없는 값으로 인해 충돌합니다.
서버 상태 (2026년 4월)
원본은 주요 추론 서버에 대한 상세 상태 표를 제공합니다:
- LM Studio 0.4.9: XML 파싱을 위한 최고의 로컬 옵션(v0.4.7에서 수정됨), 사고 유출 처리 개선, 일반적으로 정확한 finish_reason.
- vLLM 0.19.0: --tool-call-parser qwen3_coder 플래그와 함께 작동, 스트리밍 버그 존재, 사고 유출 수정됨, 일반적으로 정확한 finish_reason.
- Ollama 0.20.2: 닫히지 않은 </think> 버그 수정 이후 개선됨, XML 파싱에서 여전히 불안정, 때때로 잘못된 finish_reason.
- llama.cpp b8664: 파서가 존재하지만 사고 기능이 활성화된 경우 실패, 사고 유출 고장, 파서 실패 시 잘못된 finish_reason.
권장 솔루션
도구 인수에서 |items 필터 실패와 같은 알려진 문제가 있는 기본 Qwen 3.5 Jinja 템플릿 대신 Unsloth GGUFs를 사용하세요. Unsloth는 21개의 템플릿 수정 사항을 포함합니다.
서버가 놓친 부분을 포착하는 세 가지 작은 함수로 클라이언트 측 안전망을 추가하세요. 원본은 첫 번째 함수를 제공합니다:
import re, json, uuid
1. 텍스트 콘텐츠에서 Qwen XML 도구 호출 파싱
def parse_qwen_xml_tools(text):
results = []
for m in re.finditer(r'<function=([\w.-]+)>([\s\S]?)</function>', text):
args = {}
for p in re.finditer(r'<parameter=([\w.-]+)>([\s\S]?)</parameter>', m.group(2)):
k, v = p.group(1).strip(), p.group(2).strip()
try:
v = json.loads(v)
except:
pass
args[k] = v
이 함수는 서버가 XML을 제대로 파싱하지 못할 때 텍스트 콘텐츠에서 도구 호출을 추출하여, 에이전트 워크플로우를 위한 대체 메커니즘을 제공합니다.
📖 전체 원본 읽기: r/LocalLLaMA
👀 See Also

클로드 코워크를 위한 커스텀 스킬 제작: 모범 사례와 형식
Claude Co-Work의 새로운 기능과 최근 스킬 업데이트를 통해 개발자들은 플랫폼 내 워크플로우를 향상시키기 위한 맞춤형 스킬 제작을 탐색하기 시작했습니다. 한 사용자는 Claude Co-Work를 효과적으로 활용하기 위한 여정을 공유하며, 새로운 스킬을 작업 환경에 통합하는 데 필요한 올바른 파일 형식과 배포 전략을 이해하는 것의 중요성을 강조했습니다.

OpenClaw를 원활한 에이전트 간 통신을 위해 구성하기
레딧 사용자가 OpenClaw의 에이전트 간 통신에서 타임아웃을 줄이는 특정 구성 설정을 공유했습니다. 여기에는 도구 가시성 설정, 메모리 지시사항, 그리고 ANNOUNCE_SKIP 제한을 우회하는 방법이 포함됩니다.

ClaudeBusiness Repo: 클로드 코드로 실제 비즈니스 운영하는 패턴
창업자들이 서비스 에이전시와 솔로 SaaS 비즈니스를 운영하기 위해 Claude를 사용하는 35개 이상의 Reddit 스레드에서 실용적인 패턴, 프레임워크 및 안전장치를 수집한 GitHub 리포지토리입니다.

클로드 코드 오케스트레이터가 유용하기 위해 필요한 4가지
Claude Code 오케스트레이터를 구축한 개발자의 실용적인 팁: 미션 문서, 하트비트, 에이전트 간 통신, 감사 가능한 제어.