Misc. bug: Claude Code does not work with Qwen3.8 27B out of the box with llama-cpp server

当通过 llama-server 为 Claude Code 提供 Qwen3.8-27B 模型支持时,会因 Qwen3 系列模板中的硬性断言(raise_exception)与 llama.cpp 的自动解析器生成器及 Claude Code 的多系统消息格式不兼容,导致返回 400 错误。优先排

快速结论:当通过 llama-server 为 Claude Code 提供 Qwen3.8-27B 模型支持时,会因 Qwen3 系列模板中的硬性断言(raise_exception)与 llama.cpp 的自动解析器生成器及 Claude Code 的多系统消息格式不兼容,导致返回 400 错误。优先排查并替换为去掉硬性断言的 Jinja 模板。

适用环境:llama.cpp(版本 0.1.0-dev build 10435,commit 9e40df63b,Clang 20.1.8),Windows 11,模型为 unsloth/Qwen3.8-27B-GGUF,使用 llama-server 的 –jinja 和 –chat-template-file 参数。

最快修复方案:暂无已验证的一键修复方案,但 Issue 评论者提供了一个经过测试的 Jinja 模板(见参考来源中的 Gist 链接),可优先尝试替换原始模板。该模板移除了非首位系统消息、缺失用户查询、未知角色等情况的硬性断言。

注意事项:该修复方案来自社区评论,并非官方正式确认的修复;评论者表示在其 PC 上测试通过,但未提供全面的跨平台验证。替换模板后,需确保正常对话(系统消息在前 + 用户消息)的输出与原始模板完全一致。

问题场景

用户在 Windows 11 上运行 llama-server 加载 Qwen3.8-27B 模型,并通过 –jinja 和 –chat-template-file 指定自定义聊天模板,同时配置 Claude Code 通过 Anthropic API 地址指向本地 llama-server。Claude Code 发送请求后,llama-server 返回 400 错误,无法生成任何 token。

报错原文

Unable to generate parser for this template. Automatic parser generation failed:
... raise_exception('System message must be at the beginning...'

同时,Claude Code 界面显示“Misc. bug: Claude Code does not work with Qwen3.8 27B out of the box with llama-cpp server”,并出现 HTTP 400 状态码。

原因分析

可能原因:Qwen3.8-27B 的原始 Jinja 模板包含多个 raise_exception 断言,例如“System message must be at the beginning”和“No user query found in messages.”。llama.cpp 在自动生成工具调用解析器时,会通过合成消息序列“探测”模板,而这些探测序列并不总是将系统消息放在开头。同时,Claude Code 发送的对话结构也可能触发这些断言。因此,模板在生成任何 token 之前就抛出了异常,导致 400 错误。此问题在 Qwen3 系列模板中属于已知问题,与 llama.cpp 的解析器重构(PR #18675)相关。

环境排查

  • 确认 llama.cpp 版本是否为 Issue 中报告的 build 10435(commit 9e40df63b)或更新版本。
  • 确认操作系统为 Windows 11(其他平台未在 Issue 中验证)。
  • 检查 Claude Code 的 settings.json 中 ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENANTHROPIC_MODEL 等环境变量是否正确设置。
  • 确认为本地模型指定的 --chat-template-file 路径存在且内容为原始 Qwen3.8-27B 模板。

解决步骤

  1. 下载或复制评论者提供的修复版 Jinja 模板(参考来源中的 Gist:https://gist.github.com/sudoingX/c2facf7d8f7608c65c1024ef3b22d431),保存为本地文件,例如 claude-code.jinja
  2. 重启 llama-server,使用命令行参数指定修复版模板:
    llama-server -m your-model.gguf --jinja --chat-template-file /path/to/claude-code.jinja --host 127.0.0.1 --port 8080
  3. 确保 Claude Code 的环境变量中设置了 ANTHROPIC_BASE_URL=http://127.0.0.1:8080ANTHROPIC_AUTH_TOKEN=dummy(或任意非空值)和 ANTHROPIC_MODEL=your-model,否则 Claude Code 仍会提示登录。
  4. 如果修复版模板仍不生效,可尝试使用 Unsloth 发布的预修复模板(如 unsloth/Qwen3.5-35B-A3B 的 chat_template.jinja),社区反馈这些模板可直接通过 --chat-template-file 使用。

验证方法

启动 Claude Code(命令 claude),发送一条简单的测试消息(如“Hello”)。如果请求能正常返回模型生成的回复,且不再出现 400 错误或模板解析失败提示,则说明问题已解决。同时可查看 llama-server 的控制台日志,确认没有 raise_exception 相关报错。

参考来源

ggml-org/llama.cpp #27107

修复版 Jinja 模板 Gist

原始 Qwen3.8-27B 模板

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18940

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注