當 OpenCode 搭配 Ollama 停止運作時,請先檢查伺服器端點和精確的模型 ID,再考慮更換模型。如果兩項檢查都通過,請測試一個小型檔案編輯,以區分是工具呼叫問題還是連線問題。模型能回應聊天請求,只代表它通過了程式編碼代理工作流程的第一部分。

本指南假設 Ollama 和 OpenCode 已安裝完成。如需安裝和提供者設定,請參閱 Ollama 搭配 OpenCode 設定指南。本文的程序能隔離故障,同時避免反覆變更你目前可用的設定。

找出哪個請求失敗

OpenCode 的故障可能發生在推論之前、生成期間,或工具執行時。請分別檢查這些階段。連線被拒與模型回傳一段看似 JSON 的文字,代表的是不同的問題。在變更任何設定之前,請先記錄端點、所選模型和錯誤訊息,以便判斷變更是否有效。

觀察結果下一步檢查該結果所確立的事項
連線被拒對設定的主機和埠發送 /api/version 請求該 Ollama 端點是否可達
找不到模型讀取 /v1/models 並比對精確 ID請求的模型是否存在於該伺服器
聊天正常但檔案未變更檢查工具呼叫和權限結果OpenCode 是否嘗試並完成了操作
小型編輯正常但大型任務失敗檢查已配置的上下文和執行階段日誌較大的任務是否遇到了可量測的限制
本機正常但雲端卡住分別測試兩條路徑故障是否特定於雲端路徑

在重現故障之前,請先記錄版本資訊:

opencode --version
ollama --version

本文的本機檢查使用 OpenCode 1.19.4 和 Ollama 0.32.9,執行於搭載 96 GB 統一記憶體的 Apple M3 Ultra 上。該硬體能執行我們所選的 31B 模型;這並非針對較小型筆記型電腦的記憶體建議。如需其他硬體的模型選擇,請參閱 Ollama 編碼模型指南。

在更換模型之前先檢查端點

請對 OpenCode 實際使用的主機和埠發送請求。本機伺服器 127.0.0.1:11434 與伺服器 127.0.0.1:11435 是不同的端點。如果請求失敗,請先修復伺服器或位址。更換模型無法修復被拒的網路連線。

curl --fail-with-body --max-time 5 \
  http://127.0.0.1:11434/api/version

curl --fail-with-body --max-time 5 \
  http://127.0.0.1:11434/v1/models

版本回應確認 Ollama 已回應。模型清單回應則確認該伺服器公開了哪些模型 ID。空清單代表伺服器可達但沒有已列出的模型——這與連線錯誤不同。

如果 Ollama 已停止,請啟動應用程式或在終端機中執行其伺服器:

ollama serve

如果埠已被佔用,請檢查哪個伺服器正在執行,而非啟動另一個副本。遠端 Ollama 安裝需要其遠端位址;127.0.0.1 一律指向執行用戶端的機器。

Ollama 的 OpenCode 整合文件使用以 /v1 結尾的 OpenAI 相容基礎 URL。請在 OpenCode 的提供者設定中保留該後綴。原生診斷路由(如 /api/version)位於其範圍之外。

將設定的模型與伺服器精確 ID 進行比對

使用伺服器回傳的模型 ID(包含其標籤)。在一台 Ollama 伺服器上下載的模型,無法在另一台上直接使用——除非那台也下載了相同的模型。在重試請求之前,請一併檢查所選提供者、其基礎 URL 和模型宣告。

以下是我們 OpenCode 1.19.4 檢查所使用的提供者格式:

{
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "http://127.0.0.1:11434/v1"
      },
      "models": {
        "gemma4:31b": {
          "name": "Gemma 4 31B",
          "limit": {
            "context": 65536,
            "output": 2048
          }
        }
      }
    }
  }
}

請將 gemma4:31b 替換為你的伺服器實際列出的 ID。此範例不會下載該模型。OpenCode 的完整選擇器結合了提供者名稱和模型 ID:

opencode run -m ollama/gemma4:31b "Reply with one short sentence."

我們刻意透過 Ollama 的相容端點請求了一個不存在的模型,並收到 HTTP 404 和 not_found_error。該結果確立了模型選擇錯誤,而非記憶體不足或工具解析器損壞。

設定也可能來自多個位置。OpenCode 的設定文件說明了設定如何合併。當某個值似乎被忽略時,請在本機檢查解析後的設定:

opencode debug config

解析後的設定可能包含憑證。在分享診斷報告之前,請擷取相關的提供者設定,並移除金鑰或無關的帳號詳細資訊。

使用一次性編碼測試驗證操作

自行檢查已變更的檔案並執行其測試。給 OpenCode 一個包含已知 bug 的小檔案,要求它修復該檔案,然後執行獨立檢查。這能測試檔案存取、編輯和執行,同時將診斷範圍保持在可檢查的大小。

建立一個新目錄並進入:

mkdir opencode-ollama-check
cd opencode-ollama-check

cat > add.mjs <<'JS'
export function add(a, b) {
  return a - b;
}
JS

cat > check.mjs <<'JS'
import { add } from './add.mjs';
if (add(2, 3) !== 5) throw new Error('Expected add(2, 3) to return 5');
console.log('PASS');
JS

node check.mjs

第一次檢查應該會失敗。將你已測試的提供者設定複製到這個一次性目錄中,然後執行:

opencode run -m ollama/gemma4:31b \
  "Read add.mjs. Fix add so it adds its arguments. Run node check.mjs."

node check.mjs

請自行檢查 add.mjs。如果檔案仍然執行減法或獨立檢查失敗,模型的成功訊息並不足夠。請保持權限提示可見,以便區分被拒絕的編輯和缺少的工具呼叫。在我們的測試中,macOS 將測試檔案路徑解析為 /private/tmp,而工具請求的是其 /tmp 別名。OpenCode 將別名路徑視為外部路徑,並在非互動式執行中拒絕了它。使用已解析的目錄和相對檔案路徑,可讓測試以範圍受限的權限執行。

如需更深入的檢查,OpenCode 的 CLI 支援 JSON 輸出:

opencode run --format json -m ollama/gemma4:31b \
  "Read add.mjs and explain the implementation."

尋找已執行的工具及其結果。包含函式名稱或 JSON 物件的文字,本身並不代表 OpenCode 執行了任何操作。在修正端點和測試權限後,一次修復執行讀取了測試檔案、將減法變更為加法,並通過了獨立的 Node 檢查。第二次執行在替換了刻意不存在的模型 ID 後,也通過了相同的檢查。在我們另外進行的直接 API 探測中,Gemma 4 31B 在 65,536 上下文下回傳了結構化的 read_file 呼叫。該單一結果驗證了探測的回應格式,而非跨各編碼任務的可靠性。

檢查 Ollama 實際配置的上下文

OpenCode 標示的模型限制與 Ollama 的執行階段配置需要一致。在用戶端設定中增加數字,並不代表伺服器配置了更多上下文。請在請求期間檢查執行中的模型,然後將其實際上下文與任務的提示和工具歷史進行比較。

Ollama 的上下文文件建議編碼工具和代理至少使用 64,000 個 token。它也說明了較大的配置會消耗更多記憶體。手動啟動的伺服器可以設定明確的配置:

OLLAMA_CONTEXT_LENGTH=65536 ollama serve

請在執行 Ollama 的處理程序上設定該變數。僅在執行 OpenCode 的終端機中匯出它,並不會重新設定已在執行中的 Ollama 應用程式。如果應用程式管理你的伺服器,請使用該應用程式的上下文設定。

在模型載入期間進行檢查:

ollama ps

檢查 CONTEXT 和 PROCESSOR 欄。如果 Ollama 使用自訂主機或埠,請將 CLI 也指向該伺服器。記憶體壓力、CPU 卸載、截斷與工具格式失敗需要各自的證據;僅憑回應緩慢無法判斷發生了哪種情況。

如果你的硬體無法容納所需的上下文,請選擇支援工具的較小模型並重複相同的測試。避免使用不同任務比較兩個模型,然後將差異歸因於模型品質。

保留有用的故障報告

有用的報告能讓另一位開發者重現相同的請求。請包含版本、已去除敏感資訊的提供者設定、精確模型標籤、已配置的上下文,以及仍然失敗的最小測試。記錄直接請求是否成功,以及 OpenCode 是否可達模型伺服器。這些細節有助於維護者定位故障。

OpenCode 疑難排解指南說明了如何找到日誌。在測試的版本上,此命令可識別已設定的資料和日誌路徑:

opencode debug paths

請將本機和雲端結果分開。本機編碼測試無法驗證 Ollama Cloud 的驗證或可用性,雲端中斷也不能確立本機工具使用出現回歸。同樣地,描述相同症狀的舊議題也不能證明其提出的修復適用於你安裝的版本。

如果測試成功但你的儲存庫任務失敗,請保留可運作的測試並逐步增加複雜度:另一個檔案、更大的輸入,或更長的工具序列。第一個重現故障的變更,比在沒有比較的情況下重新安裝兩個應用程式更有用。

完成本機診斷後,如需設定另一個提供者,OpenCode 自訂提供者指南涵蓋了 Haimaker 的設定。請將私人本機測試保留在本機;當工作負載允許時,切換提供者是可選的下一步。

常見問題

Ollama 聊天成功,是否代表 OpenCode 的工具呼叫也能正常運作?

不是。聊天回應只證明模型能產生文字。OpenCode 還需要結構化工具呼叫、執行權限,以及足夠的上下文來完成任務。請驗證實際的檔案編輯及其測試結果。

提高 OpenCode 的上下文限制,是否會讓 Ollama 配置更多記憶體?

OpenCode 中標示的上下文限制,並不代表 Ollama 已配置了該上下文。請設定 Ollama 伺服器,並使用 ollama ps 檢查執行中的模型。較大的上下文也會增加記憶體需求。

當 Ollama 模型從 OpenCode 中消失時,是否應該全部重新安裝?

請先比對 Ollama 回傳的模型 ID 與 OpenCode 設定中宣告的模型。在重新安裝任何應用程式之前,先檢查端點和所選的提供者。