OpenCode 快速設定

一行指令把公司 LLM 接進 OpenCode。模型清單由伺服器提供,之後要更新只要再執行一次。

交給 AI 代理代做

自己操作不順時,把下面這段複製給你電腦上的 AI 代理(例如 OpenCode、Claude Code),並另外提供你的 API Key。

請幫我在這台電腦設定 OpenCode 連到公司的 LLM 伺服器。
1. 判斷作業系統。Windows 請在 PowerShell 執行(一整行):
   $env:OPENCODE_SETUP_NONINTERACTIVE='1'; $env:OPENCODE_SETUP_KEY='<我的 API Key>'; irm https://llm-oc-setup.umall.dev/setup.ps1 | iex; Remove-Item Env:OPENCODE_SETUP_KEY, Env:OPENCODE_SETUP_NONINTERACTIVE
   macOS 請在終端機執行(一整行):
   OPENCODE_SETUP_NONINTERACTIVE=1 OPENCODE_SETUP_KEY='<我的 API Key>' /bin/bash -c "$(curl -fsSL https://llm-oc-setup.umall.dev/setup.sh)"
2. 確認輸出有「完成!」與模型清單;若出現錯誤,把完整訊息回報給我,不要自行修改 OpenCode 設定檔。
3. 提醒我完全關閉 OpenCode 後重新開啟。

自己動手(約 1 分鐘)

  1. 開啟 PowerShell:按 Win 鍵,輸入 PowerShell,按 Enter。
  2. 貼上這行(在視窗按右鍵即可貼上),按 Enter:
    irm https://llm-oc-setup.umall.dev/setup.ps1 | iex
  3. 伺服器網址直接按 Enter;接著貼上 API Key 再按 Enter(輸入時畫面不會顯示,是正常的)。
  4. 看到綠色的「完成!」和模型清單,完全關閉 OpenCode 後重新開啟即可。

之後要更新模型

再執行一次同一行指令,連按兩次 Enter(沿用上次的網址與金鑰)就好。畫面會列出這次新增或移除了哪些模型。

常見問題

顯示「金鑰無效或已停用」

確認貼上的是完整的 API Key(通常以 sk- 開頭),或向管理者確認金鑰是否已停用。腳本會讓你重新輸入,最多 3 次。

想換一把新的 API Key

重新執行指令,網址按 Enter,金鑰那一步貼上新的金鑰即可。

以前用過「OpenCode 快速設定工具」(.exe / .app)

直接改用這行指令即可,舊的設定會被更新。往後不需要再下載工具。

會不會動到我其他的 OpenCode 設定?

不會。腳本只改公司 LLM 那一個 provider,其他設定原樣保留;改動前的檔案會備份成 opencode.json.bak-日期-時間。API Key 只存在你的電腦上。

設定完 OpenCode 還是看不到新模型

OpenCode 只在啟動時讀設定:請完全關閉(包含系統匣/選單列圖示)後再開。仍有問題請把指令的完整輸出截圖給管理者。

運作方式(給工程師)

LiteLLM config.yaml model_info.opencode /v1/model/info 用自己的金鑰讀取 setup.ps1 / .sh 轉成 OpenCode 格式 opencode.json 只換這個 provider 管理者改 config.yaml → 使用者重跑腳本即同步;沒有另外的發布步驟

GitHub Copilot CLI:DeepSeek / Claude 一鍵切換

設定一次後,輸入 cgd 用 DeepSeek V4.1 Flash、輸入 cgs 用 Claude Sonnet 5.5,兩者都走公司 LiteLLM。

指令模型推理強度Context / 輸出上限單價(每百萬 token 輸入 / 輸出)
cgddeepseek-v4.1-flashmax1,048,576 / 393,216$0.30 / $1.20
cgsclaude-sonnet-5-5high1,000,000 / 128,000$2 / $10

Key 只在這個網頁裡組合指令,不會上傳也不會儲存;關掉分頁就消失。

  1. 已安裝 GitHub Copilot CLI 與 PowerShell 7(Copilot CLI 在 Windows 需要 PowerShell 6 以上)。還沒裝的話先執行:
    winget install GitHub.Copilot; winget install Microsoft.PowerShell
  2. 建立快捷指令:開啟 PowerShell(建議用 PowerShell 7:按 Win 鍵輸入 pwsh),貼上整段後按 Enter。
    & {
        # 允許 PowerShell 載入個人設定檔(只影響目前使用者;已設定過也沒關係)
        powershell.exe -NoProfile -Command "Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force -ErrorAction SilentlyContinue"
        # 快捷指令本體:cgd = DeepSeek V4.1 Flash、cgs = Claude Sonnet 5.5
        $block = @'
    # >>> copilot-litellm >>>
    # MAX_PROMPT_TOKENS 是輸入預算,不是 context 總量:context 上限 - 輸出上限
    #   deepseek-v4.1-flash:1,048,576 - 393,216 = 655,360
    #   claude-sonnet-5-5  :1,000,000 - 128,000 = 872,000
    function Start-CopilotLiteLLM([hashtable]$Settings, [object[]]$Options) {
        $saved = @{}
        foreach ($k in $Settings.Keys) {
            $saved[$k] = [Environment]::GetEnvironmentVariable($k)
            [Environment]::SetEnvironmentVariable($k, $Settings[$k])
        }
        try { copilot @Options }
        finally { foreach ($k in $saved.Keys) { [Environment]::SetEnvironmentVariable($k, $saved[$k]) } }
    }
    function cgd {
        Start-CopilotLiteLLM @{
            COPILOT_PROVIDER_TYPE              = 'openai'
            COPILOT_PROVIDER_WIRE_API          = 'responses'
            COPILOT_PROVIDER_BASE_URL          = 'https://llm.nikku.dev/v1'
            COPILOT_PROVIDER_API_KEY           = ''
            COPILOT_MODEL                      = 'deepseek-v4.1-flash'
            COPILOT_PROVIDER_MAX_PROMPT_TOKENS = '655360'
            COPILOT_PROVIDER_MAX_OUTPUT_TOKENS = '393216'
        } (@('--yolo', '--reasoning-effort', 'max', '--model', 'deepseek-v4.1-flash') + $args)
    }
    function cgs {
        Start-CopilotLiteLLM @{
            COPILOT_PROVIDER_TYPE              = 'anthropic'
            COPILOT_PROVIDER_BASE_URL          = 'https://llm.nikku.dev'
            COPILOT_PROVIDER_API_KEY           = ''
            COPILOT_MODEL                      = 'claude-sonnet-5-5'
            COPILOT_PROVIDER_MAX_PROMPT_TOKENS = '872000'
            COPILOT_PROVIDER_MAX_OUTPUT_TOKENS = '128000'
        } (@('--yolo', '--reasoning-effort', 'high', '--model', 'claude-sonnet-5-5') + $args)
    }
    # <<< copilot-litellm <<<
    '@
        # 寫進 Windows PowerShell 5.1 與 PowerShell 7 的個人設定檔(重新執行會先移除舊的區塊)
        $docs = Split-Path (Split-Path $PROFILE.CurrentUserAllHosts)
        foreach ($f in "$docs\PowerShell\profile.ps1", "$docs\WindowsPowerShell\profile.ps1") {
            $old = if (Test-Path $f) { [string](Get-Content $f -Raw) } else { '' }
            $old = ($old -replace '(?s)# >>> copilot-litellm >>>.*?# <<< copilot-litellm <<<', '').TrimEnd()
            $text = if ($old) { "$old`r`n`r`n$block`r`n" } else { "$block`r`n" }
            New-Item -ItemType Directory -Force (Split-Path $f) | Out-Null
            [IO.File]::WriteAllText($f, $text, (New-Object Text.UTF8Encoding $true))
        }
        Write-Host '完成!請繼續步驟 2。' -ForegroundColor Green
    }
    看到綠色「完成!請繼續步驟 2。」即可。要換 Key 時改上方的 Key 再執行一次,會覆蓋舊的設定。
  3. 重新載入設定(或關掉 PowerShell 再開一個):
    . $PROFILE.CurrentUserAllHosts
  4. 啟動 Copilot:在專案資料夾輸入其中一個。
    DeepSeek
    cgd
    Claude
    cgs
  5. 檢查設定:查看 BYOK(自訂 Provider)支援的變數,並實際連線測試,回覆 OK 即成功。
    copilot help providers
    cgs -p "Reply with just OK"

參數說明(給工程師)

參數cgdcgs說明
COPILOT_PROVIDER_TYPEopenaianthropicClaude 走 Anthropic 原生格式,Copilot 會送出 adaptive thinking 與提示快取斷點
COPILOT_PROVIDER_WIRE_APIresponses—OpenAI Responses API,只用於 openai 類型
COPILOT_PROVIDER_BASE_URL…/v1不加 /v1anthropic 類型會自己接上 /v1/messages
COPILOT_MODEL + --model兩處都要寫只寫環境變數會被你在 /model 選過的模型蓋掉
…_MAX_PROMPT_TOKENS655,360872,000輸入預算 = context 上限 − 輸出上限,決定何時自動壓縮對話
…_MAX_OUTPUT_TOKENS393,216128,000模型的輸出上限
--reasoning-effortmaxhighSonnet 5.5 官方預設 high,是品質與成本的平衡點
--yolo兩者皆開工具、路徑、網址全部自動允許,不再逐一詢問

常見問題

這次想用更高(或更低)的推理強度

在指令後面加上參數即可,會覆蓋預設值,例如 cgs --reasoning-effort xhigh。DeepSeek 可用 low / high / max;Claude 可用 low / medium / high / xhigh / max。

想換一把新的 API Key

在上方輸入新的 Key,重新執行步驟 1 與步驟 2。舊的設定區塊會被整段取代,不會重複。

啟動時出現「No token count multiplier is known…」

目前版本的 Copilot CLI 還沒內建 Sonnet 5.5 的 token 估算係數,只影響本機的用量估算,不影響請求內容,可以忽略。

Key 存在哪裡?

以明文寫在個人設定檔:Windows 是「文件」資料夾下的 PowerShell\profile.ps1 與 WindowsPowerShell\profile.ps1,Mac 是 ~/.zshrc。請不要把這些檔案分享給別人。