Qwen2.5-3B GGUF outputs garbage ASCII tokens (“@@@@@”, “!!!!”) for Chinese input on Windows — tokenizer mis-detects on CPU

此问题通常发生在 Windows 中文环境(GBK 代码页)下,使用 CPU 推理加载 Qwen2.5 GGUF 模型时,导致输出大量重复 ASCII 字符(如“@@@@@”“!!!!!”)。优先尝试升级 Ollama 版本至 0.32.6 或更高版本。

快速结论:此问题通常发生在 Windows 中文环境(GBK 代码页)下,使用 CPU 推理加载 Qwen2.5 GGUF 模型时,导致输出大量重复 ASCII 字符(如“@@@@@”“!!!!!”)。优先尝试升级 Ollama 版本至 0.32.6 或更高版本。

适用环境:已确认:Windows(PowerShell 5.1,控制台代码页 GBK 936)、Ollama 0.32.5(0.32.6 已由维护者验证可正常输出)、CPU 后端(无 NVIDIA GPU)、模型为官方 qwen2.5:3b 或基于其构建的 GGUF。

最快修复方案:升级 Ollama 至 0.32.6 或更高版本。在 0.32.6 中,同样在 CPU 上运行官方 qwen2.5:3b,输入“你好”可获得正常中文回复。

注意事项:该修复方案已验证于 Ollama 0.32.6,但尚未覆盖所有 Windows 本地化环境(如中文 GBK 代码页)或所有 GGUF 量化版本。非官方 GGUF 或特定量化格式(如 Q4_K_M)在更新后可能需复测。

问题场景

用户在使用 Ollama 0.32.5(Windows 10,CPU 后端)加载 Qwen2.5-3B 的 GGUF 模型(包括官方模型及本地微调版)时,用中文或英文提问均触发异常输出。交互式 ollama run qwen2.5:3b 输入“你好”后,模型输出一串“@@@@@”;HTTP API 请求则提示 prompt_eval_count 异常偏高(如英文输入 “Hello” 被计为 30 个 token),且输出同样为重复 ASCII 字符。

报错原文

Qwen2.5-3B GGUF outputs garbage ASCII tokens ("@@@@@", "!!!!") for Chinese input on Windows — tokenizer mis-detects on CPU
Case 1: 输出 "@@@@@@@@@@@@@@@@@@@@@@@@@@@"
Case 2: content "!!!!!!!!!!!!!!!!!!!!", prompt_eval_count:30, eval_count:20
Case 3: prompt_eval_count: 74 for 8 Chinese chars (expected ~10)
Log 片段:task.n_tokens = 1 (abnormal)

原因分析

可能原因:在 Windows 中文环境(GBK 代码页)下,Ollama 的 CPU 推理后端未能正确加载或使用模型的 tokenizer,导致输入被错误拆分(如 5 个 ASCII 字符被计为 30 个 token),产生大量无意义的重复 token。该问题与用户自定义模型或 Modelfile 无关,官方模型同样受影响。在 Ollama 0.32.6 中,维护者复测未复现,提示该问题可能是 0.32.5 的特定回归或环境相关(如 GBK 代码页与 UTF-8 处理的冲突)。

环境排查

  • 确认 Ollama 版本(ollama -v),检查是否为 0.32.5 或更早版本。
  • 检查操作系统类型及控制台代码页(chcp 命令),确认是否为 GBK 936。
  • 确认推理后端:是否为纯 CPU(无 NVIDIA GPU),或存在 AMD 显卡(如 Radeon R5 M315)时可能启用 Vulkan 混合加载。
  • 核对模型来源:官方 qwen2.5:3b 或自定义 GGUF 均需测试。
  • 确认输入编码:使用 UTF-8 无 BOM 格式发送 HTTP 请求,避免终端自动转码。

解决步骤

  1. 升级 Ollama 至 0.32.6 或更高版本,这是维护者已验证可解决此问题的方法,可优先尝试。
  2. 若升级后问题依旧,请检查并确保所有输入(无论是交互式还是 HTTP API)均采用 UTF-8 编码发送,避免 GBK 代码页干扰。
  3. 尝试更改系统控制台代码页为 UTF-8(如 chcp 65001),再运行 ollama run qwen2.5:3b 测试是否可以规避。
  4. 若仍失败,考虑强制使用 CPU 后端或更换其他量化版本(如 Q8_0)进行对比测试。
  5. 仍然无法解决时,尝试切换到 Linux/macOS 环境或在 Docker 中运行 Ollama,排除系统级编码问题。

验证方法

升级后运行 ollama run qwen2.5:3b,输入“你好”,观察输出是否为正常中文回复。同时可通过 HTTP API 发送请求,检查 prompt_eval_count 是否回落至合理数值(如中文“你好”应为 1-2 个 token),且输出内容不再为重复 ASCII 字符。

参考来源

ollama/ollama #17587

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21235

发表回复

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