Deze handleiding loopt door het bouwen van een provider-Plugin dat een modelprovider (LLM) toevoegt aan OpenClaw. Aan het einde heb je een provider met een modelcatalogus, API-sleutelauthenticatie en dynamische modelresolutie.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Als je nog niet eerder een OpenClaw-Plugin hebt gebouwd, lees dan eerst
Aan de slag voor de basispakketstructuur en
manifestinstelling.
Stappenplan
Package and manifest
providerAuthEnvVars zodat OpenClaw
referenties kan detecteren zonder je Plugin-runtime te laden. Voeg providerAuthAliases
toe wanneer een providervariant de authenticatie van een andere provider-id moet hergebruiken. modelSupport
is optioneel en laat OpenClaw je provider-Plugin automatisch laden vanuit verkorte
model-id’s zoals acme-large voordat runtime-hooks bestaan. Als je de
provider op ClawHub publiceert, zijn die velden openclaw.compat en openclaw.build
vereist in package.json.Register the provider
Een minimale provider heeft een Dat is een werkende provider. Gebruikers kunnen nu
id, label, auth en catalog nodig:index.ts
openclaw onboard --acme-ai-api-key <key> uitvoeren en
acme-ai/acme-large als hun model selecteren.Als de upstream-provider andere controletokens gebruikt dan OpenClaw, voeg dan een
kleine bidirectionele teksttransformatie toe in plaats van het streampad te vervangen:input herschrijft de uiteindelijke systeemprompt en tekstberichtinhoud vóór
transport. output herschrijft assistent-tekstdelta’s en definitieve tekst voordat
OpenClaw zijn eigen controlemarkeringen of kanaalbezorging parseert.Voor gebundelde providers die slechts één tekstprovider met API-sleutel-
authenticatie plus één catalogusgestuurde runtime registreren, geef je de voorkeur aan de smallere
helper defineSingleProviderPluginEntry(...):buildProvider is het live cataloguspad dat wordt gebruikt wanneer OpenClaw echte
providerauthenticatie kan oplossen. Het mag providerspecifieke detectie uitvoeren. Gebruik
buildStaticProvider alleen voor offline rijen die veilig kunnen worden getoond voordat authenticatie
is geconfigureerd; het mag geen referenties vereisen of netwerkverzoeken doen.
De weergave van OpenClaw’s models list --all voert momenteel statische catalogi
alleen uit voor gebundelde provider-Plugins, met een lege configuratie, lege env en geen
agent-/werkruimtepaden.Als je authenticatiestroom ook models.providers.*, aliassen en
het standaardmodel van de agent tijdens onboarding moet patchen, gebruik dan de presethelpers uit
openclaw/plugin-sdk/provider-onboard. De smalste helpers zijn
createDefaultModelPresetAppliers(...),
createDefaultModelsPresetAppliers(...) en
createModelCatalogPresetAppliers(...).Wanneer een native endpoint van een provider gestreamde gebruiksblokken ondersteunt op het
normale openai-completions-transport, geef dan de voorkeur aan de gedeelde catalogushelpers in
openclaw/plugin-sdk/provider-catalog-shared in plaats van provider-id-controles
hard te coderen. supportsNativeStreamingUsageCompat(...) en
applyProviderNativeStreamingUsageCompat(...) detecteren ondersteuning vanuit de
endpoint-capabilitymap, zodat native Moonshot/DashScope-achtige endpoints zich nog steeds
aanmelden, zelfs wanneer een Plugin een aangepaste provider-id gebruikt.Add dynamic model resolution
Als je provider willekeurige model-id’s accepteert (zoals een proxy of router),
voeg dan Als oplossen een netwerkoproep vereist, gebruik dan
resolveDynamicModel toe:prepareDynamicModel voor asynchrone
warm-up — resolveDynamicModel wordt opnieuw uitgevoerd nadat dit is voltooid.Add runtime hooks (as needed)
De meeste providers hebben alleen Beschikbare replayfamilies vandaag:
Beschikbare streamfamilies vandaag:
catalog + resolveDynamicModel nodig. Voeg hooks
stapsgewijs toe naarmate je provider ze nodig heeft.Gedeelde helperbouwers dekken nu de meest voorkomende replay-/tool-compat-
families, dus Plugins hoeven meestal niet elke hook een voor een handmatig te bedraden:| Familie | Wat het bedraadt | Gebundelde voorbeelden |
|---|---|---|
openai-compatible | Gedeeld OpenAI-stijl replaybeleid voor OpenAI-compatibele transporten, inclusief tool-call-id-sanering, fixes voor assistant-first-volgorde en generieke Gemini-turnvalidatie waar het transport die nodig heeft | moonshot, ollama, xai, zai |
anthropic-by-model | Claude-bewust replaybeleid gekozen door modelId, zodat Anthropic-message-transporten alleen Claude-specifieke thinking-block-opruiming krijgen wanneer het opgeloste model daadwerkelijk een Claude-id is | amazon-bedrock, anthropic-vertex |
google-gemini | Native Gemini-replaybeleid plus bootstrap-replaysanering en gelabelde reasoning-outputmodus | google, google-gemini-cli |
passthrough-gemini | Gemini thought-signature-sanering voor Gemini-modellen die via OpenAI-compatibele proxytransporten draaien; schakelt geen native Gemini-replayvalidatie of bootstrapherschrijvingen in | openrouter, kilocode, opencode, opencode-go |
hybrid-anthropic-openai | Hybride beleid voor providers die Anthropic-message- en OpenAI-compatibele modeloppervlakken in één Plugin combineren; optioneel Claude-only thinking-block-droppen blijft beperkt tot de Anthropic-kant | minimax |
| Familie | Wat het aansluit | Gebundelde voorbeelden |
|---|---|---|
google-thinking | Normalisatie van Gemini-denkpayloads op het gedeelde streampad | google, google-gemini-cli |
kilocode-thinking | Kilo-redeneerwrapper op het gedeelde proxy-streampad, waarbij kilo/auto en niet-ondersteunde proxy-redeneer-id’s geinjecteerd denken overslaan | kilocode |
moonshot-thinking | Mapping van Moonshot binaire native-thinking-payloads vanuit config + /think-niveau | moonshot |
minimax-fast-mode | MiniMax fast-mode-modelherschrijving op het gedeelde streampad | minimax, minimax-portal |
openai-responses-defaults | Gedeelde native OpenAI/Codex Responses-wrappers: attributieheaders, /fast/serviceTier, tekstuitvoerigheid, native Codex-webzoekfunctie, vormgeving van reasoning-compat-payloads en Responses-contextbeheer | openai, openai-codex |
openrouter-thinking | OpenRouter-redeneerwrapper voor proxyroutes, waarbij overslaan van niet-ondersteunde modellen/auto centraal wordt afgehandeld | openrouter |
tool-stream-default-on | Standaard ingeschakelde tool_stream-wrapper voor providers zoals Z.AI die toolstreaming willen, tenzij expliciet uitgeschakeld | zai |
SDK seams powering the family builders
SDK seams powering the family builders
Elke familiebouwer is samengesteld uit publieke helpers op lager niveau die vanuit hetzelfde pakket worden geexporteerd; je kunt die gebruiken wanneer een provider van het gemeenschappelijke patroon moet afwijken:
openclaw/plugin-sdk/provider-model-shared—ProviderReplayFamily,buildProviderReplayFamilyHooks(...)en de ruwe replaybouwers (buildOpenAICompatibleReplayPolicy,buildAnthropicReplayPolicyForModel,buildGoogleGeminiReplayPolicy,buildHybridAnthropicOrOpenAIReplayPolicy). Exporteert ook Gemini-replayhelpers (sanitizeGoogleGeminiReplayHistory,resolveTaggedReasoningOutputMode) en endpoint-/modelhelpers (resolveProviderEndpoint,normalizeProviderId,normalizeGooglePreviewModelId,normalizeNativeXaiModelId).openclaw/plugin-sdk/provider-stream—ProviderStreamFamily,buildProviderStreamFamilyHooks(...),composeProviderStreamWrappers(...), plus de gedeelde OpenAI/Codex-wrappers (createOpenAIAttributionHeadersWrapper,createOpenAIFastModeWrapper,createOpenAIServiceTierWrapper,createOpenAIResponsesContextManagementWrapper,createCodexNativeWebSearchWrapper), DeepSeek V4 OpenAI-compatibele wrapper (createDeepSeekV4OpenAICompatibleThinkingWrapper), opschoning van Anthropic Messages-denkvoorinvulling (createAnthropicThinkingPrefillPayloadWrapper) en gedeelde proxy-/providerwrappers (createOpenRouterWrapper,createToolStreamWrapper,createMinimaxFastModeWrapper).openclaw/plugin-sdk/provider-tools—ProviderToolCompatFamily,buildProviderToolCompatFamilyHooks("gemini"), onderliggende Gemini-schemahelpers (normalizeGeminiToolSchemas,inspectGeminiToolSchemas) en xAI-compathelpers (resolveXaiModelCompatPatch(),applyXaiModelCompat(model)). De gebundelde xAI-Plugin gebruiktnormalizeResolvedModel+contributeResolvedModelCompathiermee om xAI-regels eigendom van de provider te houden.
@openclaw/anthropic-provider houdt wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier en de Anthropic-wrapperbouwers op lager niveau in zijn eigen publieke api.ts / contract-api.ts-seam, omdat ze Claude OAuth-beta-afhandeling en context1m-gating coderen. De xAI-Plugin houdt native vormgeving van xAI Responses eveneens in zijn eigen wrapStreamFn (/fast-aliassen, standaard tool_stream, opschoning van niet-ondersteunde strikte tools, xAI-specifieke verwijdering van redeneerpayloads).Hetzelfde package-rootpatroon ondersteunt ook @openclaw/openai-provider (providerbouwers, helpers voor standaardmodellen, realtime-providerbouwers) en @openclaw/openrouter-provider (providerbouwer plus onboarding-/confighelpers).- Token exchange
- Custom headers
- Native transport identity
- Usage and billing
Voor providers die voor elke inferentieaanroep een tokenuitwisseling nodig hebben:
All available provider hooks
All available provider hooks
OpenClaw roept hooks in deze volgorde aan. De meeste providers gebruiken er slechts 2-3:
Provider-velden die alleen voor compatibiliteit bestaan en die OpenClaw niet meer aanroept, zoals
Opmerkingen over runtime-fallback:
ProviderPlugin.capabilities en suppressBuiltInModel, staan hier niet
vermeld.| # | Hook | Wanneer te gebruiken |
|---|---|---|
| 1 | catalog | Modelcatalogus of standaardwaarden voor basis-URL |
| 2 | applyConfigDefaults | Provider-eigen globale standaardwaarden tijdens config-materialisatie |
| 3 | normalizeModelId | Opschonen van legacy-/preview-model-ID-aliassen voor lookup |
| 4 | normalizeTransport | Opschonen van provider-familie api / baseUrl voor generieke modelassemblage |
| 5 | normalizeConfig | Config voor models.providers.<id> normaliseren |
| 6 | applyNativeStreamingUsageCompat | Compat-herschrijvingen voor native streaming-gebruik voor config-providers |
| 7 | resolveConfigApiKey | Provider-eigen auth-resolutie voor env-markers |
| 8 | resolveSyntheticAuth | Synthetische auth voor lokale/self-hosted of config-ondersteunde omgevingen |
| 9 | shouldDeferSyntheticProfileAuth | Synthetische placeholders voor opgeslagen profielen lager prioriteren dan env-/config-auth |
| 10 | resolveDynamicModel | Willekeurige upstream-model-ID’s accepteren |
| 11 | prepareDynamicModel | Asynchrone metadata ophalen voor resolutie |
| 12 | normalizeResolvedModel | Transport-herschrijvingen voor de runner |
| 13 | contributeResolvedModelCompat | Compat-flags voor vendormodellen achter een ander compatibel transport |
| 14 | normalizeToolSchemas | Provider-eigen opschoning van toolschema’s voor registratie |
| 15 | inspectToolSchemas | Provider-eigen diagnostiek voor toolschema’s |
| 16 | resolveReasoningOutputMode | Getagd versus native reasoning-outputcontract |
| 17 | prepareExtraParams | Standaard aanvraagparameters |
| 18 | createStreamFn | Volledig aangepast StreamFn-transport |
| 19 | wrapStreamFn | Aangepaste headers/body-wrappers op het normale streampad |
| 20 | resolveTransportTurnState | Native headers/metadata per beurt |
| 21 | resolveWebSocketSessionPolicy | Native WS-sessieheaders/cooldown |
| 22 | formatApiKey | Aangepaste runtime-tokenvorm |
| 23 | refreshOAuth | Aangepaste OAuth-vernieuwing |
| 24 | buildAuthDoctorHint | Richtlijnen voor auth-herstel |
| 25 | matchesContextOverflowError | Provider-eigen overflowdetectie |
| 26 | classifyFailoverReason | Provider-eigen classificatie van rate-limit/overbelasting |
| 27 | isCacheTtlEligible | TTL-gating voor promptcache |
| 28 | buildMissingAuthMessage | Aangepaste hint voor ontbrekende auth |
| 29 | augmentModelCatalog | Synthetische rijen voor forward compatibility |
| 30 | resolveThinkingProfile | Modelspecifieke /think-optieset |
| 31 | isBinaryThinking | Compatibiliteit voor binair denken aan/uit |
| 32 | supportsXHighThinking | Compatibiliteit voor xhigh reasoning-ondersteuning |
| 33 | resolveDefaultThinkingLevel | Compatibiliteit voor standaard /think-beleid |
| 34 | isModernModelRef | Live-/smoke-modelmatching |
| 35 | prepareRuntimeAuth | Tokenuitwisseling voor inferentie |
| 36 | resolveUsageAuth | Aangepaste parsing van gebruiksreferenties |
| 37 | fetchUsageSnapshot | Aangepast gebruikseindpunt |
| 38 | createEmbeddingProvider | Provider-eigen embeddingadapter voor geheugen/zoeken |
| 39 | buildReplayPolicy | Aangepast beleid voor transcriptherhaling/Compaction |
| 40 | sanitizeReplayHistory | Provider-specifieke replay-herschrijvingen na generieke opschoning |
| 41 | validateReplayTurns | Strikte validatie van replay-beurten voor de ingebedde runner |
| 42 | onModelSelected | Callback na selectie (bijv. telemetrie) |
normalizeConfigcontroleert eerst de gematchte provider, daarna andere hook-geschikte provider-plugins totdat er een de config daadwerkelijk wijzigt. Als geen provider-hook een ondersteunde Google-familieconfig herschrijft, wordt de gebundelde Google-config-normalizer nog steeds toegepast.resolveConfigApiKeygebruikt de provider-hook wanneer die beschikbaar is. Het gebundeldeamazon-bedrock-pad heeft hier ook een ingebouwde AWS env-marker-resolver, ook al gebruikt Bedrock-runtime-auth zelf nog steeds de standaardketen van de AWS SDK.resolveSystemPromptContributionlaat een provider cachebewuste system-prompt-richtlijnen injecteren voor een modelfamilie. Gebruik dit bij voorkeur bovenbefore_prompt_buildwanneer het gedrag bij een provider-/modelfamilie hoort en de stabiele/dynamische cache-splitsing moet behouden.
Add extra capabilities (optional)
Een provider-plugin kan spraak, realtime transcriptie, realtime
stem, media-inzicht, afbeeldingsgeneratie, videogeneratie, web-fetch,
en webzoekopdrachten registreren naast tekstinferentie. OpenClaw classificeert dit als een
hybrid-capability-plugin — het aanbevolen patroon voor bedrijfsplugins
(één plugin per vendor). Zie
Internals: Capability Ownership.Registreer elke capability binnen Gebruik
register(api) naast je bestaande
api.registerProvider(...)-aanroep. Kies alleen de tabbladen die je nodig hebt:- Speech (TTS)
- Realtime transcription
- Realtime voice
- Media understanding
- Image and video generation
- Web fetch and search
assertOkOrThrowProviderError(...) voor HTTP-fouten van providers zodat
plugins gedeelde begrensde reads van fout-bodies, JSON-foutparsing en
request-id-achtervoegsels gebruiken.Publiceren naar ClawHub
Provider-plugins publiceert u op dezelfde manier als elke andere externe code-Plugin:clawhub package publish gebruiken.
Bestandsstructuur
Referentie voor catalogusvolgorde
catalog.order bepaalt wanneer je catalogus wordt samengevoegd ten opzichte van ingebouwde
providers:
| Volgorde | Wanneer | Gebruikssituatie |
|---|---|---|
simple | Eerste pass | Gewone API-key-providers |
profile | Na simple | Providers die afhankelijk zijn van auth-profielen |
paired | Na profile | Meerdere gerelateerde entries synthetiseren |
late | Laatste pass | Bestaande providers overschrijven (wint bij botsing) |
Volgende stappen
- Channel-plugins — als je Plugin ook een kanaal biedt
- SDK Runtime —
api.runtime-helpers (TTS, zoeken, subagent) - SDK-overzicht — volledige subpath-importreferentie
- Plugin-internals — hookdetails en gebundelde voorbeelden