一句話切換 AI:模型下拉的正確用法
前面三章講完了為什麼要多接幾家 AI、六家 provider 各適合什麼場合、reasoning 模型是什麼。這一章走實務:對話開到一半,怎麼一按就換另一顆腦子繼續講。學完你就能在同一個 Session 裡玩「便宜快出草稿 → 貴的深模型 code review」這種組合技,也知道切換的時候什麼會保留、什麼會不見。
為什麼「切模型」是日常必備動作
第 10 章告訴你「一家不夠用」,第 11 章幫你把六家 provider 排成一張速查表,第 12 章解釋了為什麼有些模型「會先想一輪」。這些都是「知」的部分。但真正把 AI 用起來的關鍵,是「行」——你要能在同一場對話裡,一句話換一顆腦子繼續講。
舉一個很日常的場景:你問 GLM-4-Flash「幫我寫一個晚上關燈的自動化」,30 秒就給你一個 YAML。你直覺覺得「好像有點粗糙,這樣寫真的穩嗎?」——這時候你不用開新的 Session、也不用把整段複製貼到另一個工具,只要在 composer 那排工具列找到模型按鈕、點一下、選 Anthropic Claude Sonnet、追問一句「請 review 上面那段自動化有沒有問題」,Claude 就會把整場對話(包含 GLM 的答案)當成上下文,直接給你意見。這種「先便宜快出草稿,再用深模型審一輪」的做法,是社群常見的省錢組合技(能不能真的省 60-80%,看你的 prompt 長度與模型選擇,不是保證數字,是實作經驗值)。
學完這章,你會知道三件事:怎麼切、切了會發生什麼、什麼時候該切什麼時候該開新 Session。
模型下拉在哪、切了是什麼時候生效
模型下拉的位置第 4 章已經指過:在 composer(打字區)下方的工具列(toolbar)上,長得像一個帶小箭頭的按鈕,上面通常顯示你目前使用的模型名稱(例如「GLM-4-Flash」、「Claude Sonnet 4.5」,或如果還沒選模型就顯示提示字)。確切位置會隨版本/主題不一樣——上游 pi-web 的 toolbar 順序(附件、模型、skill、語音、送出)是可設定的,你眼前的按鈕可能在左邊、也可能被排到中間,看模型名字認就對了。點一下會彈出一個 popover 清單,把你在 Models 面板加過的 provider 底下、目前可用的模型都列出來(清單支援搜尋,直接打字就會過濾)。
它的行為有兩個關鍵點:
- 切了立刻生效,但不會回頭重跑——你選了新模型,下一句送出去就是用新模型答;之前已經送出去的訊息不會重新問一次、AI 已經給的答案也不會消失。也就是說「切模型」不會扣你之前那些對話的錢。
- 整場對話一起送給新模型——新模型接手第一句時,它會把「這場 Session 從第一句到你剛剛那句」全部當成 input tokens 讀一次。所以它接得住前面的話題,但也表示 input tokens 會多算一輪。這一點在後面的「隱藏成本」段會展開。
動手切一次:從 GLM-Flash 切到 Claude 做 review
假設你已經照第 5 章接了 GLM、也照附錄 B再多接一家 Anthropic(Claude)。現在來玩一次 draft-then-review。
-
開一個新的 Session,把模型下拉切到 GLM-4-Flash
左上角按 + New session(按鈕字樣視語系而定),畫面清空。到 composer 下方那排工具列找到模型按鈕(顯示目前模型名字的那顆),點下去,找 GLM 那一組,選
glm-4-flash(或你熟悉的便宜快模型)。按鈕上的字會變成「GLM-4-Flash」。 -
問一個真的家庭問題,讓它給你草稿
打字框輸入:「幫我寫一個 Home Assistant 自動化,晚上 11:30 把客廳所有燈關掉,如果那時候還有人在客廳就等 10 分鐘再關。」按送出。GLM-4-Flash 大概 20-40 秒會給你一段 YAML,可能包含
triggers、conditions、actions。 -
看完覺得「不知道穩不穩」,就切到 Claude Sonnet
不要清畫面、不要開新 Session。就在原本的對話裡,把模型下拉點開,這次選 Anthropic 底下的
claude-sonnet-4-5(或當前 Sonnet 最新版)。按鈕上的字變成「Claude Sonnet 4.5」。 -
追問一句:請它 review 前面的答案
在打字框輸入:「請 review 上面那段自動化,有沒有邏輯漏洞、有沒有踩到 HA 常見雷(例如 device_id 陷阱、mode 選錯、entity_id 不存在的偵測)?」按送出。Claude 會把整場對話(包含你的問題+GLM 的 YAML+你這句 review 請求)一起讀進去,然後給你逐條意見。
-
看兩家答案的差異,決定哪個要用
Claude 通常會指出幾件事:GLM 用了
device_id而不是entity_id(第 8 章提過的雷)、mode應該用restart而不是預設的single、triggers/conditions/actions 有沒有寫成新版的複數形式。這一輪走完,你手上有一個「便宜模型草稿+深模型審稿意見」的完整包,可以直接改改就用。 -
(進階)想更省,切回 GLM 讓它照 Claude 的意見改
拿到 Claude 的意見後,你可以再把模型下拉切回
glm-4-flash,追問:「請照 Claude 剛剛的意見把 YAML 重新寫一次。」GLM 便宜、寫 YAML 也夠用,改稿這件事沒必要一直花 Claude 的錢。這叫做 三段式切換:draft (Flash) → review (Sonnet) → rewrite (Flash),是熟手的日常。
切換的三種常見情境
切模型不是隨便切,通常你會落在下面三種模式的其中一種。認清楚自己這一次是哪一種,效率跟花費會差很多。
| 情境 | 怎麼切 | 什麼時候用 | 典型花費 |
|---|---|---|---|
| draft-then-review(先草稿再審稿) | 便宜快模型出第一版 → 切深模型做 code review → 可選擇再切回便宜模型改稿 | 寫自動化、寫腳本、寫 email、任何「有標準答案但要小心細節」的產出 | 比全程用深模型省很多(實測範圍常見 50-80%,看對話長度),比全程用便宜模型可靠得多 |
| 深挖某段(zoom in) | 日常閒聊用便宜模型 → 聊到某段突然想深入(例如問到冷氣噸位計算、線材耐流) → 切 reasoning 模型追問 → 追問完切回便宜模型繼續 | 對話中出現一個需要「認真想」的分支,但整場不需要都用深模型 | 只在深挖那 2-3 則多花錢,前後閒聊維持便宜 |
| 同題比對(A/B) | 問完問題拿到答案 A → fork 這個 session 一份(第 8 章教過)→ 在 fork 出來的那份切另一家 provider → 送同一個問題拿到答案 B → 兩個視窗放旁邊比 | 買房裝潢類重要決策、學術性問題、想看不同模型會不會有偏見 | 兩家各花一份,但省下自己來回試錯的時間 |
切換的隱藏成本:input tokens 會重算
這是很多人第一個月被帳單嚇到的原因。切模型看起來只是點一下下拉,但每切一次,新模型接手第一句的時候都會把整場對話從第一句到目前為止全部當 input tokens 讀一次。原因很簡單——它是新來的,之前的對話它沒看過,你要它接話就得先把上下文塞給它。
拿一個例子算一下。假設你的對話目前累積了 5,000 tokens(大約 15-20 則往返),你在同一場 session 切了 4 次模型:
| 動作 | 累積對話 tokens | 這一次切換要重讀的 input tokens | 備註 |
|---|---|---|---|
| 第 1 次切(Flash → Sonnet) | 5,000 | 5,000 | Sonnet 第一次接手 |
| Sonnet 回了 500 tokens,你又切回 Flash | 5,500 | 5,500 | Flash 也要從頭讀一次(它不記得剛剛是自己講的) |
| Flash 回了 400,你切 GPT-4o | 5,900 | 5,900 | 又一輪 |
| GPT 回了 600,你切回 Sonnet | 6,500 | 6,500 | Sonnet 之前接手過但 pi-web 不會「記住」它,仍會重讀 |
| 總計切換成本 | — | 22,900 input tokens | 還沒算輸出的 tokens |
對比:如果你一路用 Flash 講到底,只有你送出的那幾則會累加 input,沒有「重讀」的成本。切模型的錢就是花在「新腦子讀舊對話」這件事上。
切模型 vs 開新 Session vs Fork:三個選擇怎麼分
「換一顆腦子繼續講」不是只有切模型下拉這一招。實務上你有三個操作可以選,各自的用途不一樣:
| 操作 | 之前對話發生什麼 | 新模型知道舊事嗎 | 什麼時候用 |
|---|---|---|---|
| 切模型下拉 | 完整保留在同一場 session | 知道(會把整場當 input 讀一次) | 要另一顆腦子接續同一個話題,例如 review、繼續深挖 |
| 開新 Session(+ New session) | 留在左邊列表,但新對話完全空白 | 不知道(完全從零開始) | 換一個完全不相干的話題、或想要模型不受之前對話影響給乾淨的答案 |
| Fork Session(第 8 章) | 從當前這一則分岔出一份完整副本 | 知道(新分支包含分岔點以前的所有內容) | 想試「如果剛剛不是這樣答會怎樣」、想 A/B 比對、想保留原對話同時走另一條路 |
用一個買冷氣的例子區分:
- 切模型:你問 Flash「客廳 6 坪要選幾噸冷氣」,它給你 1 噸。你切 Claude 追問「請 review 這個建議」——同一場對話,Claude 順著往下講。
- 開新 Session:你 Flash 給完答案,滿意收工。三天後想問「冷氣噪音怎麼比較」,這跟前面的坪數討論無關,開新 Session 更清爽。
- Fork:你想同時看 Flash 跟 Claude 對「1 噸夠不夠」的看法,但你不想失去 Flash 那條線。就 Fork 一份、在 fork 裡切 Claude、送同一個問題,兩個視窗並排比。
有些切換會「隱形失敗」:thinking blocks 被丟掉
第 12 章提過,Anthropic 的 Claude 用的是「native thinking blocks」——那些思考內容是模型回應裡真正的一段結構化資料,不只是文字。相對地,OpenAI-compatible 的 provider(GLM、DeepSeek、Groq、OpenRouter 等)沒有這個結構,只有純文字答案。
這造成一個容易踩到的雷:從 Claude 切到任何 OpenAI-compatible 模型時,先前 Claude 的 native thinking blocks(結構化欄位)沒辦法照原格式塞進新 provider 的 messages 陣列——具體是「整段被丟掉」還是「被扁平化成純文字附在正文前」,會看 pi-web 那一版怎麼序列化 transcript,兩種情況都遇過。實務上你就當成「新模型看到的 context 跟 Claude 當時看到的不會完全一樣」。如果你之前的對話很依賴那段思考內容(例如你有一則訊息是「請照你剛剛想的步驟繼續」),新模型有機率答得莫名其妙。
| 切換路徑 | thinking blocks 會保留嗎 | 建議做法 |
|---|---|---|
| Claude → Claude(換一個 Claude 型號) | 會保留 | 放心切 |
| Claude → GLM / DeepSeek / GPT / 任何 OpenAI-compatible | 結構化欄位保不住(可能整段被丟掉、也可能被壓成純文字附在正文前,看版本) | 如果對話依賴那些思考內容,建議用 Fork 分岔而不是直接切;或者切之前先請 Claude 把思考過程「明文寫進正文」再切 |
| GLM 有 reasoning 內容 → 切 Claude | reasoning 內容是純文字,會被讀到(但格式跟 Claude 原生的不一樣,可能被當成一般敘述) | 大多沒問題,Claude 會當成前文脈絡 |
| 任一 reasoning 模型 → 非 reasoning 模型 | reasoning 內容還在,但新模型不會啟動自己的 reasoning | 沒關係,只是新模型不會再自己想一輪 |
快速切換的鍵盤與滑鼠技巧
如果你會頻繁切模型(例如做 draft-then-review 是你的日常),下面幾個小技巧會讓你省滑鼠移動:
- 下拉裡直接打字搜尋:模型下拉打開後,上方就是 search 輸入框(pi-web 用 Command combobox 實作)。打「son」清單會自動過濾到 Sonnet 系列,Enter 選中。手指不用離開鍵盤。
- Cmd/Ctrl+K 命令面板:pi-web 內建的 command palette 目前是給 Skill/擴充命令 用的(例如
/skill、/help),不是模型快速切換器;也沒有官方的「Cmd+K 切模型」快捷鍵。想快速切模型,用上一條「打開下拉直接打字」的做法就好。 - 幫模型取短名字:模型顯示的名稱來自
~/.pi/agent/models.json每個 model 條目裡的name欄位(第 6 章示範過的 JSON)。你可以直接編這個檔,把"name": "Claude Sonnet 4.5"改成"name": "深",下拉裡就會顯示短名字。目前的 UI 面板還沒有內建 alias 輸入欄位,要改就手動改 JSON。 - 預設模型:pi-web 的預設模型是靠
~/.pi/agent/settings.json的defaultModel/defaultProvider決定,或用環境變數PI_WEB_DEFAULT_MODEL強制指定(見附錄 A)。目前 composer 下拉裡沒有「Set as default」按鈕——想換預設,去改 settings.json 或環境變數,改完重新整理瀏覽器即生效。日常聊天型的模型(便宜快)適合設成 default。 - 把用不到的模型藏起來:接了 5-6 家 provider 之後下拉會很長。到 Models 設定面板可以用 provider visibility 欄位隱藏整家 provider,或勾掉單一模型(背後對應
hiddenModels清單),下拉就會乾淨很多。也可以用環境變數PI_WEB_HIDE_PROVIDERS直接砍掉整家。
切模型的常見卡關
-
切完下拉沒反應、AI 還是用舊模型回
三個地方檢查:(a)看模型下拉按鈕上顯示的字有沒有變成你選的那個——沒變就是根本沒切成功,可能你點下拉的時候手滑點到別的地方。(b)看你送出去的那則訊息,右上角通常會標記模型名稱,如果標記還是舊模型,代表你送出的時候還沒切生效。(c)打開瀏覽器 F12 開發者工具的 Console,看有沒有紅字(例如
models.json parse error),有的話代表模型設定檔壞了,回 Models 面板重新存一次。 -
切完之後 AI 答案突然變英文
某些 provider 的模型(尤其 Anthropic Claude、OpenAI GPT)預設偏好用英文答。切過去之後你追問中文,它可能還是用英文回。解法:在你切完後的第一句話裡明確加一句「請用繁體中文(台灣用語)回答」,之後這場 session 就會維持中文。這比重新切回中文友善的 GLM 划算。
-
切完之後跳「402 Payment Required」或「餘額不足」
402 代表這家 provider 的錢用完了。看錯誤訊息裡是哪家 provider(例如
anthropic: insufficient credits),你有兩條路:(1)回那家的官網後台儲值。(2)切回原本還有錢的 provider 繼續。你的對話還在,沒送成功的那則訊息重打一次就好,不會扣到已經花掉的錢。這一類錯誤 detail 在第 22 章還會展開。 -
切完發現「之前的思考塊不見了」或 AI 答非所問
這是前面 warning 段講過的「native thinking blocks 沒辦法跨 provider 帶過去」問題。你如果從 Claude 切到 GLM/DeepSeek 之類,Claude 那些結構化的思考塊在新 provider 看到的 context 裡不會是原本的樣子(可能不見、可能被壓成純文字),新模型看到的東西跟你以為它看到的不一樣。屬正常行為,不是 bug。補救做法:把想保留的關鍵思考內容自己複製一段貼到新訊息裡當上下文;或者下次遇到這種情境改用 Fork 而不是切換。
-
下拉裡完全沒有另一家 provider 的模型
代表你沒在 Models 面板加過那家。回第 6 章的做法再加一家:右上工具列點 Models → Add Provider → 選 provider → 貼 baseUrl 與 API key → 按 Test 綠燈 → 存檔。回到 composer,下拉就會多出這家的模型列表。
-
下拉列表模型太多,找不到想要的那個
接了 5-6 家 provider 之後下拉會很長(動輒 30-50 個模型)。三個做法:(a)在下拉打開後的搜尋框直接打模型名關鍵字(pi-web 用 Command combobox,全部型號都可搜)。(b)到 Models 設定面板用 provider visibility 隱藏整家 provider,或勾掉單一模型(背後對應
hiddenModels);也可以在 env 加PI_WEB_HIDE_PROVIDERS=xxx,yyy直接砍。(c)改~/.pi/agent/models.json每個 model 的name欄位取短名字,例如把「Claude Sonnet 4.5」改成「深」,找起來快。
常見問題
一場 Session 切太多次會不會出事?
切模型會影響對話品質嗎?新模型會不會答得比較差?
哪個模型是「預設模型」?我沒選過的話它用哪一個?
~/.pi/agent/settings.json 的 defaultModel/defaultProvider,也可以用環境變數 PI_WEB_DEFAULT_MODEL/PI_WEB_DEFAULT_PROVIDER 強制指定(附錄 A 有列所有相關變數)。目前 pi-web 上游沒有 composer 內的「Set as default」按鈕——想調預設就去改 settings.json 或 env,改完重整頁面即生效。如果你完全沒設過,pi-web 一般會用 pi CLI 那邊 ~/.pi/agent/settings.json 已經寫過的值;再沒有就以「未指定」處理,此時模型下拉會提示你先選一個。