第一次使用 OpenClaw 外掛?請先閱讀入門,
了解套件結構與 manifest 設定。
逐步說明
Package and manifest
步驟 1:套件與 manifest
setup.providers[].envVars 讓 OpenClaw 不必載入你的外掛執行階段,
就能偵測憑證。當某個提供者變體應重用另一個提供者 ID 的驗證時,
請加入 providerAuthAliases。modelSupport 是選用項目,可讓 OpenClaw
在執行階段 hook 存在之前,從像 acme-large 這樣的簡寫模型 ID
自動載入你的提供者外掛。package.json 中的 openclaw.compat
和 openclaw.build 是發布到 ClawHub 的必要項目
(openclaw.compat.pluginApi 和 openclaw.build.openclawVersion
是兩個必要欄位;省略 minGatewayVersion 時,會回退到
openclaw.install.minHostVersion)。Register the provider
最小文字提供者需要 當提供者 API 回傳更豐富的中繼資料,且外掛需要自行將列投影成
OpenClaw 模型定義時,使用
id、label、auth 和 catalog。
catalog 是提供者擁有的執行階段/設定 hook;它可以呼叫即時
廠商 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 作為模型。即時模型探索
如果你的提供者公開/models 風格的 API,請將提供者專屬
端點與列投影保留在外掛中,並使用
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。如果上游提供者使用的控制 token 與 OpenClaw 不同,請加入小型
雙向文字轉換,而不是替換串流路徑:input 會在傳輸前重寫最終系統提示和文字訊息內容。
output 會在 OpenClaw 解析自己的控制標記或傳遞到頻道之前,
重寫助理文字 delta 和最終文字。對於只註冊一個文字提供者、使用 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 不使用網路,以產生離線目錄。新增動態模型解析
如果你的提供者接受任意模型 ID(例如代理或路由器),請新增 如果解析需要網路呼叫,請使用
resolveDynamicModel:prepareDynamicModel 進行非同步暖身 - resolveDynamicModel 會在完成後再次執行。新增執行階段鉤子(視需要)
多數提供者只需要 目前可用的重播系列:
目前可用的串流系列:
catalog + resolveDynamicModel。請依你的提供者需求逐步新增鉤子。共用輔助建構器現在涵蓋最常見的重播/工具相容系列,因此外掛通常不需要逐一手動連接每個鉤子:| 系列 | 連接內容 | 內建範例 |
|---|---|---|
openai-compatible | 針對 OpenAI 相容傳輸的共用 OpenAI 風格重播政策,包括工具呼叫 ID 清理、助理優先排序修正,以及傳輸需要時的通用 Gemini 回合驗證 | moonshot, ollama, xai, zai |
anthropic-by-model | 由 modelId 選擇的 Claude 感知重播政策,因此 Anthropic 訊息傳輸只會在解析後的模型實際上是 Claude ID 時取得 Claude 特定的思考區塊清理 | amazon-bedrock |
native-anthropic-by-model | 與 anthropic-by-model 相同的依 Claude 模型政策,加上工具呼叫 ID 清理,以及針對必須保留廠商原生 ID 的傳輸保留原生 Anthropic 工具使用 ID | anthropic-vertex, clawrouter |
google-gemini | 原生 Gemini 重播政策加上啟動重播清理。共用系列讓文字輸出 Gemini 命令列介面維持標記式推理;直接的 google 提供者會將 resolveReasoningOutputMode 覆寫為 native,因為 Gemini API 思考會以原生 thought parts 送達。 | google, google-gemini-cli |
passthrough-gemini | 針對透過 OpenAI 相容代理傳輸執行的 Gemini 模型進行 Gemini thought-signature 清理;不啟用原生 Gemini 重播驗證或啟動重寫 | openrouter, kilocode, opencode, opencode-go |
hybrid-anthropic-openai | 供在一個外掛中混合 Anthropic 訊息與 OpenAI 相容模型表面的提供者使用的混合政策;選用的僅限 Claude 思考區塊丟棄會保持限定於 Anthropic 端 | minimax |
| 系列 | 連接內容 | 內建範例 |
|---|---|---|
google-thinking | 共用串流路徑上的 Gemini 思考酬載正規化 | google, google-gemini-cli |
kilocode-thinking | 共用代理串流路徑上的 Kilo 推理包裝器,且 kilo/auto 與不支援的代理推理 ID 會略過注入式思考 | kilocode |
moonshot-thinking | 從設定 + /think 層級對應 Moonshot 二進位原生思考酬載 | moonshot |
minimax-fast-mode | 共用串流路徑上的 MiniMax 快速模式模型重寫 | minimax, minimax-portal |
openai-responses-defaults | 共用原生 OpenAI/Codex Responses 包裝器:歸因標頭、/fast/serviceTier、文字詳細程度、原生 Codex 網頁搜尋、推理相容酬載塑形,以及 Responses 脈絡管理 | openai |
openrouter-thinking | 代理路由的 OpenRouter 推理包裝器,不支援模型/auto 略過會集中處理 | openrouter |
tool-stream-default-on | 針對像 Z.AI 這類除非明確停用否則想要工具串流的提供者,預設啟用的 tool_stream 包裝器 | zai |
支援系列建構器的 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)、DeepSeek V4 OpenAI 相容包裝器(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 消耗原生 thought parts,而不新增 <think> / <final> 提示指令。僅文字的 Gemini 命令列介面風格後端若會解析最終 JSON/文字回應,可以保留共用的 google-gemini 標記式合約。有些串流輔助工具刻意保持提供者本地。@openclaw/anthropic-provider 會將 wrapAnthropicProviderStream、resolveAnthropicBetas、resolveAnthropicFastMode、resolveAnthropicServiceTier,以及較低階 Anthropic 包裝器建構器保留在自己的公開 api.ts / contract-api.ts 邊界中,因為它們編碼 Claude OAuth beta 處理與 context1m 閘門。xAI 外掛同樣在自己的 wrapStreamFn 中保留原生 xAI Responses 塑形(/fast 別名、預設 tool_stream、不支援 strict-tool 清理、xAI 特定推理酬載移除)。相同的套件根模式也支援 @openclaw/openai-provider(提供者建構器、預設模型輔助工具、即時提供者建構器)與 @openclaw/openrouter-provider(提供者建構器加上導覽設定/設定輔助工具)。- 權杖交換
- 自訂標頭
- 原生傳輸身分
- 用量與計費
對於需要在每次推論呼叫前交換權杖的提供者:
常見提供者 hook
常見提供者 hook
OpenClaw 對 model/provider 外掛大致依照以下順序呼叫 hook。
多數提供者只使用 2-3 個。這不是完整的
執行階段後援註記:
ProviderPlugin
contract - 請參閱內部:提供者執行階段
Hooks,以取得完整且目前準確的 hook 清單與後援註記。
OpenClaw 不再呼叫的僅相容性提供者欄位,例如
ProviderPlugin.capabilities 和 suppressBuiltInModel,未列於此處。| Hook | 使用時機 |
|---|---|
catalog | 模型目錄或基底 URL 預設值 |
applyConfigDefaults | config materialization 期間由提供者擁有的全域預設值 |
normalizeModelId | 查找前清理舊版/預覽 model-id 別名 |
normalizeTransport | 通用模型組裝前清理提供者家族 api / baseUrl |
normalizeConfig | 正規化 models.providers.<id> config |
applyNativeStreamingUsageCompat | config providers 的原生串流用量相容性重寫 |
resolveConfigApiKey | 提供者擁有的 env-marker auth 解析 |
resolveSyntheticAuth | 本機/自託管或 config-backed 合成 auth |
resolveExternalAuthProfiles | 為命令列介面/應用程式管理憑證疊加提供者擁有的外部 auth profiles |
shouldDeferSyntheticProfileAuth | 將合成 stored-profile placeholders 降到 env/config auth 後面 |
resolveDynamicModel | 接受任意上游模型 ID |
prepareDynamicModel | 解析前非同步擷取中繼資料 |
normalizeResolvedModel | runner 前的傳輸重寫 |
normalizeToolSchemas | 註冊前由提供者擁有的 tool-schema 清理 |
inspectToolSchemas | 由提供者擁有的 tool-schema 診斷 |
resolveReasoningOutputMode | 標記式與原生 reasoning-output contract |
prepareExtraParams | 預設請求參數 |
createStreamFn | 完全自訂的 StreamFn 傳輸 |
wrapStreamFn | 一般串流路徑上的自訂 headers/body wrappers |
resolveTransportTurnState | 原生每回合 headers/metadata |
resolveWebSocketSessionPolicy | 原生 WS session headers/cool-down |
formatApiKey | 自訂執行階段 token 形狀 |
refreshOAuth | 自訂 OAuth refresh |
buildAuthDoctorHint | auth 修復指引 |
matchesContextOverflowError | 提供者擁有的 overflow 偵測 |
classifyFailoverReason | 提供者擁有的 rate-limit/overload 分類 |
isCacheTtlEligible | Prompt cache TTL 閘控 |
buildMissingAuthMessage | 自訂 missing-auth 提示 |
augmentModelCatalog | 合成 forward-compat rows(已棄用 - 請優先使用 registerModelCatalogProvider) |
resolveThinkingProfile | 模型特定 /think option set |
isBinaryThinking | 二元思考開/關相容性(已棄用 - 請優先使用 resolveThinkingProfile) |
supportsXHighThinking | xhigh reasoning 支援相容性(已棄用 - 請優先使用 resolveThinkingProfile) |
resolveDefaultThinkingLevel | 預設 /think policy 相容性(已棄用 - 請優先使用 resolveThinkingProfile) |
isModernModelRef | live/smoke model matching |
prepareRuntimeAuth | 推論前的 token exchange |
resolveUsageAuth | 自訂用量憑證解析 |
fetchUsageSnapshot | 自訂用量 endpoint |
createEmbeddingProvider | 由提供者擁有、用於 memory/search 的 embedding adapter |
buildReplayPolicy | 自訂 transcript replay/壓縮 policy |
sanitizeReplayHistory | 通用清理後的提供者特定 replay 重寫 |
validateReplayTurns | embedded runner 前的嚴格 replay-turn 驗證 |
onModelSelected | 選取後 callback(例如 telemetry) |
normalizeConfig會為每個提供者 ID 解析一個擁有它的外掛(先是 bundled providers,再是相符的 runtime plugin),並且只呼叫該 hook - 不會掃描其他提供者。Google 自己的normalizeConfighook 會正規化google/google-vertex/google-antigravityconfig entries;它不是獨立的核心後援。resolveConfigApiKey會在公開時使用提供者 hook。Amazon Bedrock 將 AWS env-marker resolution 保留在其提供者外掛中;runtime auth 本身在設定為auth: "aws-sdk"時仍使用 AWS SDK default chain。resolveThinkingProfile(ctx)會接收選取的provider、modelId、可選的合併reasoningcatalog hint,以及可選的合併模型compatfacts。僅使用compat來選擇提供者的 thinking UI/profile。resolveSystemPromptContribution讓提供者能為模型家族注入具 cache-awareness 的 system-prompt guidance。當行為屬於單一 provider/model family 且應保留 stable/dynamic cache split 時,請優先使用它,而不是舊版 plugin-widebefore_prompt_buildhook。
新增額外能力(選用)
步驟 5:新增額外能力
提供者外掛可以在文字推論旁註冊 embeddings、speech、realtime transcription、 realtime voice、media understanding、image generation、video generation、 web fetch 與 web search。OpenClaw 將此分類為 hybrid-capability 外掛 - 這是公司外掛的建議模式 (每個供應商一個外掛)。請參閱 內部:能力擁有權。在register(api) 內,於現有的
api.registerProvider(...) 呼叫旁註冊每項能力。只選擇你需要的分頁:- 語音(TTS)
- 即時轉錄
- 即時語音
- 媒體理解
- 嵌入
- 圖片與影片生成
- 網頁擷取與搜尋
assertOkOrThrowProviderError(...) 處理提供者 HTTP 失敗,讓
外掛共用有上限的錯誤本文讀取、JSON 錯誤解析,以及
request-id suffixes。測試
步驟 6:測試
src/provider.test.ts
發布到 ClawHub
提供者外掛的發布方式與任何其他外部程式碼外掛相同:clawhub skill publish <path> 是用來發布 skill
資料夾的不同命令,不是外掛套件,請勿在這裡使用。
檔案結構
目錄順序參考
catalog.order 控制你的目錄相對於內建提供者合併的時機:
| 順序 | 時機 | 使用案例 |
|---|---|---|
simple | 第一輪 | 一般 API 金鑰提供者 |
profile | simple 之後 | 以驗證設定檔作為閘門的提供者 |
paired | profile 之後 | 合成多個相關項目 |
late | 最後一輪 | 覆寫既有提供者(衝突時勝出) |