前言:當「單次提示完美」遇上「多輪對話崩潰」

最近 r/LocalLLaMA 上有一篇帖子引發了廣泛共鳴——一位使用者在 RTX 6000 上跑 Qwen 3.6 27B,發現它在單一提示(single prompt)下表現驚人,能輸出漂亮的 HTML 頁面、生成长內容;但一旦進入 Agentic Work(多輪工具呼叫代理工作),每四輪左右就會出現一次「完全腦死」的行為:亂改檔案、跳錯路徑、重複走相同流程……

「它在單次提示下很優秀,但在 agentic work 中絕對崩潰。每隔幾輪就做一件完全腦殘的事。」

這篇文章的討論串長達數百則回覆,匯聚了數十位在地端部署 Qwen 系列模型的實戰經驗者。今天我們就來系統性地整理:Qwen 3.6 27B 在 Agentic Work 中為什麼會崩潰?核心原因是什麼?又該如何修復?

- 廣告 -

一、問題全貌:什麼叫「四輪腦死」?

根據原始帖者的描述,典型的崩潰行為包括:

症狀具體表現
工具呼叫失敗多工具呼叫時產生 malformed JSON,污染後續 context
思考區塊洩漏</think> tag 遺失,導致 reasoning block 跨輪堆積
路徑跳躍突然 cd / 到根目錄、讀取不存在的 .tokenring/linters/ 路徑
內容覆蓋錯誤無視指導原則,直接覆寫既有文件
循環執行的重複走相同決策路徑,無法自我修正

最關鍵的觀察是:這些問題不是隨機的,而是系統性的。 一位 vLLM 開發者指出:「每當模型有自由選擇工具/格式/參數的機會,就等於多擲一次骰子;8-12 輪之後,你幾乎保證會遇到一次壞結果。」

二、五大核心原因解析

1. preserve_thinking 未啟用(最常見的原因)

Qwen 3.6 是首批原生支援「思考過程跨輪保留」的模型之一。預設情況下,如果沒有設定 preserve_thinking=true,模型在每一輪都會忘記自己上一輪的思考結論,導致它重複走相同的路徑、做出相同的錯誤決策。

多位使用者證實:只要加上 preserve_thinking=true,「腦死」頻率從每四輪一次降到幾乎看不見。

「沒有 preserve thinking 的話,模型會以為每一輪都是全新的開始——它根本不知道上一輪已經得出了什麼結論。」

但要注意: Qwen 3.6 的原始 chat template 有一個 bug,即使設定了 preserve_thinking=true,舊版模板仍然無法正確處理 interleaved thinking(思考與工具呼叫交錯)的情況。這就引出了第二個關鍵原因。

2. Chat Template 不匹配

Qwen 3.6 的推理模式跟 3.5 不同——它會在同一個回應中交錯輸出思考區塊和工具呼叫。原始 template 無法正確處理這種情況,導致:

  • </think> closing tag 遺失
  • 後續輪次的 context 被 reasoning block 污染
  • KV cache 無效化(cache invalidation)

社群貢獻者 froggeric 修復了這個問題,提供了 Qwen-Fixed-Chat-Templates ,支援所有主流推理框架(llama.cpp、vLLM、MLX 等)。另一位貢獻者 Allan Chan 則進一步推出了 qwen3.6-enhanced.jinja ,專門處理 CoT leakage(思考洩漏)問題。

核心修復邏輯: 在渲染 tool call 之前,檢查是否有未關閉的 </think> tag——如果有,自動補上 closing tag,確保工具呼叫不會被困在 reasoning block 裡面。

3. Tool-call Parser 不正確

另一位 vLLM 開發者指出了一個常被忽視的問題:

「當我用 XML tool-call parser 時,多工具呼叫的回合會產生 malformed JSON。這些垃圾被 replay 到下一輪 context,看起來就像模型突然發瘋。」

Qwen 3.6 支援兩種 tool-calling 格式:

  • XML 格式(預設):<tool_call>tool_name[ARGS]...[/tool_name]
  • Qwen3 Coder 格式:專門針對 coding agent 優化的 parser

選擇錯誤的 parser 會直接導致工具呼叫解析失敗,進而污染後續輪次。

4. Quantization 過低 + KV Cache 精度不足

多位使用者提到一個關鍵細節:KV cache 的量化格式對 Qwen 3.6 特別敏感。

KV Cache 設定效果
--cache-type-k q8_0 --cache-type-v q8_0✅ 穩定,推薦
--kv-unified(預設)⚠️ 可能導致長期運行漂移
FP8 KV cache(無 prefix caching)❌ 每輪浮點誤差累積,模型表現不一致

一位使用者分享:「即使啟用了 preserve thinking、換了修復 template、加了 --swa-full,27B Q8 還是會產生 ‘Sampling Configuration’ 這種奇怪輸出。換成 Q5_K_XL 後才穩定。」

核心原則: Agentic work 對 quantization 敏感度遠高於一般對話。Q4 在 coding agent 中尚可接受,但超過 6-8 bit 的量化(如 FP4、低品質 MXFP4)會顯著降低多輪可靠性。

5. Harness / Agent Framework 不匹配

最後一個常被忽視的原因:你用的 agent harness 可能不是為小模型設計的。

Qwen 3.6 27B 的推理能力在「特定場景下」可以接近 Claude Sonnet 等級,但它不像 122B 那樣有足夠的參數來容錯。一個過度複雜的 system prompt、太多 tool definitions、或沒有做好 context 管理的 harness,都會讓小模型迅速超載。

三、完整修復方案(從高到低優先級)

以下按影響程度排序,建議依序嘗試:

🥇 Level 1:Chat Template + preserve_thinking(必做)

llama.cpp:

./build/bin/llama-server \
  -m Qwen3.6-27B-Q8_K_XL.gguf \
  --jinja \
  --chat-template-file /path/to/qwen3.6-enhanced.jinja \
  --temp 0.6 --top-p 0.95 --top-k 20 \
  --cache-type-k q8_0 --cache-type-v q8_0 \
  --ctx-size 131072 \
  --flash-attn on

vLLM:

vllm serve Qwen3.6-27B \
  --chat-template /path/to/qwen3.6-enhanced.jinja \
  --default-chat-template-kwargs '{"preserve_thinking": true}' \
  --enable-prefix-caching

關鍵參數說明:

  • --jinja:啟用 Jinja template(Qwen 3.6 需要)
  • --chat-template-file:指定修復後的 template
  • preserve_thinking: true:保留思考過程跨輪
  • --cache-type-k q8_0 --cache-type-v q8_0:高品質 KV cache
  • --enable-prefix-caching:穩定 system prompt 的 KV cache(對 agent loop 至關重要)

🥈 Level 2:Sampling Parameters 調整

Qwen 官方提供的 sampling 參數是針對「思考模式」優化的。Agentic work 建議設定:

參數推薦值說明
temperature0.6平衡創造力與一致性
top_p0.95避免過低(太死板)或過高(不穩定)
top_k20限制候選詞範圍
min_p0.0預設即可
repeat_penalty1.0防止重複模式
presence_penalty1.5(可選)鼓勵探索新工具/動作

🥉 Level 3:Quantization 選擇

根據社群實測,推薦的 quant 順序:

Quant 等級推薦度VRAM 需求備註
Q8_K_XL( Unsloth UD)⭐⭐⭐⭐⭐~18 GB最穩定,agentic work 首選
Q6_K(Bartowski/Unsloth)⭐⭐⭐⭐~14 GB性價比最佳
Q5_K_XL / Q5_K_S⭐⭐⭐⭐~12 GB適合 VRAM 有限的場景
Q4_K_XL(Unsloth UD)⭐⭐⭐~10 GB可用但需要更多 tweaking
FP8(官方)⭐⭐⭐~16 GB需搭配 prefix caching
FP4 / 低品質 MXFP4~8 GBAgentic work 不推薦

🏅 Level 4:MTP(Multi-Token Prediction)設定

如果你使用 MTP quantized 版本,draft token 數量需要微調:

--spec-type draft-mtp --spec-draft-n-max 6

多位使用者反映:--spec-draft-n-max 超過 6 之後速度開始下降,品質反而變差。 建議從 4-6 開始測試。

另外一個有趣的發現:有使用者報告 關閉 thinking(enable_thinking: false)+ MTP 的組合在某些場景下比開啟 thinking 更穩定——特別是當模型容易陷入過度思考循環時。這取決於你的具體工作負載。

🎖️ Level 5:Harness / Agent Framework 選擇

對於 27B 等級的模型,社群普遍建議使用輕量級 harness

Harness適合度備註
Pi Agent⭐⭐⭐⭐⭐極簡工具集、context 控制精確
Hermes Agent⭐⭐⭐⭐對 Qwen 有良好支援,但需調整 system prompt
OpenCode⭐⭐⭐⭐需要手動優化 template 和 tool parsing
Claude Code(via API)⭐⭐⭐可跑長 context,但速度較慢

核心原則: 「任何程式碼能確定性處理的事,就不要問模型。」——一位使用 Qwen 35B-A3B MoE 的開發者總結道。用 GBNF grammar constrained(解碼時強制工具名稱和參數格式)、deterministic repair layer(執行前自動修正錯誤)、以及將大任務拆成小 context 的子 agent,可以大幅提升可靠性。

四、進階技巧:Prefix Caching 與 FP8

如果你使用 vLLM 並開啟 --enable-prefix-caching,會有一個隱藏的穩定性提升效果:

沒有 prefix caching 時,system prompt 的 KV cache 在每次請求時都會重新計算——由於 batching effects 和 kernel-level floating-point non-determinism,每次重算產生的 K/V tensor 會有微小差異。

開啟 prefix caching 後,system prompt 的 K/V tensor 被快取並重複使用,模型從完全相同的內部表示開始每一輪。這就是「stable」的真正含義。

FP8 quantization 在沒有 prefix caching 時會加劇這個問題(每次重算經過低精度運算,誤差累積),但開啟 caching 後 FP8 的 K/V tensor 被凍結,反而能獲得一致的表現。

五、27B vs 122B:到底該選哪個?

這是討論串中最激烈的爭議之一。讓我們客觀比較:

維度Qwen 3.6 27BQwen 3.5 122B-A10B
VRAM(Q8)~18 GB~62 GB
VRAM(Q4)~10 GB~30 GB
硬體門檻RTX 3090/4090 即可需 A100/H100 或 2x RTX 6000
Agentic 可靠性需要 tweaking更 resilient
Context rot~60K tokens 開始下降~180K tokens 仍穩定
單次生成品質⭐⭐⭐⭐⭐⭐⭐⭐⭐
多輪工具呼叫⭐⭐⭐(需優化)⭐⭐⭐⭐⭐

結論: 如果你只有一張 consumer GPU(3090/4090),27B 是唯一選擇,但需要花時間調校。如果你有 A100/H100 或雙 RTX 6000,122B 在 agentic work 中的表現明顯更穩定、context rot 更少。

六、總結:一套立即可用的配置範例

以下是社群實測驗證過的一套完整配置(適用於 llama.cpp + Qwen 3.6 27B):

./build/bin/llama-server \
  -m unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q8_K_XL \
  --jinja \
  --chat-template-file /path/to/qwen3.6-enhanced.jinja \
  --host 0.0.0.0 --port 11434 \
  --no-mmap \
  --flash-attn on \
  --cache-type-k q8_0 --cache-type-v q8_0 \
  --ctx-size 131072 \
  --spec-type draft-mtp --spec-draft-n-max 6 \
  --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.0 \
  --repeat-penalty 1.0 \
  --reasoning-budget 8192 \
  --presence-penalty 1.5

搭配 preserve_thinking=true(透過 chat template kwargs),這套配置已經能讓 Qwen 3.6 27B 在 agentic work 中穩定運行數百輪而不崩潰。


最後一句真心話: Qwen 3.6 27B 不是「不夠聰明」,而是它的參數量決定了它需要更精細的 harness 來吸收不確定性。把可靠性從模型本身移到模型周圍的工程架構上——這才是讓小模型在 agentic work 中發揮潛力的關鍵。

- 廣告 -

參考資源

原文來源:r/LocalLLaMA - Qwen 3.6 27B absolutely fails at agentic work