上週我在測一個圖片分類 pipeline,用的是某個 70B 的多模態模型。每張圖片丟進去,模型都要「深呼吸」想個十幾秒,輸出一大段 chain-of-thought,最後才吐出一個分類標籤。

問題是,八成的圖片根本不需要推理。一張貓的照片,你不需要「讓我仔細分析這張圖片的像素分佈和語義特徵」,你只需要說「貓」。

Microsoft 在 3 月 4 日開源的 Phi-4-reasoning-vision-15B,做了一件我認為比「更大更強」更有價值的事:教模型判斷什麼時候該思考,什麼時候不該。

15B 參數做到了什麼

先看數字。Phi-4-reasoning-vision-15B 在十個基準測試上的表現:

  • AI2D(科學圖表):84.8
  • ChartQA(圖表問答):83.3
  • MathVista(數學視覺推理):75.2
  • ScreenSpot v2(UI 元素定位):88.2
  • MMMU(綜合多模態理解):54.3

這些分數追不上 Qwen3-VL-32B,但跟同量級的 Qwen3-VL-8B 和 Kimi-VL-A3B 比,持平甚至領先。重點是,Qwen 家族的訓練資料量超過一兆 token,Phi-4-reasoning-vision 只用了約 2000 億。

訓練效率差了五倍。這不是靠堆資料堆出來的模型。

思考開關:<think><nothink>

架構上,Phi-4-reasoning-vision 用了 mid-fusion 設計:SigLIP-2 視覺編碼器把圖片轉成 visual token,投影到語言模型的嵌入空間,注入 Phi-4-Reasoning 語言骨幹。這部分不稀奇。

稀奇的是它的雙模式輸出機制:

1
2
3
4
5
6
7
8
9
10
11
# 需要推理的任務(數學、科學、邏輯)
<think>
這個三角形的底邊是 5,高是 3...
面積 = (5 × 3) / 2 = 7.5
</think>
答案:7.5

# 不需要推理的任務(圖片描述、物件偵測)
<nothink>
一隻橘色的貓坐在窗台上。
</nothink>

模型自己決定用哪個模式。遇到數學題、科學圖表、需要多步驟邏輯的問題,它啟動 <think> 模式,走完整的 chain-of-thought。遇到圖片描述、收據辨識、UI 元素定位這類感知型任務,它切到 <nothink> 模式,直接輸出結果。

這代表什麼?同一個模型,同一次部署,根據任務性質自動調整推理深度。 不需要你在應用層寫一堆 if-else 判斷「這個 request 要不要開 chain-of-thought」。

對開發者的實際影響

我拿一個常見場景來說明。

假設你在做一個文件處理系統,需要處理三種輸入:

  1. 掃描的發票 → 擷取金額和日期(感知任務)
  2. 財務報表圖表 → 分析趨勢和異常(推理任務)
  3. 手寫數學算式照片 → 計算答案(推理任務)

傳統做法,你可能需要:

1
2
3
4
5
6
7
8
9
10
# 傳統做法:應用層判斷 + 不同 prompt 策略
def process_document(image, doc_type):
if doc_type == "invoice":
# 不需要 CoT,直接擷取
prompt = "Extract amount and date from this invoice."
elif doc_type in ["chart", "math"]:
# 需要 CoT
prompt = "Think step by step. Analyze this image..."

return model.generate(image, prompt)

用 Phi-4-reasoning-vision 的思考開關機制,你的程式碼可以簡化成:

1
2
3
4
5
6
# Phi-4 做法:模型自己判斷
def process_document(image):
return model.generate(image, "Process this document.")
# 模型自動:發票 → <nothink> 直接擷取
# 圖表 → <think> 分步分析
# 算式 → <think> 逐步計算

少了一層分類邏輯,少了維護不同 prompt 的成本,少了分類錯誤導致推理模式不匹配的 bug。

15B 的部署優勢

這個模型跑得動筆電和手機。15B 參數量,量化後大約 8-10 GB 記憶體,一張消費級 GPU 就能跑。

對比一下目前主流的多模態推理模型:

模型 參數量 最低 GPU 需求 推理延遲
GPT-5.4 Vision 未公開(推測 >1T) API only ~2-5s
Qwen3-VL-32B 32B A100 40GB ~1-3s
Phi-4-reasoning-vision 15B RTX 4060 8GB ~0.5-1.5s

在邊緣設備上跑推理,延遲和成本的差異是數量級的。一個工廠品檢系統,每天處理十萬張圖片,用 API 和用本地 15B 模型的成本差距可能是每月幾千美金。

我認為這代表的趨勢

過去兩年,AI 模型的軍備競賽集中在「更大、更強、更多 token」。GPT-5.4 的百萬 token 上下文、Claude Opus 4.6 的深度推理、Gemini 3.1 的多模態整合——每一個都在往上堆。

Phi-4-reasoning-vision 走了不同的路。它問的問題不是「怎麼讓模型推理得更深」,而是「模型怎麼知道什麼時候不需要推理」。

這個問題更難,也更實用。

在生產環境裡,大部分 request 不需要深度推理。客服 chatbot 回答「你們幾點開門」不需要 chain-of-thought。圖片自動標籤不需要多步驟邏輯。表單 OCR 不需要數學推導。

但目前多數推理模型沒有這個判斷能力。你要嘛全開推理(浪費算力),要嘛在應用層手動判斷(增加複雜度),要嘛部署兩個模型分別處理(增加維護成本)。

Phi-4 的 think/nothink 機制把這個判斷內建到模型裡。我認為這會成為下一代模型的標配功能,不管模型大小。

值得注意的限制

MIT 授權,開源,HuggingFace 和 GitHub 都能下載。但有幾點要注意:

  1. MMMU 54.3 分不算高。 複雜的跨領域多模態理解還是大模型的天下。
  2. <nothink> 模式的判斷不是 100% 準確。 偶爾會把需要推理的任務誤判為感知任務,反之亦然。在高風險場景(醫療影像、法律文件),你可能還是需要強制開啟 <think> 模式。
  3. 訓練資料只有 2000 億 token。 在罕見語言和冷門領域的覆蓋度不如大模型。

動手試

如果你想在本地跑起來:

1
2
# HuggingFace 下載
pip install transformers accelerate
1
2
3
4
5
6
7
8
9
10
11
12
from transformers import AutoModelForCausalLM, AutoProcessor

model = AutoModelForCausalLM.from_pretrained(
"microsoft/Phi-4-reasoning-vision-15B",
torch_dtype="auto",
device_map="auto"
)
processor = AutoProcessor.from_pretrained(
"microsoft/Phi-4-reasoning-vision-15B"
)

# 丟一張圖片進去,觀察它自動選擇 think 或 nothink

Microsoft Foundry 上也有託管版本,不想折騰本地部署的可以直接呼叫 API。


模型越來越大是事實,但「知道什麼時候不需要動腦」這個能力,可能比「動腦能力更強」對實際應用的影響更大。Phi-4-reasoning-vision 不是最強的多模態模型,但它展示了一個我認為正確的方向:讓模型的推理資源花在真正需要的地方。