快速结论:当通过 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_URL、ANTHROPIC_AUTH_TOKEN和ANTHROPIC_MODEL等环境变量是否正确设置。 - 确认为本地模型指定的
--chat-template-file路径存在且内容为原始 Qwen3.8-27B 模板。
解决步骤
- 下载或复制评论者提供的修复版 Jinja 模板(参考来源中的 Gist:https://gist.github.com/sudoingX/c2facf7d8f7608c65c1024ef3b22d431),保存为本地文件,例如
claude-code.jinja。 - 重启 llama-server,使用命令行参数指定修复版模板:
llama-server -m your-model.gguf --jinja --chat-template-file /path/to/claude-code.jinja --host 127.0.0.1 --port 8080 - 确保 Claude Code 的环境变量中设置了
ANTHROPIC_BASE_URL=http://127.0.0.1:8080、ANTHROPIC_AUTH_TOKEN=dummy(或任意非空值)和ANTHROPIC_MODEL=your-model,否则 Claude Code 仍会提示登录。 - 如果修复版模板仍不生效,可尝试使用 Unsloth 发布的预修复模板(如
unsloth/Qwen3.5-35B-A3B的 chat_template.jinja),社区反馈这些模板可直接通过--chat-template-file使用。
验证方法
启动 Claude Code(命令 claude),发送一条简单的测试消息(如“Hello”)。如果请求能正常返回模型生成的回复,且不再出现 400 错误或模板解析失败提示,则说明问题已解决。同时可查看 llama-server 的控制台日志,确认没有 raise_exception 相关报错。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


