初次使用 OpenClaw 插件?请先阅读入门指南,
了解包结构和清单设置。
操作步骤
1
包和清单
第 1 步:包和清单
setup.providers[].envVars 让 OpenClaw 无需加载插件运行时即可检测凭据。当某个提供商变体应复用另一个提供商 ID 的身份验证时,请添加 providerAuthAliases。modelSupport 是可选项,可让 OpenClaw 在运行时钩子存在之前,根据 acme-large 等简写模型 ID 自动加载你的提供商插件。package.json 中的 openclaw.compat 和 openclaw.build 是发布到 ClawHub 所必需的(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 显示目前仅对内置提供商插件执行静态目录,并使用空配置、空环境变量,且不提供 Agent/工作区路径。如果身份验证流程还需要在新手引导期间修补 models.providers.*、别名和 Agent 默认模型,请使用 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(例如代理或路由器),请添加 如果解析需要网络调用,请使用
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:添加额外能力
提供商插件可以在文本推理之外注册嵌入、语音、实时转录、 实时语音、媒体理解、图像生成、视频生成、 Web 获取和 Web 搜索。OpenClaw 将其归类为 混合能力插件——这是公司插件的推荐模式 (每个供应商一个插件)。请参阅 内部机制:能力所有权。在register(api) 中将每项能力与现有的
api.registerProvider(...) 调用一起注册。只选择需要的标签页:- 语音(TTS)
- 实时转录
- 实时语音
- 媒体理解
- 嵌入
- 图像和视频生成
- 网页获取和搜索
assertOkOrThrowProviderError(...),以便
插件共享有大小上限的错误正文读取、JSON 错误解析和
请求 ID 后缀。6
测试
第 6 步:测试
src/provider.test.ts
发布到 ClawHub
提供商插件的发布方式与其他任何外部代码插件相同:clawhub skill publish <path> 是用于发布技能文件夹的另一条命令,
而不是用于发布插件包——请勿在此处使用。
文件结构
目录顺序参考
catalog.order 控制你的目录相对于内置提供商
进行合并的时机: