Building plugins
افزودن قابلیتها (راهنمای مشارکتکنندگان)
وقتی OpenClaw به یک دامنه مشترک جدید مانند جاسازیها، تولید تصویر، تولید ویدئو، یا یک حوزه قابلیت آینده با پشتوانه فروشنده نیاز دارد، از این راهنما استفاده کنید.
قاعده:
- Plugin = مرز مالکیت
- قابلیت = قرارداد مشترک هسته
کار را با اتصال مستقیم یک فروشنده به یک کانال یا ابزار شروع نکنید. با تعریف قابلیت شروع کنید.
چه زمانی یک قابلیت ایجاد کنیم
وقتی همه موارد زیر درست هستند، یک قابلیت جدید ایجاد کنید:
- بیش از یک فروشنده بتواند بهطور معقول آن را پیادهسازی کند.
- کانالها، ابزارها، یا Pluginهای قابلیت باید بدون اهمیت دادن به فروشنده از آن استفاده کنند.
- هسته باید مالک رفتار جایگزینی، سیاست، پیکربندی، یا تحویل باشد.
اگر کار فقط مربوط به فروشنده است و هنوز هیچ قرارداد مشترکی وجود ندارد، توقف کنید و ابتدا قرارداد را تعریف کنید.
توالی استاندارد
- قرارداد تایپشده هسته را تعریف کنید.
- ثبت Plugin را برای آن قرارداد اضافه کنید.
- یک کمککننده مشترک زمان اجرا اضافه کنید.
- یک Plugin فروشنده واقعی را بهعنوان اثبات متصل کنید.
- مصرفکنندگان قابلیت/کانال را به کمککننده زمان اجرا منتقل کنید.
- تستهای قرارداد را اضافه کنید.
- پیکربندی و مدل مالکیت روبهروی اپراتور را مستند کنید.
چه چیزی کجا قرار میگیرد
هسته:
- نوعهای درخواست/پاسخ.
- رجیستری ارائهدهنده + حلوفصل.
- رفتار جایگزینی.
- شِمای پیکربندی همراه با فراداده مستندات
title/descriptionمنتشرشده روی گرههای آبجکت تودرتو، وایلدکارت، آیتم آرایه، و ترکیب. - سطح کمککننده زمان اجرا.
Plugin فروشنده:
- فراخوانیهای API فروشنده.
- مدیریت احراز هویت فروشنده.
- نرمالسازی درخواست ویژه فروشنده.
- ثبت پیادهسازی قابلیت.
Plugin قابلیت/کانال:
api.runtime.*یا کمککننده متناظرplugin-sdk/*-runtimeرا فراخوانی میکند.- هرگز پیادهسازی فروشنده را مستقیما فراخوانی نمیکند.
مرزهای ارائهدهنده و مهار
وقتی رفتار به قرارداد ارائهدهنده مدل تعلق دارد نه حلقه عمومی عامل، از قلابهای ارائهدهنده استفاده کنید. نمونهها شامل پارامترهای درخواست ویژه ارائهدهنده پس از انتخاب انتقال، ترجیح پروفایل احراز هویت، همپوشانیهای پرامپت، و مسیریابی جایگزین پیگیری پس از جابهجایی مدل/پروفایل هستند.
وقتی رفتار به زمان اجرایی تعلق دارد که یک نوبت را اجرا میکند، از قلابهای مهار عامل استفاده کنید. مهارها میتوانند خروجیهای صریح پروتکل مانند خروجی خالی، استدلال بدون خروجی قابل مشاهده، یا یک طرح ساختاریافته بدون پاسخ نهایی را طبقهبندی کنند تا سیاست جایگزینی مدل بیرونی بتواند درباره تلاش دوباره تصمیم بگیرد.
هر دو مرز را باریک نگه دارید:
- هسته مالک سیاست تلاش دوباره/جایگزینی است.
- Pluginهای ارائهدهنده مالک اشارههای درخواست/احراز هویت/مسیریابی ویژه ارائهدهنده هستند.
- Pluginهای مهار مالک طبقهبندی تلاش ویژه زمان اجرا هستند.
- Pluginهای شخص ثالث اشاره برمیگردانند، نه جهش مستقیم در وضعیت هسته.
چکلیست فایل
برای یک قابلیت جدید، انتظار داشته باشید این نواحی را تغییر دهید:
src/<capability>/types.tssrc/<capability>/...registry/runtime.tssrc/plugins/types.tssrc/plugins/registry.tssrc/plugins/captured-registration.tssrc/plugins/contracts/registry.tssrc/plugins/runtime/types-core.tssrc/plugins/runtime/index.tssrc/plugin-sdk/<capability>.tssrc/plugin-sdk/<capability>-runtime.ts- یک یا چند بسته Plugin باندلشده.
- پیکربندی، مستندات، تستها.
مثال کامل: تولید تصویر
تولید تصویر از شکل استاندارد پیروی میکند:
- هسته
ImageGenerationProviderرا تعریف میکند. - هسته
registerImageGenerationProvider(...)را در دسترس میگذارد. - هسته
runtime.imageGeneration.generate(...)را در دسترس میگذارد. - Pluginهای
openai،google،fal، وminimaxپیادهسازیهای دارای پشتوانه فروشنده را ثبت میکنند. - فروشندههای آینده همان قرارداد را بدون تغییر کانالها/ابزارها ثبت میکنند.
کلید پیکربندی عمدا از مسیریابی تحلیل بینایی جدا است:
agents.defaults.imageModelتصاویر را تحلیل میکند.agents.defaults.imageGenerationModelتصاویر را تولید میکند.
اینها را جدا نگه دارید تا جایگزینی و سیاست صریح بمانند.
ارائهدهندههای جاسازی
برای ارائهدهندههای جاسازی برداری قابل استفاده مجدد، از embeddingProviders استفاده کنید. این قرارداد
عمدا گستردهتر از حافظه است: ابزارها، جستوجو، بازیابی، واردکنندهها، یا
Pluginهای قابلیت آینده میتوانند بدون وابستگی به موتور حافظه از جاسازیها استفاده کنند.
جستوجوی حافظه میتواند از embeddingProviders عمومی استفاده کند. قرارداد قدیمیتر
memoryEmbeddingProviders یک سازگاری منسوخشده است تا زمانی که ارائهدهندههای
ویژه حافظه موجود مهاجرت کنند؛ ارائهدهندههای جاسازی قابل استفاده مجدد جدید باید از
embeddingProviders استفاده کنند.
چکلیست بازبینی
پیش از انتشار یک قابلیت جدید، بررسی کنید:
- هیچ کانال/ابزاری کد فروشنده را مستقیما وارد نمیکند.
- کمککننده زمان اجرا مسیر مشترک است.
- دستکم یک تست قرارداد مالکیت باندلشده را اثبات میکند.
- مستندات پیکربندی نام مدل/کلید پیکربندی جدید را ذکر میکنند.
- مستندات Plugin مرز مالکیت را توضیح میدهند.
اگر یک PR لایه قابلیت را دور میزند و رفتار فروشنده را در یک کانال/ابزار سختکد میکند، آن را برگردانید و ابتدا قرارداد را تعریف کنید.
مرتبط
- درونیات Plugin — مدل قابلیت، مالکیت، خط لوله بارگذاری، کمککنندههای زمان اجرا.
- ساخت Pluginها — آموزش اولین Plugin.
- نمای کلی SDK — نقشه ایمپورت و مرجع API ثبت.
- ایجاد Skills — سطح همراه مشارکتکننده.