Baru mengenal Plugin OpenClaw? Baca Memulai
terlebih dahulu untuk mengetahui struktur paket dan penyiapan manifes.
Panduan Langkah demi Langkah
1
Paket dan manifes
Langkah 1: Paket dan manifes
setup.providers[].envVars memungkinkan OpenClaw mendeteksi kredensial tanpa
memuat runtime Plugin Anda. Tambahkan providerAuthAliases ketika suatu varian penyedia
harus menggunakan kembali autentikasi milik id penyedia lain. modelSupport bersifat
opsional dan memungkinkan OpenClaw memuat otomatis Plugin penyedia Anda dari id
model singkat seperti acme-large sebelum hook runtime tersedia. openclaw.compat
dan openclaw.build dalam package.json diperlukan untuk penerbitan
ClawHub (openclaw.compat.pluginApi dan openclaw.build.openclawVersion
adalah dua bidang yang diwajibkan; minGatewayVersion menggunakan
openclaw.install.minHostVersion sebagai fallback jika dihilangkan).2
Daftarkan penyedia
Penyedia teks minimal memerlukan Gunakan
id, label, auth, dan catalog.
catalog adalah hook runtime/konfigurasi milik penyedia; hook ini dapat memanggil
API vendor langsung dan mengembalikan entri models.providers.index.ts
registerModelCatalogProvider adalah permukaan katalog bidang kontrol yang lebih baru
untuk UI daftar/bantuan/pemilih, yang mencakup baris text, voice, image_generation,
video_generation, dan music_generation. Pertahankan pemanggilan endpoint vendor
dan pemetaan respons di dalam Plugin; OpenClaw mengelola bentuk baris bersama,
label sumber, dan perenderan bantuan.Ini merupakan penyedia yang berfungsi. Pengguna kini dapat menjalankan
openclaw onboard --acme-ai-api-key <key> dan memilih
acme-ai/acme-large sebagai model mereka.Penemuan model langsung
Jika penyedia Anda menyediakan API bergaya/models, pertahankan endpoint
khusus penyedia dan proyeksi baris di dalam Plugin Anda, lalu gunakan
openclaw/plugin-sdk/provider-catalog-live-runtime untuk siklus proses pengambilan
bersama. Pembantu ini menyediakan pengambilan HTTP terlindungi, header autentikasi penyedia,
kesalahan HTTP terstruktur, caching TTL, dan perilaku fallback statis tanpa
menempatkan kebijakan penyedia di inti OpenClaw.Gunakan buildLiveModelProviderConfig ketika API langsung hanya memberi tahu
baris katalog statis milik penyedia mana yang saat ini tersedia:index.ts
getCachedLiveProviderModelRows ketika API penyedia mengembalikan metadata
yang lebih kaya dan Plugin perlu memproyeksikan sendiri baris menjadi definisi
model OpenClaw:index.ts
run harus tetap dibatasi autentikasi dan mengembalikan null ketika tidak ada kredensial yang dapat
digunakan. Pertahankan staticRun luring atau fallback statis agar penyiapan, dokumentasi,
pengujian, dan permukaan pemilih tidak bergantung pada akses jaringan langsung. Gunakan TTL
yang sesuai untuk kesegaran daftar model, hindari polling sistem berkas pada waktu permintaan,
dan teruskan readRows / readModelId khusus penyedia hanya ketika
respons hulu bukan bentuk { data: [{ id, object }] }
yang kompatibel dengan OpenAI.Jika penyedia hulu menggunakan token kontrol yang berbeda dari OpenClaw, tambahkan
transformasi teks dua arah kecil alih-alih mengganti jalur stream:input menulis ulang prompt sistem akhir dan konten pesan teks sebelum
transportasi. output menulis ulang delta teks asisten dan teks akhir sebelum
OpenClaw mengurai penanda kontrolnya sendiri atau mengirimkannya ke kanal.Untuk penyedia bawaan yang hanya mendaftarkan satu penyedia teks dengan autentikasi
kunci API beserta satu runtime berbasis katalog, utamakan pembantu
defineSingleProviderPluginEntry(...) yang cakupannya lebih sempit:buildProvider adalah jalur katalog langsung yang digunakan ketika OpenClaw dapat menemukan
autentikasi penyedia yang sebenarnya. Jalur ini dapat melakukan penemuan khusus penyedia. Gunakan
buildStaticProvider hanya untuk baris luring yang aman ditampilkan sebelum autentikasi
dikonfigurasi; jalur ini tidak boleh memerlukan kredensial atau membuat permintaan jaringan.
Tampilan models list --all OpenClaw saat ini menjalankan katalog statis
hanya untuk plugin penyedia bawaan, dengan konfigurasi kosong, lingkungan kosong, dan tanpa
jalur agen/ruang kerja.Jika alur autentikasi Anda juga perlu menambal models.providers.*, alias, dan
model default agen selama orientasi awal, gunakan pembantu preset dari
openclaw/plugin-sdk/provider-onboard. Pembantu dengan cakupan tersempit adalah
createDefaultModelPresetAppliers(...),
createDefaultModelsPresetAppliers(...), dan
createModelCatalogPresetAppliers(...).Ketika titik akhir native penyedia mendukung blok penggunaan yang dialirkan pada
transportasi openai-completions normal, utamakan pembantu katalog bersama di
openclaw/plugin-sdk/provider-catalog-shared daripada melakukan hardcode
pemeriksaan id penyedia. supportsNativeStreamingUsageCompat(...) dan
applyProviderNativeStreamingUsageCompat(...) mendeteksi dukungan dari
peta kemampuan titik akhir, sehingga titik akhir native bergaya Moonshot/DashScope tetap
ikut serta bahkan ketika sebuah plugin menggunakan id penyedia khusus.Contoh penemuan langsung di atas mencakup API penyedia bergaya /models. Pertahankan
penemuan tersebut di dalam catalog.run, dengan gerbang autentikasi yang dapat digunakan, dan jaga agar
staticRun bebas jaringan untuk pembuatan katalog luring.3
Tambahkan resolusi model dinamis
Jika penyedia Anda menerima ID model arbitrer (seperti proksi atau router),
tambahkan Jika resolusi memerlukan panggilan jaringan, gunakan
resolveDynamicModel:prepareDynamicModel untuk pemanasan
asinkron - resolveDynamicModel dijalankan kembali setelah proses tersebut selesai.4
Tambahkan hook runtime (sesuai kebutuhan)
Sebagian besar penyedia hanya memerlukan Keluarga pemutaran ulang yang tersedia saat ini:
catalog + resolveDynamicModel. Tambahkan hook
secara bertahap sesuai kebutuhan penyedia Anda.Pembuat pembantu bersama kini mencakup keluarga kompatibilitas pemutaran ulang/alat
yang paling umum, sehingga plugin biasanya tidak perlu merangkai setiap hook satu per satu secara manual:Keluarga aliran yang tersedia saat ini:
Seam SDK yang mendukung pembuat keluarga
Seam SDK yang mendukung pembuat keluarga
Setiap pembuat keluarga disusun dari pembantu publik tingkat rendah yang diekspor dari paket yang sama, yang dapat Anda gunakan ketika penyedia perlu menyimpang dari pola umum:
openclaw/plugin-sdk/provider-model-shared-ProviderReplayFamily,buildProviderReplayFamilyHooks(...), dan pembuat pemutaran ulang mentah (buildOpenAICompatibleReplayPolicy,buildAnthropicReplayPolicyForModel,buildGoogleGeminiReplayPolicy,buildHybridAnthropicOrOpenAIReplayPolicy). Juga mengekspor pembantu pemutaran ulang Gemini (sanitizeGoogleGeminiReplayHistory,resolveTaggedReasoningOutputMode) serta pembantu titik akhir/model (resolveProviderEndpoint,normalizeProviderId,normalizeGooglePreviewModelId).openclaw/plugin-sdk/provider-stream-ProviderStreamFamily,buildProviderStreamFamilyHooks(...),composeProviderStreamWrappers(...), ditambah pembungkus OpenAI/Codex bersama (createOpenAIAttributionHeadersWrapper,createOpenAIFastModeWrapper,createOpenAIServiceTierWrapper,createOpenAIResponsesContextManagementWrapper,createCodexNativeWebSearchWrapper), pembungkus DeepSeek V4 yang kompatibel dengan OpenAI (createDeepSeekV4OpenAICompatibleThinkingWrapper), pembersihan prefill pemikiran Anthropic Messages (createAnthropicThinkingPrefillPayloadWrapper), kompatibilitas panggilan alat teks biasa (createPlainTextToolCallCompatWrapper), serta pembungkus proksi/penyedia bersama (createOpenRouterWrapper,createToolStreamWrapper,createMinimaxFastModeWrapper).openclaw/plugin-sdk/provider-stream-shared- pembungkus payload dan peristiwa ringan untuk jalur penyedia panas, termasukcreateOpenAICompatibleCompletionsThinkingOffWrapper,createPayloadPatchStreamWrapper,createPlainTextToolCallCompatWrapper,normalizeOpenAICompatibleReasoningPayload(...), dansetQwenChatTemplateThinking(...).openclaw/plugin-sdk/provider-tools-ProviderToolCompatFamily,buildProviderToolCompatFamilyHooks("deepseek" | "gemini" | "openai"), dan pembantu skema penyedia yang mendasarinya.
native
agar OpenClaw menggunakan bagian pemikiran native tanpa menambahkan
direktif prompt <think> / <final>. Backend bergaya Gemini CLI khusus teks
yang mengurai respons JSON/teks akhir dapat mempertahankan kontrak bertanda
google-gemini bersama.Beberapa pembantu aliran sengaja tetap bersifat lokal bagi penyedia. @openclaw/anthropic-provider mempertahankan wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier, dan pembuat pembungkus Anthropic tingkat rendah dalam seam publik api.ts / contract-api.ts miliknya karena semuanya mengodekan penanganan beta OAuth Claude dan pemberian gerbang context1m. Plugin xAI juga mempertahankan pembentukan Responses xAI native dalam wrapStreamFn miliknya sendiri (alias /fast, tool_stream default, pembersihan alat ketat yang tidak didukung, penghapusan payload penalaran khusus xAI).Pola akar paket yang sama juga mendukung @openclaw/openai-provider (pembuat penyedia, pembantu model default, pembuat penyedia waktu nyata) dan @openclaw/openrouter-provider (pembuat penyedia beserta pembantu orientasi awal/konfigurasi).- Pertukaran token
- Header khusus
- Identitas transportasi native
- Penggunaan dan penagihan
Untuk penyedia yang memerlukan pertukaran token sebelum setiap panggilan inferensi:
Hook penyedia umum
Hook penyedia umum
OpenClaw memanggil hook kira-kira dalam urutan ini untuk plugin model/penyedia.
Sebagian besar penyedia hanya menggunakan 2-3. Ini bukan kontrak
ProviderPlugin
lengkap - lihat Internal: Hook Runtime
Penyedia untuk
daftar hook lengkap yang akurat saat ini dan catatan fallback.
Bidang penyedia khusus kompatibilitas yang tidak lagi dipanggil OpenClaw, seperti
ProviderPlugin.capabilities dan suppressBuiltInModel, tidak dicantumkan
di sini.Catatan fallback runtime:
normalizeConfigmeresolusi satu plugin pemilik per ID penyedia (penyedia bawaan terlebih dahulu, lalu plugin runtime yang cocok) dan hanya memanggil hook tersebut - tidak ada pemindaian terhadap penyedia lain. HooknormalizeConfigmilik Google sendiri yang menormalisasi entri konfigurasigoogle/google-vertex/google-antigravity; ini bukan fallback inti yang terpisah.resolveConfigApiKeymenggunakan hook penyedia ketika diekspos. Amazon Bedrock mempertahankan resolusi penanda lingkungan AWS dalam plugin penyedianya; autentikasi runtime itu sendiri tetap menggunakan rantai default AWS SDK ketika dikonfigurasi denganauth: "aws-sdk".resolveThinkingProfile(ctx)menerimaprovideryang dipilih,modelId, petunjuk katalogreasoninggabungan opsional, dan fakta modelcompatgabungan opsional. Gunakancompathanya untuk memilih UI/profil pemikiran penyedia.resolveSystemPromptContributionmemungkinkan penyedia menyuntikkan panduan prompt sistem yang sadar cache untuk sebuah keluarga model. Utamakan ini daripada hookbefore_prompt_buildlama di seluruh plugin ketika perilaku tersebut hanya dimiliki satu keluarga penyedia/model dan harus mempertahankan pemisahan cache stabil/dinamis.
5
Tambahkan kemampuan tambahan (opsional)
Langkah 5: Tambahkan kemampuan tambahan
Plugin penyedia dapat mendaftarkan embedding, ucapan, transkripsi realtime, suara realtime, pemahaman media, pembuatan gambar, pembuatan video, pengambilan web, dan pencarian web bersama inferensi teks. OpenClaw mengklasifikasikannya sebagai plugin kemampuan-hibrida - pola yang direkomendasikan untuk plugin perusahaan (satu plugin per vendor). Lihat Internal: Kepemilikan Kemampuan.Daftarkan setiap kemampuan di dalamregister(api) bersama pemanggilan
api.registerProvider(...) yang sudah ada. Pilih hanya tab yang diperlukan:- Ucapan (TTS)
- Transkripsi realtime
- Suara waktu nyata
- Pemahaman media
- Embedding
- Pembuatan gambar dan video
- Pengambilan dan pencarian web
assertOkOrThrowProviderError(...) untuk kegagalan HTTP penyedia agar
plugin berbagi pembacaan body kesalahan yang dibatasi, penguraian kesalahan JSON, dan
sufiks ID permintaan.6
Uji
Langkah 6: Uji
src/provider.test.ts
Publikasikan ke ClawHub
Plugin penyedia dipublikasikan dengan cara yang sama seperti Plugin kode eksternal lainnya:clawhub skill publish <path> adalah perintah lain untuk memublikasikan folder skill,
bukan paket Plugin - jangan gunakan perintah tersebut di sini.
Struktur file
Referensi urutan katalog
catalog.order mengontrol kapan katalog Anda digabungkan relatif terhadap penyedia
bawaan:
Langkah berikutnya
- Plugin Saluran - jika plugin Anda juga menyediakan saluran
- Runtime SDK - pembantu
api.runtime(TTS, pencarian, subagen) - Ikhtisar SDK - referensi lengkap impor subjalur
- Internal Plugin - detail hook dan contoh bawaan