第一次接觸 OpenClaw 外掛嗎?請先閱讀入門指南,
以瞭解套件結構和資訊清單設定。
操作說明
1
套件與資訊清單
步驟 1:套件與資訊清單
setup.providers[].envVars 可讓 OpenClaw 在不載入外掛執行階段的情況下偵測認證資訊。
當某個供應商變體應重複使用另一個供應商 ID 的驗證時,請新增 providerAuthAliases。
modelSupport 為選用設定,可讓 OpenClaw 在執行階段掛鉤尚不存在前,從
acme-large 之類的模型簡寫 ID 自動載入你的供應商外掛。ClawHub
發布需要 package.json 中的 openclaw.compat 和 openclaw.build
(openclaw.compat.pluginApi 和 openclaw.build.openclawVersion
是兩個必填欄位;省略 minGatewayVersion 時會改用
openclaw.install.minHostVersion)。2
註冊供應商
最基本的文字供應商需要 請勿將 當供應商 API 傳回更豐富的中繼資料,且外掛需要自行將資料列投射為 OpenClaw 模型定義時,請使用
id、label、auth 和 catalog。
catalog 是供應商擁有的執行階段/設定掛鉤;它可以呼叫即時
廠商 API,並傳回 models.providers 項目。index.ts
registerModelCatalogProvider 是較新的控制平面目錄介面,
用於清單/說明/選擇器 UI,涵蓋 text、voice、image_generation、
video_generation 和 music_generation 資料列。請將廠商端點
呼叫及回應對應保留在外掛中;OpenClaw 負責共用資料列
形狀、來源標籤和說明呈現。這樣就完成一個可運作的供應商。使用者現在可以執行
openclaw onboard --acme-ai-api-key <key>,並選取
acme-ai/acme-large 作為模型。即時模型探索
如果你的供應商提供與 OpenAI 相容的/models API,請讓
單一供應商輔助程式加入共用探索:liveModelDiscovery: true 是公開的外掛 SDK 契約,具有以下
行為:對於非 Bearer 或非標準的清單端點,請傳遞選項,而不是
true:endpointUrl 當作無條件使用的替代主機。其
requireBaseUrl 檢查是認證資訊隔離邊界,適用於模型清單
主機不同於推論主機的供應商。如果供應商需要自訂模型語意,而不是保守的
OpenAI 相容投射,請將該投射保留在外掛中,並使用
openclaw/plugin-sdk/provider-catalog-live-runtime 處理共用擷取
生命週期。此輔助程式提供受保護的 HTTP 擷取、供應商驗證標頭、
結構化 HTTP 錯誤、TTL 快取和靜態備援行為,且不會
將供應商政策放入 OpenClaw 核心。當即時 API 只會告訴你目前有哪些
供應商擁有的靜態目錄資料列可用時,請使用 buildLiveModelProviderConfig:index.ts
getCachedLiveProviderModelRows:index.ts
run 應維持受驗證機制控管,且沒有可用的認證資訊時應傳回 null。請保留離線 staticRun 或靜態備援,讓設定、文件、測試和選擇器介面不需依賴即時網路存取。請使用適合模型清單時效性的 TTL,避免在請求期間輪詢檔案系統,並且僅在上游回應不是 OpenAI 相容的 { data: [{ id, object }] } 形態時,才傳入供應商專屬的 readRows / readModelId。如果上游供應商使用與 OpenClaw 不同的控制權杖,請新增小型雙向文字轉換,而不是取代串流路徑:input 會在傳輸前重寫最終系統提示和文字訊息內容。output 會在 OpenClaw 剖析自身的控制標記或傳遞至頻道前,重寫助理文字增量與最終文字。對於僅註冊一個採用 API 金鑰驗證的文字供應商,以及單一目錄支援執行階段的內建供應商,請優先使用範圍較窄的 defineSingleProviderPluginEntry(...) 輔助函式:buildProvider 是 OpenClaw 能解析實際供應商驗證資訊時使用的即時目錄路徑。它可執行供應商專屬的探索。buildStaticProvider 僅能用於設定驗證前可安全顯示的離線資料列;它不得要求認證資訊或發出網路請求。OpenClaw 的 models list --all 顯示目前僅會針對內建供應商外掛執行靜態目錄,並使用空白設定、空白環境,且不提供代理程式/工作區路徑。如果你的驗證流程也需要在上線引導期間修補 models.providers.*、別名和代理程式預設模型,請使用 openclaw/plugin-sdk/provider-onboard 中的預設輔助函式。範圍最窄的輔助函式為 createDefaultModelPresetAppliers(...)、createDefaultModelsPresetAppliers(...) 和 createModelCatalogPresetAppliers(...)。當供應商的原生端點在一般 openai-completions 傳輸上支援串流使用量區塊時,請優先使用 openclaw/plugin-sdk/provider-catalog-shared 中的共用目錄輔助函式,而不是將供應商 ID 檢查寫死。supportsNativeStreamingUsageCompat(...) 和 applyProviderNativeStreamingUsageCompat(...) 會從端點能力對應表偵測支援情況,因此即使外掛使用自訂供應商 ID,原生 Moonshot/DashScope 風格端點仍可選擇啟用。上述即時探索範例涵蓋 /models 風格的供應商 API。請將該探索保留在 catalog.run 內並限制於可用驗證資訊,且讓 staticRun 不使用網路,以便產生離線目錄。3
新增動態模型解析
如果你的供應商接受任意模型 ID(例如 Proxy 或路由器),請新增 如果解析需要網路呼叫,請使用
resolveDynamicModel:prepareDynamicModel 進行非同步預熱;完成後,resolveDynamicModel 會再次執行。4
新增執行階段掛鉤(視需要)
大多數供應商只需要 目前可用的重播系列:
catalog + resolveDynamicModel。請依供應商需求逐步新增掛鉤。共用輔助建構器目前涵蓋最常見的重播/工具相容性系列,因此外掛通常不需要逐一手動連接每個掛鉤:目前可用的串流系列:
驅動系列建構器的 SDK 接合面
驅動系列建構器的 SDK 接合面
每個系列建構器都由同一套件匯出的較低階公開輔助函式組成;當供應商需要偏離常見模式時,可以使用這些函式:
openclaw/plugin-sdk/provider-model-shared-ProviderReplayFamily、buildProviderReplayFamilyHooks(...),以及原始重播建構器(buildOpenAICompatibleReplayPolicy、buildAnthropicReplayPolicyForModel、buildGoogleGeminiReplayPolicy、buildHybridAnthropicOrOpenAIReplayPolicy)。另會匯出 Gemini 重播輔助函式(sanitizeGoogleGeminiReplayHistory、resolveTaggedReasoningOutputMode)與端點/模型輔助函式(resolveProviderEndpoint、normalizeProviderId、normalizeGooglePreviewModelId)。openclaw/plugin-sdk/provider-stream-ProviderStreamFamily、buildProviderStreamFamilyHooks(...)、composeProviderStreamWrappers(...),以及共用的 OpenAI/Codex 包裝函式(createOpenAIAttributionHeadersWrapper、createOpenAIFastModeWrapper、createOpenAIServiceTierWrapper、createOpenAIResponsesContextManagementWrapper、createCodexNativeWebSearchWrapper)、與 OpenAI 相容的 DeepSeek V4 包裝函式(createDeepSeekV4OpenAICompatibleThinkingWrapper)、Anthropic Messages 思考預填清理(createAnthropicThinkingPrefillPayloadWrapper)、純文字工具呼叫相容性(createPlainTextToolCallCompatWrapper),以及共用的代理/供應商包裝函式(createOpenRouterWrapper、createToolStreamWrapper、createMinimaxFastModeWrapper)。openclaw/plugin-sdk/provider-stream-shared- 適用於供應商熱門路徑的輕量承載資料與事件包裝函式,包括createOpenAICompatibleCompletionsThinkingOffWrapper、createPayloadPatchStreamWrapper、createPlainTextToolCallCompatWrapper、normalizeOpenAICompatibleReasoningPayload(...)與setQwenChatTemplateThinking(...)。openclaw/plugin-sdk/provider-tools-ProviderToolCompatFamily、buildProviderToolCompatFamilyHooks("deepseek" | "gemini" | "openai"),以及底層供應商結構描述輔助函式。
native
推理輸出,讓 OpenClaw 在不新增
<think> / <final> 提示詞指令的情況下使用原生思考部分。僅文字、採 Gemini CLI 風格且
解析最終 JSON/文字回應的後端,可以繼續使用共用的
google-gemini 標記式合約。部分串流輔助函式會刻意保留在供應商本機。@openclaw/anthropic-provider 將 wrapAnthropicProviderStream、resolveAnthropicBetas、resolveAnthropicFastMode、resolveAnthropicServiceTier 與較低階的 Anthropic 包裝函式建構器保留在自己的公開 api.ts / contract-api.ts 接合面中,因為它們會編碼 Claude OAuth Beta 處理與 context1m 閘控。xAI 外掛同樣將原生 xAI Responses 塑形保留在自己的 wrapStreamFn 中(/fast 別名、預設 tool_stream、不支援的嚴格工具清理、xAI 專用推理承載資料移除)。相同的套件根目錄模式也支援 @openclaw/openai-provider(供應商建構器、預設模型輔助函式、即時供應商建構器)與 @openclaw/openrouter-provider(供應商建構器及上線引導/設定輔助函式)。- 權杖交換
- 自訂標頭
- 原生傳輸身分
- 用量與計費
適用於每次推論呼叫前都需要交換權杖的供應商:
常見供應商鉤子
常見供應商鉤子
對於模型/供應商外掛,OpenClaw 大致依照以下順序呼叫鉤子。
多數供應商只會使用其中 2 至 3 個。這不是完整的
ProviderPlugin
合約;如需完整且目前準確的鉤子清單與後援說明,請參閱內部機制:供應商執行階段
鉤子。
OpenClaw 已不再呼叫、僅供相容性使用的供應商欄位,例如
ProviderPlugin.capabilities 與 suppressBuiltInModel,不會列在
此處。執行階段後援說明:
normalizeConfig會針對每個供應商 id 解析出一個負責的外掛(先處理內建供應商,再處理相符的執行階段外掛),且只呼叫該掛鉤,不會掃描其他供應商。Google 自有的normalizeConfig掛鉤負責正規化google/google-vertex/google-antigravity設定項目;它並非獨立的核心後援機制。resolveConfigApiKey會在供應商掛鉤公開時使用它。Amazon Bedrock 將 AWS 環境標記解析保留在其供應商外掛中;使用auth: "aws-sdk"設定時,執行階段驗證本身仍會使用 AWS SDK 預設鏈。resolveThinkingProfile(ctx)會接收所選的provider、modelId、選用的合併後reasoning目錄提示,以及選用的合併後模型compat資訊。僅使用compat選取供應商的思考 UI/設定檔。resolveSystemPromptContribution可讓供應商為某個模型系列注入具快取感知能力的系統提示詞指引。當行為屬於單一供應商/模型系列,且應保留穩定/動態快取的分割時,請優先使用它,而非舊版的外掛全域before_prompt_build掛鉤。
5
新增額外功能(選用)
步驟 5:新增額外功能
供應商外掛除了文字推論之外,還可註冊嵌入、語音、即時轉錄、 即時語音、媒體理解、圖片生成、影片生成、 網頁擷取及網頁搜尋。OpenClaw 將其歸類為 混合功能外掛,這是公司外掛的建議模式 (每個廠商一個外掛)。請參閱 內部原理:功能所有權。請在register(api) 內,與現有的
api.registerProvider(...) 呼叫一併註冊各項功能。只選擇需要的分頁:- 語音(TTS)
- 即時轉錄
- 即時語音
- 媒體理解
- 嵌入
- 圖片與影片生成
- 網頁擷取與搜尋
assertOkOrThrowProviderError(...),讓
外掛共用有限制的錯誤本文讀取、JSON 錯誤剖析及
請求 id 後綴。6
測試
步驟 6:測試
src/provider.test.ts
發布至 ClawHub
提供者外掛的發布方式與其他外部程式碼外掛相同:clawhub skill publish <path> 是用來發布 skill
資料夾的另一個命令,而非外掛套件,因此請勿在此使用。
檔案結構
目錄順序參考
catalog.order 控制你的目錄相對於內建
提供者的合併時機:
後續步驟
- 頻道外掛 - 如果你的外掛也提供頻道
- SDK 執行階段 -
api.runtime輔助工具(TTS、搜尋、子代理程式) - SDK 概覽 - 完整的子路徑匯入參考
- 外掛內部架構 - 鉤子詳細資訊與內附範例