用 llama.cpp b4000 加载自己量化的 qwen2 7B,问中文问题它回一堆带特殊符号的英文,温度调到 0 也只是把乱码固定下来,机器是 16G 内存的笔记本。
一开始怀疑是「上下文窗口设得过小,指令被截断只剩系统段」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。GGUF 的词表与模型权重不是同一次转换产物。少数情况下是量化时用了错误的 tokenizer 配置,特殊 token 编号错位。
不容易想到的是,模板未启用,模型没收到对话格式的包装。
第一件事是用内置对话模式启动再问一次
./llama-cli -m qwen2-7b-q4_k_m.gguf -p "你好" -cnv -ngl 99
然后检查词表大小与模型配置是否一致
python -c "import gguf;r=gguf.GGUFReader('m.gguf');print(r.fields['tokenizer.ggml.model'])"
剩下的就是换成官方发布的 GGUF 做对照
./llama-cli -m official-q4_k_m.gguf -p "你好" -cnv
恢复的判定其实很直接。中文问答能给出通顺回答,特殊 token 不再出现在输出里,同一提示在官方 GGUF 与自转文件上表现一致。
乱码优先怀疑词表和模板,再是量化精度,别先去调温度,参数救不回错位的词表。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
