第 13 章

一句話切換 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。

  1. 開一個新的 Session,把模型下拉切到 GLM-4-Flash

    左上角按 + New session(按鈕字樣視語系而定),畫面清空。到 composer 下方那排工具列找到模型按鈕(顯示目前模型名字的那顆),點下去,找 GLM 那一組,選 glm-4-flash(或你熟悉的便宜快模型)。按鈕上的字會變成「GLM-4-Flash」。

  2. 問一個真的家庭問題,讓它給你草稿

    打字框輸入:「幫我寫一個 Home Assistant 自動化,晚上 11:30 把客廳所有燈關掉,如果那時候還有人在客廳就等 10 分鐘再關。」按送出。GLM-4-Flash 大概 20-40 秒會給你一段 YAML,可能包含 triggersconditionsactions

  3. 看完覺得「不知道穩不穩」,就切到 Claude Sonnet

    不要清畫面、不要開新 Session。就在原本的對話裡,把模型下拉點開,這次選 Anthropic 底下的 claude-sonnet-4-5(或當前 Sonnet 最新版)。按鈕上的字變成「Claude Sonnet 4.5」。

  4. 追問一句:請它 review 前面的答案

    在打字框輸入:「請 review 上面那段自動化,有沒有邏輯漏洞、有沒有踩到 HA 常見雷(例如 device_id 陷阱、mode 選錯、entity_id 不存在的偵測)?」按送出。Claude 會把整場對話(包含你的問題+GLM 的 YAML+你這句 review 請求)一起讀進去,然後給你逐條意見。

  5. 看兩家答案的差異,決定哪個要用

    Claude 通常會指出幾件事:GLM 用了 device_id 而不是 entity_id第 8 章提過的雷)、mode 應該用 restart 而不是預設的 single、triggers/conditions/actions 有沒有寫成新版的複數形式。這一輪走完,你手上有一個「便宜模型草稿+深模型審稿意見」的完整包,可以直接改改就用。

  6. (進階)想更省,切回 GLM 讓它照 Claude 的意見改

    拿到 Claude 的意見後,你可以再把模型下拉切回 glm-4-flash,追問:「請照 Claude 剛剛的意見把 YAML 重新寫一次。」GLM 便宜、寫 YAML 也夠用,改稿這件事沒必要一直花 Claude 的錢。這叫做 三段式切換:draft (Flash) → review (Sonnet) → rewrite (Flash),是熟手的日常。

提示:你會發現整場對話結束後,左邊 Session 列表這一條的「模型名稱」欄位顯示的是「最後用的那個模型」。這只是視覺標記,不代表整場都用它,實際上每則訊息用哪個模型是各自記錄的。

切換的三種常見情境

切模型不是隨便切,通常你會落在下面三種模式的其中一種。認清楚自己這一次是哪一種,效率跟花費會差很多。

情境 怎麼切 什麼時候用 典型花費
draft-then-review(先草稿再審稿) 便宜快模型出第一版 → 切深模型做 code review → 可選擇再切回便宜模型改稿 寫自動化、寫腳本、寫 email、任何「有標準答案但要小心細節」的產出 比全程用深模型省很多(實測範圍常見 50-80%,看對話長度),比全程用便宜模型可靠得多
深挖某段(zoom in) 日常閒聊用便宜模型 → 聊到某段突然想深入(例如問到冷氣噸位計算、線材耐流) → 切 reasoning 模型追問 → 追問完切回便宜模型繼續 對話中出現一個需要「認真想」的分支,但整場不需要都用深模型 只在深挖那 2-3 則多花錢,前後閒聊維持便宜
同題比對(A/B) 問完問題拿到答案 A → fork 這個 session 一份(第 8 章教過)→ 在 fork 出來的那份切另一家 provider → 送同一個問題拿到答案 B → 兩個視窗放旁邊比 買房裝潢類重要決策、學術性問題、想看不同模型會不會有偏見 兩家各花一份,但省下自己來回試錯的時間
觀念:三種情境的共通點是「你有意識地在選哪顆腦子答哪一段」。最貴的錯誤是「反射性一路用最貴的模型講到底」——你以為深模型比較好,但便宜模型答得出來的東西你付了 10 倍的錢。

切換的隱藏成本:input tokens 會重算

這是很多人第一個月被帳單嚇到的原因。切模型看起來只是點一下下拉,但每切一次,新模型接手第一句的時候都會把整場對話從第一句到目前為止全部當 input tokens 讀一次。原因很簡單——它是新來的,之前的對話它沒看過,你要它接話就得先把上下文塞給它。

拿一個例子算一下。假設你的對話目前累積了 5,000 tokens(大約 15-20 則往返),你在同一場 session 切了 4 次模型:

動作 累積對話 tokens 這一次切換要重讀的 input tokens 備註
第 1 次切(Flash → Sonnet)5,0005,000Sonnet 第一次接手
Sonnet 回了 500 tokens,你又切回 Flash5,5005,500Flash 也要從頭讀一次(它不記得剛剛是自己講的)
Flash 回了 400,你切 GPT-4o5,9005,900又一輪
GPT 回了 600,你切回 Sonnet6,5006,500Sonnet 之前接手過但 pi-web 不會「記住」它,仍會重讀
總計切換成本22,900 input tokens還沒算輸出的 tokens

對比:如果你一路用 Flash 講到底,只有你送出的那幾則會累加 input,沒有「重讀」的成本。切模型的錢就是花在「新腦子讀舊對話」這件事上。

注意:長 Session(超過 30 則往返)+頻繁切模型,是最容易失控的花錢方式。省錢做法有兩個:(1)非必要不切,先想清楚哪一段真的需要另一顆腦子。(2)發現對話太長了,請 AI 幫你「總結上面的討論成 5 點」,然後開新 Session 貼進總結繼續,等於把上下文壓縮過再繼續。

切模型 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、送同一個問題,兩個視窗並排比。
提示:Fork 比切模型「乾淨」但成本比較高(因為你有兩個 session 各自累積),切模型比 Fork 「連貫」但混在一起可能之後想追溯哪則是哪個模型講的會麻煩。看你的目的選。

有些切換會「隱形失敗」: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 沒關係,只是新模型不會再自己想一輪
注意:「隱形失敗」指的是不會跳錯誤——新模型還是會回答你,但可能答得莫名其妙(因為它少看了關鍵資訊)。感覺到「怎麼答非所問」的時候,先想一下是不是剛剛做了 Claude 切到非 Claude 的動作。

快速切換的鍵盤與滑鼠技巧

如果你會頻繁切模型(例如做 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.jsondefaultModel/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 直接砍掉整家。
提示:上面這些「靠 JSON/env 調」的做法反映的是 pi-web 目前的實作。UI 有可能之後補上 alias 輸入或「Set as default」按鈕,看到再用即可;本文以「打開 pi-web 找不到相對應按鈕」為前提寫,你打開真的沒看到那顆按鈕不代表壞了。

切模型的常見卡關

  1. 切完下拉沒反應、AI 還是用舊模型回

    三個地方檢查:(a)看模型下拉按鈕上顯示的字有沒有變成你選的那個——沒變就是根本沒切成功,可能你點下拉的時候手滑點到別的地方。(b)看你送出去的那則訊息,右上角通常會標記模型名稱,如果標記還是舊模型,代表你送出的時候還沒切生效。(c)打開瀏覽器 F12 開發者工具的 Console,看有沒有紅字(例如 models.json parse error),有的話代表模型設定檔壞了,回 Models 面板重新存一次。

  2. 切完之後 AI 答案突然變英文

    某些 provider 的模型(尤其 Anthropic Claude、OpenAI GPT)預設偏好用英文答。切過去之後你追問中文,它可能還是用英文回。解法:在你切完後的第一句話裡明確加一句「請用繁體中文(台灣用語)回答」,之後這場 session 就會維持中文。這比重新切回中文友善的 GLM 划算。

  3. 切完之後跳「402 Payment Required」或「餘額不足」

    402 代表這家 provider 的錢用完了。看錯誤訊息裡是哪家 provider(例如 anthropic: insufficient credits),你有兩條路:(1)回那家的官網後台儲值。(2)切回原本還有錢的 provider 繼續。你的對話還在,沒送成功的那則訊息重打一次就好,不會扣到已經花掉的錢。這一類錯誤 detail 在第 22 章還會展開。

  4. 切完發現「之前的思考塊不見了」或 AI 答非所問

    這是前面 warning 段講過的「native thinking blocks 沒辦法跨 provider 帶過去」問題。你如果從 Claude 切到 GLM/DeepSeek 之類,Claude 那些結構化的思考塊在新 provider 看到的 context 裡不會是原本的樣子(可能不見、可能被壓成純文字),新模型看到的東西跟你以為它看到的不一樣。屬正常行為,不是 bug。補救做法:把想保留的關鍵思考內容自己複製一段貼到新訊息裡當上下文;或者下次遇到這種情境改用 Fork 而不是切換。

  5. 下拉裡完全沒有另一家 provider 的模型

    代表你沒在 Models 面板加過那家。回第 6 章的做法再加一家:右上工具列點 Models → Add Provider → 選 provider → 貼 baseUrl 與 API key → 按 Test 綠燈 → 存檔。回到 composer,下拉就會多出這家的模型列表。

  6. 下拉列表模型太多,找不到想要的那個

    接了 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 切太多次會不會出事?
不會出事,但會很花錢。前面「切換的隱藏成本」段算過:每切一次,新模型都要把整場對話當 input tokens 重讀一次。10 則對話累積 5,000 tokens,切 4 次就多花 22,900 input tokens。技術上不會爆掉、也不會 rate limit(除非 context window 超過該模型上限,那會跳明確錯誤),但你的月帳單會有感。做法:只在必要時切、或請 AI 摘要成短版再開新 session 繼續。
切模型會影響對話品質嗎?新模型會不會答得比較差?
會有一點影響,但不是「差」,是「風格變」。每個模型有自己讀對話的方式:Claude 通常會很認真讀完整場然後給結構化的答案;GPT 傾向直接接下一句往下講;GLM 偏簡短。所以你切模型後可能覺得答案「感覺不太一樣」——不是模型變笨,是它本來就長這樣。真正影響品質的是切到能力不夠的模型(例如寫複雜程式的對話從 Sonnet 切到 GLM-4-Flash),這時候會明顯感覺答得粗糙——那是選錯模型的問題,不是切換本身的問題。
哪個模型是「預設模型」?我沒選過的話它用哪一個?
預設模型來自 ~/.pi/agent/settings.jsondefaultModeldefaultProvider,也可以用環境變數 PI_WEB_DEFAULT_MODELPI_WEB_DEFAULT_PROVIDER 強制指定(附錄 A 有列所有相關變數)。目前 pi-web 上游沒有 composer 內的「Set as default」按鈕——想調預設就去改 settings.json 或 env,改完重整頁面即生效。如果你完全沒設過,pi-web 一般會用 pi CLI 那邊 ~/.pi/agent/settings.json 已經寫過的值;再沒有就以「未指定」處理,此時模型下拉會提示你先選一個。
有沒有「自動選最適合模型」的功能?我不想自己判斷
目前 pi-web 是手動選——它不會替你判斷「這個問題該用哪家」。這是刻意的設計:官方認為「哪個模型好」是使用者自己的選擇,工具不應該幫你決定要花誰的錢。未來可能會有 auto-select 之類的 skill(第 14 章會講 skill 是什麼),例如「偵測到 code review 請求時自動切 Claude」,但目前還沒有官方版本。想省事的話,實務上大家的做法是「default 設便宜快模型,遇到需要深模型時手動切」,這樣覆蓋 80% 的日常。
切模型會不會不小心把我之前的對話刪掉?
不會。切模型純粹是「決定下一句用哪個模型答」,對已經存在的訊息完全沒有動作——不會刪、不會改、不會重跑。這跟按 + New session兩件事:新 session 才是「開一個空白的新對話」,切模型只是換腦子繼續同一場。真的要清對話就用第 8 章教的 delete session;不清而只切模型,對話全部保留。
下一步該學什麼?
你會切模型了,多 AI 這個 part 也就走完了——你已經知道為什麼要多家、六家各適合什麼、reasoning 是什麼、怎麼切換組合。接下來翻到第 14 章:Skill 是什麼,開始玩「教 AI 一項專門手藝」的 skill 系統。Skill 是 pi-web 的核心特色之一,也是 draft-then-review 這種工作流之外,另一個把 AI 用得更好的方向。