يرشدك هذا الدليل خلال بناء Plugin مزوّد يضيف مزوّد نماذج (LLM) إلى OpenClaw. بحلول النهاية، سيكون لديك مزوّد مع كتالوج نماذج، ومصادقة بمفتاح API، وحل ديناميكي للنماذج.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.
إذا لم تكن قد أنشأت أي Plugin لـ OpenClaw من قبل، فاقرأ
بدء الاستخدام أولًا لمعرفة بنية الحزمة
الأساسية وإعداد البيان.
شرح تفصيلي
Package and manifest
الخطوة 1: الحزمة والبيان
providerAuthEnvVars حتى يتمكن OpenClaw من اكتشاف
بيانات الاعتماد من دون تحميل وقت تشغيل Plugin الخاص بك. أضف providerAuthAliases
عندما يجب أن يعيد متغير مزوّد استخدام مصادقة معرّف مزوّد آخر. modelSupport
اختياري، ويتيح لـ OpenClaw تحميل Plugin المزوّد تلقائيًا من معرّفات
النماذج المختصرة مثل acme-large قبل وجود خطافات وقت التشغيل. إذا نشرت
المزوّد على ClawHub، فستكون حقول openclaw.compat وopenclaw.build
هذه مطلوبة في package.json.Register the provider
يحتاج مزوّد نصوص بسيط إلى يعيد
id، وlabel، وauth، وcatalog.
catalog هو خطاف وقت التشغيل/الإعداد الذي يملكه المزوّد؛ يمكنه استدعاء
واجهات API مباشرة للبائع وإرجاع إدخالات models.providers.index.ts
registerModelCatalogProvider هو سطح كتالوج مستوى التحكم الأحدث
لواجهة مستخدم القوائم/المساعدة/الاختيار. استخدمه لصفوف النصوص، وتوليد الصور،
وتوليد الفيديو، وتوليد الموسيقى. أبقِ استدعاءات نقاط نهاية البائع
وربط الاستجابات داخل Plugin؛ يملك OpenClaw شكل الصف المشترك، وتسميات
المصدر، وعرض المساعدة.هذا مزوّد عامل. يمكن للمستخدمين الآن تشغيل
openclaw onboard --acme-ai-api-key <key> واختيار
acme-ai/acme-large كنموذج لهم.إذا كان المزوّد upstream يستخدم رموز تحكم مختلفة عن OpenClaw، فأضف
تحويل نص صغيرًا ثنائي الاتجاه بدلًا من استبدال مسار البث:input كتابة موجه النظام النهائي ومحتوى الرسائل النصية قبل
النقل. يعيد output كتابة دلتا نص المساعد والنص النهائي قبل أن
يحلل OpenClaw علامات التحكم الخاصة به أو تسليم القناة.بالنسبة إلى المزوّدين المضمّنين الذين يسجلون مزوّد نص واحدًا فقط مع مصادقة
بمفتاح API إضافة إلى وقت تشغيل واحد مدعوم بكتالوج، فضّل مساعد
defineSingleProviderPluginEntry(...) الأضيق نطاقًا:buildProvider هو مسار الكتالوج المباشر المستخدم عندما يستطيع OpenClaw
حل مصادقة مزوّد حقيقية. يمكنه تنفيذ اكتشاف خاص بالمزوّد. استخدم
buildStaticProvider فقط للصفوف غير المتصلة الآمنة للعرض قبل تهيئة
المصادقة؛ يجب ألا يتطلب بيانات اعتماد أو يجري طلبات شبكة.
ينفّذ عرض models list --all في OpenClaw حاليًا الكتالوجات الثابتة
فقط لـ Plugins المزوّدين المضمّنين، مع إعداد فارغ، وبيئة فارغة، ومن دون
مسارات وكيل/مساحة عمل.إذا كان تدفق المصادقة لديك يحتاج أيضًا إلى تعديل models.providers.*،
والبدائل، والنموذج الافتراضي للوكيل أثناء الإعداد، فاستخدم مساعدات الإعداد
المسبق من openclaw/plugin-sdk/provider-onboard. أضيق المساعدات نطاقًا هي
createDefaultModelPresetAppliers(...)،
وcreateDefaultModelsPresetAppliers(...)، و
createModelCatalogPresetAppliers(...).عندما تدعم نقطة النهاية الأصلية لمزوّد كتل استخدام مبثوثة عبر نقل
openai-completions العادي، فضّل مساعدات الكتالوج المشتركة في
openclaw/plugin-sdk/provider-catalog-shared بدلًا من ترميز فحوصات
معرّفات المزوّدين بشكل ثابت. تكتشف supportsNativeStreamingUsageCompat(...)
وapplyProviderNativeStreamingUsageCompat(...) الدعم من خريطة قدرات
نقطة النهاية، لذلك تظل نقاط النهاية الأصلية بأسلوب Moonshot/DashScope
مشتركة حتى عندما يستخدم Plugin معرّف مزوّد مخصصًا.Add dynamic model resolution
إذا كان مزوّدك يقبل معرّفات نماذج عشوائية (مثل وكيل أو موجّه)،
فأضف إذا كان الحل يتطلب استدعاء شبكة، فاستخدم
resolveDynamicModel:prepareDynamicModel للتهيئة
غير المتزامنة - يعمل resolveDynamicModel مرة أخرى بعد اكتمالها.Add runtime hooks (as needed)
يحتاج معظم المزوّدين فقط إلى عائلات إعادة التشغيل المتاحة اليوم:
عائلات التدفق المتاحة اليوم:
catalog + resolveDynamicModel. أضف
الخطافات تدريجيًا حسب ما يتطلبه مزوّدك.تغطي بُناة المساعدات المشتركة الآن أكثر عائلات إعادة التشغيل/توافق الأدوات
شيوعًا، لذلك لا تحتاج Plugins عادةً إلى توصيل كل خطاف يدويًا واحدًا تلو الآخر:| العائلة | ما الذي توصله | أمثلة مضمنة |
|---|---|---|
openai-compatible | سياسة إعادة تشغيل مشتركة بأسلوب OpenAI للنواقل المتوافقة مع OpenAI، بما في ذلك تنظيف معرّفات استدعاءات الأدوات، وإصلاحات ترتيب المساعد أولاً، والتحقق العام من أدوار Gemini حيث يحتاج النقل إلى ذلك | moonshot, ollama, xai, zai |
anthropic-by-model | سياسة إعادة تشغيل مدركة لـ Claude تُختار بواسطة modelId، بحيث لا تحصل نواقل رسائل Anthropic إلا على تنظيف كتل التفكير الخاصة بـ Claude عندما يكون النموذج المحسوم معرّف Claude فعلاً | amazon-bedrock, anthropic-vertex |
google-gemini | سياسة إعادة تشغيل Gemini الأصلية، بالإضافة إلى تنظيف إعادة تشغيل التمهيد ووضع إخراج التفكير الموسوم | google, google-gemini-cli |
passthrough-gemini | تنظيف توقيع التفكير في Gemini لنماذج Gemini العاملة عبر نواقل وكيل متوافقة مع OpenAI؛ لا يفعّل تحقق إعادة التشغيل الأصلي لـ Gemini أو إعادة كتابة التمهيد | openrouter, kilocode, opencode, opencode-go |
hybrid-anthropic-openai | سياسة هجينة لموفري الخدمة الذين يمزجون أسطح نماذج رسائل Anthropic والنماذج المتوافقة مع OpenAI في Plugin واحد؛ يظل إسقاط كتل التفكير الاختياري الخاص بـ Claude محصوراً في جانب Anthropic | minimax |
| العائلة | ما الذي توصله | أمثلة مضمنة |
|---|---|---|
google-thinking | تطبيع حمولة تفكير Gemini على مسار التدفق المشترك | google, google-gemini-cli |
kilocode-thinking | غلاف استدلال Kilo على مسار تدفق الوكيل المشترك، مع تخطي kilo/auto ومعرّفات استدلال الوكيل غير المدعومة للتفكير المحقون | kilocode |
moonshot-thinking | ربط حمولة التفكير الأصلي الثنائية في Moonshot من الإعداد + مستوى /think | moonshot |
minimax-fast-mode | إعادة كتابة نموذج الوضع السريع في MiniMax على مسار التدفق المشترك | minimax, minimax-portal |
openai-responses-defaults | أغلفة Responses الأصلية المشتركة لـ OpenAI/Codex: ترويسات الإسناد، و/fast/serviceTier، وإسهاب النص، وبحث الويب الأصلي في Codex، وتشكيل حمولة توافق الاستدلال، وإدارة سياق Responses | openai, openai-codex |
openrouter-thinking | غلاف استدلال OpenRouter لمسارات الوكيل، مع معالجة مركزية لتخطي النموذج غير المدعوم/auto | openrouter |
tool-stream-default-on | غلاف tool_stream المفعّل افتراضياً لموفري الخدمة مثل Z.AI الذين يريدون تدفق الأدوات ما لم يُعطّل صراحةً | zai |
SDK seams powering the family builders
SDK seams powering the family builders
يتكون كل منشئ عائلة من مساعدين عامين أدنى مستوى مُصدّرين من الحزمة نفسها، ويمكنك استخدامها عندما يحتاج موفر الخدمة إلى الخروج عن النمط الشائع:
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)، وأغلفة الوكيل/موفر الخدمة المشتركة (createOpenRouterWrapperوcreateToolStreamWrapperوcreateMinimaxFastModeWrapper).openclaw/plugin-sdk/provider-tools-ProviderToolCompatFamilyوbuildProviderToolCompatFamilyHooks("gemini")ومساعدو مخططات Gemini الأساسيون (normalizeGeminiToolSchemasوinspectGeminiToolSchemas).
@openclaw/anthropic-provider بكل من wrapAnthropicProviderStream وresolveAnthropicBetas وresolveAnthropicFastMode وresolveAnthropicServiceTier ومنشئي أغلفة Anthropic الأدنى مستوى في seam العامة الخاصة بها api.ts / contract-api.ts لأنها ترمز معالجة Claude OAuth beta وبوابة context1m. وبالمثل، يحتفظ Plugin xAI بتشكيل Responses الأصلي الخاص بـ xAI في wrapStreamFn الخاص به (الأسماء المستعارة لـ /fast، وtool_stream الافتراضي، وتنظيف الأدوات الصارمة غير المدعومة، وإزالة حمولة الاستدلال الخاصة بـ xAI).يدعم نمط جذر الحزمة نفسه أيضاً @openclaw/openai-provider (منشئي موفر الخدمة، ومساعدي النموذج الافتراضي، ومنشئي موفر الخدمة الفوري) و@openclaw/openrouter-provider (منشئ موفر الخدمة بالإضافة إلى مساعدي الإعداد/التهيئة).- Token exchange
- Custom headers
- Native transport identity
- Usage and billing
لموفري الخدمة الذين يحتاجون إلى تبادل رمز قبل كل استدعاء استدلال:
All available provider hooks
All available provider hooks
يستدعي OpenClaw الخطاطيف بهذا الترتيب. يستخدم معظم موفري الخدمة 2-3 فقط:
حقول موفر الخدمة الخاصة بالتوافق فقط، التي لم يعد OpenClaw يستدعيها، مثل
ملاحظات الرجوع الاحتياطي في وقت التشغيل:
ProviderPlugin.capabilities وsuppressBuiltInModel، غير مدرجة
هنا.| # | الخطاف | متى تستخدمه |
|---|---|---|
| 1 | catalog | كتالوج النماذج أو افتراضيات عنوان URL الأساسي |
| 2 | applyConfigDefaults | الافتراضات العامة المملوكة لموفر الخدمة أثناء تجسيد الإعداد |
| 3 | normalizeModelId | تنظيف الأسماء المستعارة القديمة/المعاينة لمعرّف النموذج قبل البحث |
| 4 | normalizeTransport | تنظيف api / baseUrl لعائلة موفر الخدمة قبل تجميع النموذج العام |
| 5 | normalizeConfig | تطبيع إعداد models.providers.<id> |
| 6 | applyNativeStreamingUsageCompat | إعادة كتابة توافق استخدام التدفق الأصلي لموفري الإعدادات |
| 7 | resolveConfigApiKey | حل المصادقة بعلامة البيئة المملوك لموفر الخدمة |
| 8 | resolveSyntheticAuth | مصادقة تركيبية محلية/مستضافة ذاتياً أو مدعومة بالإعداد |
| 9 | shouldDeferSyntheticProfileAuth | تخفيض العناصر النائبة للملف الشخصي التركيبي المخزن خلف مصادقة البيئة/الإعداد |
| 10 | resolveDynamicModel | قبول معرّفات نماذج المنبع العشوائية |
| 11 | prepareDynamicModel | جلب بيانات وصفية غير متزامن قبل الحل |
| 12 | normalizeResolvedModel | إعادة كتابة النقل قبل المشغّل |
| 13 | contributeResolvedModelCompat | أعلام التوافق لنماذج المورّد خلف نقل متوافق آخر |
| 14 | normalizeToolSchemas | تنظيف مخطط الأدوات المملوك لموفر الخدمة قبل التسجيل |
| 15 | inspectToolSchemas | تشخيصات مخطط الأدوات المملوكة لموفر الخدمة |
| 16 | resolveReasoningOutputMode | عقد إخراج الاستدلال الموسوم مقابل الأصلي |
| 17 | prepareExtraParams | معاملات الطلب الافتراضية |
| 18 | createStreamFn | نقل StreamFn مخصص بالكامل |
| 19 | wrapStreamFn | أغلفة ترويسات/متن مخصصة على مسار التدفق العادي |
| 20 | resolveTransportTurnState | ترويسات/بيانات وصفية أصلية لكل دور |
| 21 | resolveWebSocketSessionPolicy | ترويسات/فترة تهدئة جلسة WS أصلية |
| 22 | formatApiKey | شكل رمز تشغيل مخصص |
| 23 | refreshOAuth | تحديث OAuth مخصص |
| 24 | buildAuthDoctorHint | إرشادات إصلاح المصادقة |
| 25 | matchesContextOverflowError | اكتشاف تجاوز السعة المملوك لموفر الخدمة |
| 26 | classifyFailoverReason | تصنيف حد المعدل/الحمل الزائد المملوك لموفر الخدمة |
| 27 | isCacheTtlEligible | بوابة TTL لذاكرة التخزين المؤقت للموجه |
| 28 | buildMissingAuthMessage | تلميح مخصص للمصادقة المفقودة |
| 29 | augmentModelCatalog | صفوف توافق أمامية تركيبية |
| 30 | resolveThinkingProfile | مجموعة خيارات /think الخاصة بالنموذج |
| 31 | isBinaryThinking | توافق تشغيل/إيقاف التفكير الثنائي |
| 32 | supportsXHighThinking | توافق دعم استدلال xhigh |
| 33 | resolveDefaultThinkingLevel | توافق سياسة /think الافتراضية |
| 34 | isModernModelRef | مطابقة نموذج مباشرة/دخانية |
| 35 | prepareRuntimeAuth | تبادل الرمز قبل الاستدلال |
| 36 | resolveUsageAuth | تحليل بيانات اعتماد الاستخدام المخصصة |
| 37 | fetchUsageSnapshot | نقطة نهاية استخدام مخصصة |
| 38 | createEmbeddingProvider | محول تضمين مملوك لموفر الخدمة للذاكرة/البحث |
| 39 | buildReplayPolicy | سياسة مخصصة لإعادة تشغيل/Compaction النص |
| 40 | sanitizeReplayHistory | إعادة كتابة إعادة التشغيل الخاصة بموفر الخدمة بعد التنظيف العام |
| 41 | validateReplayTurns | تحقق صارم من أدوار إعادة التشغيل قبل المشغّل المضمن |
| 42 | onModelSelected | استدعاء لاحق للاختيار (مثل القياسات عن بُعد) |
- يتحقق
normalizeConfigمن موفر الخدمة المطابق أولاً، ثم من إضافات موفري الخدمة الأخرى القادرة على الخطافات إلى أن يغير أحدها الإعداد فعلياً. إذا لم يُعد أي خطاف موفر خدمة كتابة إدخال إعداد مدعوم لعائلة Google، فسيظل مطبّع إعدادات Google المضمن مطبقاً. - يستخدم
resolveConfigApiKeyخطاف موفر الخدمة عندما يكون مكشوفاً. كما يحتوي مسارamazon-bedrockالمضمن على حال مدمج لعلامات بيئة AWS هنا، رغم أن مصادقة تشغيل Bedrock نفسها لا تزال تستخدم السلسلة الافتراضية لـ AWS SDK. - يتيح
resolveSystemPromptContributionلموفر الخدمة حقن إرشادات موجه نظام مدركة لذاكرة التخزين المؤقت لعائلة نموذج. فضّله علىbefore_prompt_buildعندما يخص السلوك عائلة موفر/نموذج واحدة وينبغي أن يحافظ على تقسيم ذاكرة التخزين المؤقت المستقر/الديناميكي.
Add extra capabilities (optional)
الخطوة 5: أضف قدرات إضافية
يمكن لـ Plugin مزود تسجيل الكلام، والنسخ الفوري، والصوت الفوري، وفهم الوسائط، وتوليد الصور، وتوليد الفيديو، وجلب الويب، والبحث في الويب إلى جانب استدلال النص. يصنّف OpenClaw ذلك باعتباره Plugin ذا قدرات هجينة - وهو النمط الموصى به لـ Plugins الشركات (Plugin واحد لكل مورّد). راجع داخليًا: ملكية القدرات.سجّل كل قدرة داخلregister(api) إلى جانب استدعاء
api.registerProvider(...) الموجود لديك. اختر علامات التبويب التي تحتاجها فقط:- Speech (TTS)
- Realtime transcription
- Realtime voice
- Media understanding
- Image and video generation
- Web fetch and search
assertOkOrThrowProviderError(...) لإخفاقات HTTP الخاصة بالمزود كي
تشارك Plugins قراءات جسم الخطأ المحدودة، وتحليل أخطاء JSON، ولاحقات
معرّف الطلب.Test
الخطوة 6: الاختبار
src/provider.test.ts
النشر إلى ClawHub
تنشر Plugins المزود بالطريقة نفسها مثل أي Plugin كود خارجي آخر:clawhub package publish.
بنية الملفات
مرجع ترتيب الكتالوج
يتحكمcatalog.order في وقت دمج الكتالوج الخاص بك بالنسبة إلى
المزودين المضمّنين:
| الترتيب | متى | حالة الاستخدام |
|---|---|---|
simple | المرور الأول | مزودو مفاتيح API البسيطة |
profile | بعد simple | مزودون مشروطون بملفات تعريف المصادقة |
paired | بعد profile | تركيب عدة إدخالات مرتبطة |
late | المرور الأخير | تجاوز المزودين الحاليين (يفوز عند التصادم) |
الخطوات التالية
- Plugins القنوات - إذا كان Plugin الخاص بك يوفّر قناة أيضًا
- وقت تشغيل SDK - مساعدات
api.runtime(TTS، البحث، الوكيل الفرعي) - نظرة عامة على SDK - مرجع استيراد المسارات الفرعية الكامل
- داخليات Plugin - تفاصيل الخطافات وأمثلة مضمّنة