构建提供商插件
本指南介绍了如何构建一个提供商插件,用于向 LLM 添加模型提供商 (OpenClaw)。完成本指南后,你将拥有一个包含模型目录、API 密钥身份验证和动态模型解析的提供商。如果你之前从未构建过 OpenClaw 插件,请先阅读 入门指南
以了解基本包结构和清单设置。
演练
Register the 提供商
一个最小的提供商需要一个 这就是一个可用的提供商。用户现在可以 如果你的身份验证流程还需要在
id、label、auth 和 catalog:index.ts
openclaw onboard --acme-ai-api-key <key> 并选择 acme-ai/acme-large 作为其模型。对于仅注册一个带有 API 密钥身份验证和单个基于目录的运行时的文本提供商的捆绑提供商,首选更窄的 defineSingleProviderPluginEntry(...) 辅助函数:models.providers.* 期间修补别名和代理默认模型,请使用来自 openclaw/plugin-sdk/provider-onboard 的预设辅助函数。最窄的辅助函数是 createDefaultModelPresetAppliers(...)、createDefaultModelsPresetAppliers(...) 和 createModelCatalogPresetAppliers(...)。添加动态模型解析
如果您的提供商接受任意模型 ID(如代理或路由器),
请添加 如果解析需要进行网络调用,请使用
resolveDynamicModel:prepareDynamicModel 进行异步
预热 — resolveDynamicModel 会在其完成后再次运行。添加运行时钩子(根据需要)
大多数提供商只需要
catalog + resolveDynamicModel。根据提供商的需要逐步添加钩子。- 令牌交换
- 自定义标头
- 使用和计费
对于需要在每次推理调用之前进行令牌交换的提供商:
所有可用的提供商钩子
所有可用的提供商钩子
OpenClaw 按此顺序调用钩子。大多数提供商仅使用 2-3 个:
有关详细描述和真实示例,请参阅
内部原理:提供商运行时钩子。
| # | Hook | 何时使用 |
|---|---|---|
| 1 | catalog | 模型目录或基础 URL 默认值 |
| 2 | resolveDynamicModel | 接受任意上游模型 ID |
| 3 | prepareDynamicModel | 解析之前的异步元数据获取 |
| 4 | normalizeResolvedModel | 运行程序之前的传输重写 |
| 5 | capabilities | 副本/工具元数据(数据,不可调用) |
| 6 | prepareExtraParams | 默认请求参数 |
| 7 | wrapStreamFn | 自定义标头/正文包装器 |
| 8 | formatApiKey | 自定义运行时令牌形状 |
| 9 | refreshOAuth | 自定义 OAuth 刷新 |
| 10 | buildAuthDoctorHint | 认证修复指南 |
| 11 | isCacheTtlEligible | 提示缓存 TTL 门控 |
| 12 | buildMissingAuthMessage | 自定义缺失认证提示 |
| 13 | suppressBuiltInModel | 隐藏陈旧的上游行 |
| 14 | augmentModelCatalog | 合成向前兼容行 |
| 15 | isBinaryThinking | 二元思维开/关 |
| 16 | supportsXHighThinking | xhigh 推理支持 |
| 17 | resolveDefaultThinkingLevel | 默认 /think 策略 |
| 18 | isModernModelRef | 实时/冒烟模型匹配 |
| 19 | prepareRuntimeAuth | 推理前的令牌交换 |
| 20 | resolveUsageAuth | 自定义使用凭证解析 |
| 21 | fetchUsageSnapshot | 自定义使用端点 |
| 22 | onModelSelected | 选择后回调(例如遥测) |
添加额外功能(可选)
文件结构
目录顺序参考
catalog.order 控制您的目录相对于内置提供商的合并时机:
| 顺序 | 时间 | 用例 |
|---|---|---|
simple | 第一轮 | 纯 API 密钥提供商 |
profile | 在简单之后 | 基于身份验证配置文件限制的提供商 |
paired | 在配置文件之后 | 综合多个相关条目 |
late | 最后一轮 | 覆盖现有提供商(发生冲突时生效) |
后续步骤
- 渠道插件 — 如果您的插件还提供渠道
- SDK 运行时 —
api.runtime辅助工具 (TTS, search, subagent) - SDK 概览 — 完整的子路径导入参考
- 插件内部机制 — 钩子详情和捆绑示例
本页面源自 openclaw/openclaw,由 BeaversLab 翻译,遵循 MIT 协议 发布。