返回指南
設定·2026年10月1日·閱讀約 7 分鐘

Pi Coding Agent 模型設定:/login、models.json 與自訂 Provider

內建 provider 用 /login,相容端點寫 models.json,再用 /model 切換。依 9 月 22 日改版後的文件與 v0.99.2 原始碼整理。

Pi coding agent 的模型設定分三層:內建的 provider 用 /login 登入(訂閱或 API 金鑰)或設環境變數;Pi 沒內建、但相容於 OpenAI/Anthropic/Google API 的端點,寫進 ~/.pi/agent/models.json;需要特殊認證或協定的服務才要寫擴充功能。選好之後用 /model 切換。這篇依照 Pi 在 2026 年 9 月 22 日改版後的文件,以及 2026 年 9 月 30 日發佈的 v0.99.2 原始碼,說明每一層怎麼設、金鑰的讀取順序(改版後變了)、自訂模型三個會默默出錯的預設值,以及接 OpenAI 相容端點的完整範例。

先確認是哪個 Pi。本頁講的是 Earendil 公司在 pi.dev 發佈的終端機程式碼代理,程式庫是 earendil-works/pi(原 badlogic/pi-mono),MIT 授權。它不是 Inflection 的聊天機器人 Pi(pi.ai)、不是 Pi Network 幣、不是 Raspberry Pi,也不是另一位作者的 Oh My Pi。

先選連線方式

Pi 的模型文件開頭就是這張對照:

你手上有的建議做法
支援的訂閱方案用 /login 登入
某個 provider 的 API 金鑰用 /login 存起來,或設該 provider 的環境變數
本機的 GGUF 模型接 llama.cpp router(用 /llama 管理)
OpenAI、Anthropic 或 Google 相容的端點寫進 models.json
自訂協定或認證流程的 provider寫或安裝 provider extension

Pi 內建一份模型目錄,並可從 pi.dev 疊加較新的目錄資料;離線時沿用快取,要強制更新可以跑 pi update --models。只有在 Pi 沒有你要的 provider 或端點時,才需要自訂模型設定。

在 Pi 裡選模型

  • /model:搜尋並選擇模型。只會列出 provider 已經有可用認證的模型。
  • 在模型上按 Ctrl+S:存成新工作階段的預設模型。
  • /thinking:選目前模型的思考等級,Pi 只會列出該模型支援的等級;同樣按 Ctrl+S 存成啟動預設。
  • Ctrl+P:在可用模型之間輪換;/scoped-models 控制輪換清單並存檔。

工作階段會記錄換模型和思考等級的變化,恢復工作階段時會照著還原,但不會改動新工作階段的預設。

金鑰的讀取順序(改版後變了)

同時設定了好幾個金鑰來源時,Pi 文件寫的順序是:執行時的 --api-key → auth.json 裡存的憑證 → models.json 的 apiKey → provider 的環境變數(或雲端平台的環境憑證)。所以用 /login 存過的舊金鑰會蓋過你剛寫進檔案的那一把,這是「改了設定卻還是用舊帳號」最常見的原因;/logout 可以移除存起來的憑證。注意 9 月 22 日改版前,文件寫的是環境變數排在 models.json 前面,網路上的舊教學可能還是舊順序。

另一個常見誤會:模型不出現在 /model 裡,多半是認證問題而不是 JSON 寫錯。文件說自訂模型可以從 models.json 載入,但在 Pi 解析得到憑證之前,會一直「不可用」。

models.json:接 OpenAI 相容端點的完整範例

Pi 自己的範例是本機 Ollama —— dummy 金鑰只是讓模型變成可用,Ollama 本身不看它:

官方範例:本機 Ollama
{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [{ "id": "qwen2.5-coder:7b" }]
    }
  }
}

接需要認證的端點,例如 Kunavo,就像這樣:

~/.pi/agent/models.json
{
  "providers": {
    "kunavo": {
      "baseUrl": "https://api.kunavo.com/v1",
      "api": "openai-completions",
      "apiKey": "$KUNAVO_API_KEY",
      "models": [
        {
          "id": "claude-sonnet-5",
          "name": "Claude Sonnet 5",
          "reasoning": true,
          "input": ["text", "image"],
          "contextWindow": 1000000,
          "maxTokens": 128000
        },
        {
          "id": "claude-haiku-4-5",
          "name": "Claude Haiku 4.5",
          "input": ["text", "image"],
          "contextWindow": 200000,
          "maxTokens": 64000
        }
      ]
    }
  }
}
  • baseUrl 和 api 必填。可以寫在 provider 層或模型層;依 v0.99.2 原始碼,兩者缺一,Pi 就不載入該模型。
  • api 不是四選一。9 月 22 日改版前,Pi 的文件為自訂 provider 列出四個值:openai-completions、openai-responses、anthropic-messages、google-generative-ai。改版後的文件不再列清單,只在上面那張對照表寫「OpenAI、Anthropic 或 Google 相容的端點」,範例也只用到 openai-completions。v0.99.2 原始碼把 api 定義成任意字串,交給十種內建實作中對應的那一種處理 —— 上述四個,加上 openai-codex-responses、azure-openai-responses、google-vertex、mistral-conversations、bedrock-converse-stream、pi-messages。只有前四個曾被文件寫成自訂 provider 的用法;另外六個這裡沒有測試過,本頁也不主張它們能接第三方端點。
  • openai-completions 的 baseUrl 要帶 /v1。文件沒有用一句話規定,但相容端點範例全都帶版本路徑。少了 /v1 會得到 404,而不是認證錯誤。
  • 金鑰不要寫死。apiKey 和 header 值可以寫 $NAME 或 ${NAME} 引用環境變數、直接寫值,或用 !指令 取得;文件說 models.json 裡的指令會在每次請求時執行、不會快取。auth.json 和任何取金鑰的指令都請保密。
  • 改完不用重開。打開 /model 時會重新讀檔。models 裡同 ID 的項目會新增或取代該 provider 的模型;想改內建模型的中繼資料而不取代整份清單,用 modelOverrides。

三個會默默出錯的預設值

9 月 22 日的文件改版把欄位表拿掉了,但預設值還在原始碼裡(v0.99.2 的 provider-composer.ts)。自訂模型只要沒填,就會套用:

欄位沒填時的預設會造成什麼
costinput、output、cacheRead、cacheWrite 全部 0底部和 /session 的花費一直顯示 $0,不代表免費,只是沒有價格來源
contextWindow128000上下文更大的模型會太早被壓縮
maxTokens16384長回覆被截短

另外 reasoning 預設 false、input 預設只有文字。上面的 Kunavo 範例已依價目表填好上下文和輸出上限,沒有放 cost,因為價格寫死在檔案裡很快就會過期 —— 想讓底部顯示花費,就自己照 價目表填入每百萬 token 的價格。Pi 還支援 promptCache(以秒為單位宣告供應商快取的存活時間,用於快取暖機),文件建議取公開範圍中保守的那一端。

anthropic-messages:可以接,但 baseUrl 沒有定論

anthropic-messages 是改版前文件為自訂 provider 列出的四個值之一,Kunavo 也提供 Anthropic Messages 介面,所以 api: "anthropic-messages" 這條路是存在的。但 Pi 的文件從來沒有說清楚這種類型的 baseUrl 該不該帶 /v1:改版前一個範例寫 https://proxy.example.com/v1、另一個寫不帶路徑的 https://proxy.example.com,改版後兩個範例都刪了,還是沒有定論。走這條路的話先試一種,第一次請求回 404(而不是 401)就改這一行。compat 裡也有幾個專為非原廠端點設計的開關(例如 supportsEagerToolInputStreaming、supportsStrictTools),但文件提醒:相容設定應該描述「已驗證的行為差異」,不要只因為端點宣稱相容 OpenAI 或 Anthropic 就打開。上面的 openai-completions 範例避開了這些問題,這才是建議從它開始的真正原因,不是因為它比較快。

老實說明與付款

以上是讀 Pi 的文件和原始碼整理出來的設定參考,Kunavo 沒有實際用 Pi 跑過自家端點 —— 沒有跑過工作階段、串流、工具往返,也沒確認請求最後落在哪個模型。請保留你現在能用的路線,給 Pi 一個會讀寫真實檔案的任務試試;Pi 幾乎每一步都靠工具呼叫,這樣的第一次執行最能暴露串流或工具格式不合的問題。英文的完整設定頁在 Pi integration guide,各種付費路線(包括 Earendil 自己的 Radius 閘道)比較見 Pi coding agent pricing。

Kunavo 是預付儲值、按 token 扣款,沒有月費。最低儲值 $10,結帳走 Stripe,台灣可用信用卡(Visa、Mastercard、American Express、JCB、銀聯)、Apple Pay 和 Link;街口、LINE Pay 不在可用清單上。詳見計費說明,準備好之後可以建立帳號並產生金鑰。

FAQ

Pi coding agent 要怎麼換模型?

在 Pi 裡輸入 /model 搜尋可用的模型並選擇;在某個模型上按 Ctrl+S 可以存成新工作階段的預設,/thinking 選思考等級(同樣用 Ctrl+S 存成啟動預設),Ctrl+P 在可用模型之間輪換,/scoped-models 控制輪換的範圍。選單只會列出已經有可用認證的 provider 的模型;工作階段會記錄換模型的紀錄,恢復工作階段時會一併恢復,但不會改動新工作階段的預設。

Pi 要怎麼接自訂的 API 端點?

內建 provider 用 /login 或環境變數就好;Pi 沒有內建、但講的是它支援的 API(OpenAI、Anthropic 或 Google 相容)的端點,就在 ~/.pi/agent/models.json 加一個 provider 區塊:baseUrl、api、apiKey,以及 models 清單。baseUrl 和 api 缺一個,Pi 的原始碼就不會載入那個模型。api 不是固定的幾選一:2026 年 9 月 22 日文件改版前,Pi 為自訂 provider 文件化的值有四個(openai-completions、openai-responses、anthropic-messages、google-generative-ai),改版後的文件不再列清單;v0.99.2 原始碼把 api 定義成任意字串,交給十種內建實作中對應的那一種處理,另外六種從未被文件寫成自訂 provider 的用法,這裡也沒有測試過。接 OpenAI 相容端點,填改版後文件範例仍在用的 openai-completions。需要自訂串流、模型探索或特殊認證流程的服務,才要寫 provider extension。

Pi 的 API 金鑰從哪裡讀?順序是什麼?

Pi 的模型文件(2026 年 10 月 1 日)寫的順序是:執行時的 --api-key 最優先,其次是 auth.json 裡存的憑證(/login 存的就是這個),再來是 models.json 的 apiKey,最後才是 provider 的環境變數。所以之前用 /login 存過的舊金鑰,會蓋過你剛寫進 models.json 的那一把。apiKey 欄位可以寫 $NAME 或 ${NAME} 引用環境變數、直接寫值,或用 ! 開頭執行指令取得。注意:這個順序在 2026 年 9 月 22 日文件改版前是不同的(環境變數排在 models.json 前面),舊教學可能還寫著舊順序。

為什麼我自己加的模型在 Pi 底部顯示 $0?

因為自訂模型的 cost 預設全部是 0(依 v0.99.2 原始碼),底部和 /session 顯示的是設定檔裡的價格,不是端點實際收的錢。東西不是免費的,只是沒有價格來源;請照供應商的價目表填入每百萬 token 的 input、output、cacheRead、cacheWrite。順便把 contextWindow 和 maxTokens 也填上:沒填時分別預設 128000 和 16384,大上下文的模型會太早被壓縮、回覆被截短。

Pi 的 baseUrl 要不要加 /v1?

openai-completions 類型要加。Pi 的文件沒有用一句話寫明規則,但它的相容端點範例是 Ollama 的 http://localhost:11434/v1,改版前的 OpenRouter、Vercel AI Gateway、llama.cpp 範例也都帶著版本路徑。所以 OpenAI 相容端點填 /v1 根,例如 https://api.kunavo.com/v1。anthropic-messages 類型則沒有定論:改版前的文件一處寫 /v1、一處不寫,改版後兩個範例都拿掉了,仍沒有說明哪個對。

2026 年 10 月 1 日查證:pi.dev/docs/latest/models(Choose a Model)與 providers 頁、earendil-works/pi 標籤 v0.99.2 的 src/core/model-config.ts 與 provider-composer.ts,以及 GitHub API 的版本資訊。同日為 api 欄位另外查證:models 頁現在列出哪些值(只有 Ollama 範例裡的 openai-completions)、v0.99.2 的 model-config.ts 裡 api 的型別(任意字串,第 191、233 行)、provider-composer.ts 對自訂模型的分派(第 579 行),以及 packages/ai/src/compat.ts 的 BUILTIN_APIS(第 180 行,共十種)。Kunavo 沒有用 Pi 實際跑過自家端點。