文件

文件

DeepSeek Harness

DeepSeek Harness 保留自己的 DeepSeek 卡片,並在旁邊新增您的供應商。透過「Add model provider」→「Custom model API」中的五個欄位,Claude 和 GPT 就能使用同一個模型選擇器和同一把金鑰。

Settings → Models → “Add model provider” → “Custom model API” 需要五個欄位 — Provider ID、display name、base URL、API protocol 與 API key — 讓 Claude 與 GPT 和內建 DeepSeek 卡片出現在同一個選擇器中。

設定 → Models → Add model provider → Custom model API
# Settings → Models → Add model provider → Custom model API
#
#   Provider ID     kunavo          (lowercase, and permanent)
#   display name    Kunavo
#   base URL        https://api.kunavo.com/v1
#   API protocol    OpenAI Chat Completions   (openai-completions)
#   API key         sk-kn-...
#
# Then Model catalog → Fetch available models → Add selected,
# or type the ids by hand. The page writes the active profile's
# $DSH_HOME/profiles/<profile>/cordis.patch.yml — profile "web" under
# `dsh web`. The same provider there, plus an optional second one
# that sends Claude ids over Anthropic Messages, whose base URL has
# NO /v1. This entry replaces the whole llm-pi-ai config: keep any
# provider already in it.

- id: llm-pi-ai
  config:
    providers:
      kunavo:
        apiKeyEnv: KUNAVO_API_KEY
        api: openai-completions
        baseURL: https://api.kunavo.com/v1   # → /v1/chat/completions
        models:
          - id: claude-sonnet-5
          - id: claude-opus-5
          - id: claude-haiku-4-5
          - id: gpt-5-6-sol
      kunavo-claude:
        apiKeyEnv: KUNAVO_API_KEY
        api: anthropic-messages
        baseURL: https://api.kunavo.com      # → /v1/messages
        models:
          - id: claude-sonnet-5
          - id: claude-haiku-4-5
基底網址取決於 API 通訊協定。 openai-completions 使用 https://api.kunavo.com/v1;anthropic-messages 使用 https://api.kunavo.com,不含 /v1,因為 dsh 會自行附加 /v1/messages。以 dsh 0.2.0-rc.2 對會記錄請求的模擬端點執行測試,確認了兩者:第一種會傳送至 /v1/chat/completions,第二種從根網址傳送至 /v1/messages?beta=true;若其基底網址保留 /v1,則會傳送至 /v1/v1/messages,而真正的閘道會回應 404,不是驗證錯誤。
reasoningEfforts 會改變系統提示的角色,不會決定提示是否送達。 Harness 文件指出,宣告支援推理的模型會收到以 role: "developer" 傳送的系統提示。Kunavo 在所有模型系列(包括 Claude)都會將該角色讀作 system turn,因此不需要為此啟用 compat。直到 2026-09-30,Claude 路徑都會丟棄該角色;這張卡片當時建議您設定 compat.supportsDeveloperRole: false。如果您已設定,保留即可,沒有影響。
Kunavo 未提供任何 DeepSeek 模型。 此供應商與 DeepSeek 卡片並列,不會取代它 — 請將 DeepSeek 金鑰留在原處,用於 deepseek- ID;表格中的 Claude 和 GPT ID 則使用此供應商。這也表示此處沒有可供 harness 文件所述「透過 OpenAI 相容閘道使用 DeepSeek V4」的 compat.thinkingFormat: deepseek 切換選項。
工作階段記錄不會隨請求傳送。 使用內建 DeepSeek 路由時,dsh 會在每個請求中加入模型看不到的兩個欄位:dsh_session_log(工作階段事件,包含您的工作目錄路徑)以及 dsh_plugin_packages。在測試中,兩個自訂供應商都沒有傳送這兩個欄位,因此 Kunavo 供應商不會收到它們。欄位大小及關閉上傳的切換選項,請參閱DeepSeek Harness 定價。
Kunavo 沒有人使用 DeepSeek Harness 對其端點進行測試。 以下是實際測試的內容和日期:透過 npm 安裝的 dsh 0.2.0-rc.2,以無頭模式對本機模擬端點進行測試;該端點會記錄每個請求,並以一次工具呼叫作答。測試沒有使用 Kunavo,也沒有使用模型。九個工作階段都完成了串流工具往返,且每次送出的位元組都相同,這確認了本頁所述的路徑和上限。這無法說明 Kunavo 的驗證方式、路由或模型的回答。下方的 curl 是 Kunavo 端的設定,您可以在十秒內自行確認;dsh 仍是持續變動中的開發者預覽版。
Kunavo 不提供嵌入、文字轉語音或語音轉文字模型,因此這個供應商只支援聊天完成,沒有其他功能。若 Harness 外掛會轉錄音訊或建立向量索引,請繼續使用原有的供應商金鑰 — 新增此供應商不會轉移那些呼叫。
還沒有金鑰?建立 Kunavo 帳戶,建立金鑰(以 sk-kn- 開頭),並從 $10 起新增額度——呼叫會從該餘額扣款,失敗的呼叫不會計費。之後儀表板會開啟 DeepSeek Harness 設定。

逐步操作

  1. 在 /app/keys 建立金鑰並複製——金鑰只會顯示一次。
  2. 啟動 Web UI(dsh web)並前往 Settings → Models。選擇 Add model provider。卡片會先顯示 Third-party model provider,其中只列出 dsh 隨附的供應商 — 請切換至 Custom model API。
  3. 填寫 Provider ID(使用小寫,且永久固定 — 文件說明請求、已儲存的工作階段、模型預設值和憑證參照都會使用此 ID;若要更名,必須新增供應商並刪除舊供應商)、display name、base URL https://api.kunavo.com/v1、API protocol OpenAI Chat Completions,以及 API key。金鑰僅供寫入;dsh 會將它保存在 $DSH_HOME/.credentials.yaml,並只在設定檔中儲存金鑰參照。
  4. 在 Model catalog 下選擇 Fetch available models — Kunavo 會回應 GET /v1/models,因此選擇器會自動填入模型。勾選所需項目,再選擇 Add selected。手動輸入 ID 的效果完全相同;文件建議只要探索結果為空,就改用手動輸入。
  5. 選用:若要透過 Anthropic 自有通訊協定使用 Claude ID,請新增第二個自訂模型 API,設定專屬的 Provider ID、基底網址 https://api.kunavo.com(不含 /v1)、API protocol Anthropic Messages,並使用相同金鑰。此處的 Fetch 也會列出完整目錄;只新增 claude- ID(為什麼只新增這些)。
  6. 在編輯器中選取模型,然後傳送一個會操作檔案的回合,而不是打招呼 — Harness 的大多數工作都依賴工具呼叫,因此第一次就讀取並編輯某個項目,能提供更多資訊。模型變更會在下一個請求生效;文件明確指出不需要重新啟動。

已於 2026年10月1日 根據 DeepSeek Harness 的「Configure models」頁面(與標籤 dsh-v0.2.0-rc.2 中的 docs/user/guide/providers.md 文字相同) 進行確認。第三方設定會變動;如果這裡的欄位名稱不再與你看到的內容相符,應以該頁面為準,而不是本頁。

除錯用戶端前先驗證

一個請求就能判斷失敗原因是端點、金鑰還是設定檔。如果這裡回傳 JSON,則相同的基礎 URL 與金鑰在 DeepSeek Harness 中也能運作。

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
  -H "Authorization: Bearer sk-kn-..."

欄位中應填入哪個模型 ID

每個文字模型都能以模型 ID 存取——即時清單位於 GET /v1/models,帶有價格的目錄位於模型頁面。費率是每 1M 權杖的美元價格,輸入/輸出。

模型 IDKunavo 輸入/輸出它在 DeepSeek Harness 中的位置
claude-sonnet-5$1.40 / $7.00適合作為會編輯檔案的工作階段預設模型
claude-opus-5$3.50 / $17.50規劃一項出錯代價高昂的變更
claude-haiku-4-5$0.70 / $3.50低成本回合——分類、摘要,以及全天候執行的迴圈
gpt-5-6-sol$2.00 / $12.00使用相同金鑰和相同供應商,從另一個模型系列取得第二種意見
gpt-5-6-terra$0.70 / $4.20長輸入內容;每個 token 的費率會決定費用
計費方式是從預付餘額按權杖計費,沒有月費——請參閱 billing。在重複的上下文中——這是編輯器或聊天用戶端傳送內容的大部分——提示快取 對帳單的影響比模型選擇更大。

透過 Anthropic Messages 使用 Claude

Kunavo 也支援 Anthropic Messages API,而 anthropic-messages 是表單提供的三種通訊協定之一。harness 文件明確指出:「一個供應商使用一種通訊協定,因此同時支援兩種通訊協定的閘道需要設定兩個供應商」— 因此這是與第一個並列的第二個供應商,而非在第一個供應商上設定的選項。

  • 基底網址 https://api.kunavo.com,即根網址。 在測試中,根網址會將請求傳送至 /v1/messages?beta=true — Claude Code 也使用這個路徑,且 Kunavo 支援此路徑。網址結尾若加上 /v1,請求就會傳送至 /v1/v1/messages。DeepSeek Harness 與 Claude Code 的比較並列顯示兩個用戶端的請求。
  • 僅限 Claude ID。 Kunavo 的 /v1/messages 僅支援 claude- ID;在此使用 gpt- ID 會收到指出 /v1/chat/completions 的 404。GPT 請繼續使用 openai-completions 供應商。
  • Fetch 會列出所有模型;只新增 Claude 模型。 dsh 的 llm-pi-ai README 說明,此通訊協定的探索請求會使用 Anthropic 的 x-api-key 標頭傳送 GET /v1/models;Kunavo 的模型清單也會如同 Authorization: Bearer 一樣,從該標頭取得金鑰 — 這些資訊來自 dsh 原始碼和 Kunavo 自行執行的測試,不是來自本次測試。Fetch available models取得的結果是完整目錄,包含 GPT 和圖像模型,因此只勾選 claude- ID;手動輸入也同樣可行。完整清單的證明力沒有看起來那麼高:同一份 README 指出,清單網址無論是否包含 /v1 都會接受,但模型請求會原樣使用基底網址 — 因此,Fetch 也可能從 https://api.kunavo.com/v1 填入清單,而使用該基底網址傳送的第一個回合會前往 /v1/v1/messages。
  • 這種設定的作用。 請求會以 Anthropic 的格式送達 — 在測試中,系統提示會作為頂層 system 欄位傳送,因此不會用到 developer 角色 — Kunavo 會原樣轉送,不會從 OpenAI 格式轉換。透過轉換,openai-completions 供應商也能連線至相同的 Claude ID;這就是步驟中使用該供應商的原因。

表單背後的設定檔

Models 頁面會寫入 $DSH_HOME/profiles/<profile>/cordis.patch.yml — 若您以 dsh web 啟動,則會寫入 $DSH_HOME/profiles/web/cordis.patch.yml。較舊的 dsh 文件指向 $DSH_HOME/settings.yaml;0.2.0-rc.2 的文件則沒有。若瀏覽器與伺服器位於同一台機器,Settings 標題中的 Open configuration file 會開啟該檔案;適配器會在下一個請求時重新讀取設定。此端點有五項設定需要注意:

  1. Context window 和 max output tokens — 在表單中,位於 Customized settings → Model options 下。手動輸入的 ID 不會帶有這兩項設定,因此路由會使用預設值:根據 llm-pi-ai README,context 為 262,144 個 token,output 為 32,768 個 token — 本次測試中,兩個自訂供應商都恰好要求 max_tokens: 32768。表格中的每個 ID 都支援更高的上限;請確認對應列的資訊,若要提高上限,請從模型的目錄項目調整。Kunavo 會依模型實際產生的 token 計費,不會依上限計費。
  2. compat.supportsDeveloperRole — 不需要。Harness 建議在閘道拒絕 developer 角色時啟用此選項;Kunavo 在所有模型系列(包括 Claude)都會將該角色讀作 system turn。(直到 2026-09-30,Claude 路徑會丟棄該角色,這個選項當時建議您啟用;保留啟用狀態沒有影響。)
  3. compat.maxTokensField — 保持原設定。Harness 通常會將此項與上方的切換選項搭配,作為第一個修正方式;但 Kunavo 自行處理請求的程式會讀取 max_completion_tokens,並回退至 max_tokens,因此預設值已可正常運作。
  4. reasoningEfforts — 表單中沒有此欄位。手動輸入的模型不會宣告任何推理層級,因此不會顯示 Effort 選單;由端點自行決定預設推理行為。若要使用該選單,請自行宣告層級;在 openai-completions 中,每個金鑰都是一個層級,其值則是以 reasoning_effort 傳送的字串。這對 gpt- ID 有效;對 claude- ID 則無效,因為 Kunavo 的聊天介面不會將 reasoning_effort 轉送至 Anthropic(/docs/chat#reasoning)。
  5. 輸入類型(檔案中的 input: [text, image])— 文件明確指出,這項設定「宣告端點支援某項功能,但不會檢查端點」。在不支援圖像的 ID 上勾選 Image,harness 不會偵測到;請求會在後續階段遭到拒絕。勾選前,請先在 /models 確認該 ID。

工作階段傳送的其餘內容 — 每回合 24 個工具定義、每個新工作階段的一次簡短標題請求,以及 DeepSeek 自有路由上的額外欄位 — 請參閱DeepSeek Harness 定價。

常見問題

如何在 DeepSeek Harness 新增自訂 API 供應商?

使用 dsh web 啟動 Web UI,前往 Settings → Models,然後選擇「Add model provider」。卡片會先顯示「Third-party model provider」,其中只列出 dsh 隨附的供應商;請切換至「Custom model API」。表單會要求填入小寫的 Provider ID、顯示名稱、基底網址、API 通訊協定和 API 金鑰,然後至少在 Model catalog 下新增一個模型。Provider ID 是永久固定的,因為請求、已儲存的工作階段、模型預設值和憑證參照都會使用此 ID;若要更名,必須新增供應商並刪除舊供應商。在 0.2.0-rc.2 中,該頁面會將設定儲存至使用中設定檔的 cordis.patch.yml — 使用 dsh web 時,路徑為 $DSH_HOME/profiles/web/cordis.patch.yml。

DeepSeek Harness 的基底網址結尾需要加上 /v1 嗎?

這取決於 API 通訊協定。使用 openai-completions 時,需要:https://api.kunavo.com/v1;在 dsh 0.2.0-rc.2 的測試中,請求會傳送至 /v1/chat/completions。使用 anthropic-messages 時,不需要:https://api.kunavo.com,因為 dsh 會自行附加 /v1/messages — 使用根網址時,請求會傳送至 /v1/messages?beta=true;若基底網址以 /v1 結尾,則會傳送至 /v1/v1/messages,而真正的閘道會回應 404,不會回傳驗證錯誤。該測試使用會記錄請求的本機模擬端點,並未使用 Kunavo。

DeepSeek Harness 可以使用 Claude 或 GPT 模型取代 DeepSeek 嗎?

可以。API protocol 欄位代表線上格式,不代表廠商:openai-completions 是 OpenAI Chat Completions,openai-responses 是 Responses API,而 anthropic-messages 是 Anthropic Messages API。自訂供應商會將模型 ID 原樣傳送至您設定的基底網址,因此 Claude 或 GPT ID 會在該端點解析,而不是在 Harness 內解析。在 Kunavo 上,使用 https://api.kunavo.com/v1 的 openai-completions 供應商可連線至 Claude 和 GPT ID;在 https://api.kunavo.com 上使用 anthropic-messages 的第二個供應商則只支援 Claude ID,並採用 Anthropic 自有的請求格式。兩者都會與內建的 DeepSeek 卡片並列,不會取代它,因此 DeepSeek ID 仍使用您的 DeepSeek 金鑰。

DeepSeek Harness 會傳送哪些內容給自訂供應商?

在 dsh 0.2.0-rc.2 的記錄測試中,兩個自訂供應商 — openai-completions 和 anthropic-messages — 都會在每個代理回合傳送 24 個工具定義,要求 max_tokens 32,768(這是 Harness 對未設定大小的手動輸入模型所用的預設值),並在每個新工作階段提出一次 max_tokens 為 64 的簡短標題請求。兩者都沒有傳送 dsh_session_log 或 dsh_plugin_packages:這兩個欄位分別代表工作階段事件記錄和已安裝的外掛清單,只會隨內建 DeepSeek 路由傳送。測試使用會記錄請求的模擬端點,並未使用 Kunavo,因此顯示的是 dsh 傳送的內容,而不是任何供應商如何處理這些內容。

為什麼 DeepSeek Harness 的行為像是忽略了我的系統提示?

請確認模型是否宣告推理層級。使用 openai-completions 時,Harness 會將推理模型的系統提示以「developer」而非「system」角色傳送,因為它會根據端點網址推斷請求格式,並將無法辨識的網址視為不是 OpenAI 本身。Kunavo 在所有模型系列(包括 Claude)都會將該角色讀作 system turn,因此在 Kunavo 上無論使用哪個角色,提示都能送達。直到 2026-09-30,Claude 路徑都會靜默丟棄該角色;若在此之前提示遺失,原因就在於此,而在路由或設定檔的 cordis.patch.yml 中設定 compat.supportsDeveloperRole: false 是當時的替代作法。現在已不需要此設定,保留也沒有影響。anthropic-messages 供應商不會傳送該角色:其系統提示會以 Anthropic 的頂層 system 欄位傳送。

為什麼 DeepSeek Harness 的「Fetch available models」沒有回傳內容或回傳 401?

探索功能會使用表單目前填入的基底網址、通訊協定和金鑰,因此 401 通常表示金鑰有誤,清單空白則通常表示基底網址有誤,或探索功能無法讀取清單格式。Harness 文件說明了這兩種情況,並指出可改為手動輸入 ID,效果完全相同。兩種通訊協定傳送金鑰的方式不同 — openai-completions 使用 Authorization: Bearer,anthropic-messages 使用 Anthropic 的 x-api-key 標頭 — 而 Kunavo 的模型清單接受兩種方式。可使用相同金鑰,並以相同標頭對 https://api.kunavo.com/v1/models 執行一般 curl 請求,確認問題出在哪一端:若回傳 JSON,問題在表單;若回傳 401,問題在金鑰;若回傳 404,問題在網址。使用 anthropic-messages 時,即使取得完整清單,仍有兩點無法確認:其一是基底網址是否正確,因為探索功能會從清單網址移除一個結尾的 /v1,但模型請求不會;其二是供應商能呼叫哪些 ID,因為清單涵蓋完整目錄,而此處只有 claude- ID 可用。即使內建供應商的基底網址指向其他位置,系統仍會從已安裝的目錄回應,因此請透過自訂供應商執行 Fetch,才能查看端點實際提供的內容。