Уперше працюєте з плагінами OpenClaw? Спочатку прочитайте Початок роботи,
щоб дізнатися про структуру пакета та налаштування маніфесту.
Покроковий посібник
1
Пакет і маніфест
Крок 1: Пакет і маніфест
setup.providers[].envVars дає змогу OpenClaw виявляти облікові дані без
завантаження середовища виконання вашого Plugin. Додайте providerAuthAliases, коли варіант
провайдера має повторно використовувати автентифікацію іншого ідентифікатора провайдера. modelSupport
є необов’язковим і дає змогу OpenClaw автоматично завантажувати Plugin вашого провайдера за скороченими
ідентифікаторами моделей, як-от acme-large, до появи обробників середовища виконання. openclaw.compat
і openclaw.build у package.json обов’язкові для публікації в ClawHub
(openclaw.compat.pluginApi і openclaw.build.openclawVersion —
два обов’язкові поля; якщо minGatewayVersion не вказано, використовується
openclaw.install.minHostVersion).2
Зареєструйте провайдера
Мінімальному текстовому провайдеру потрібні Використовуйте
id, label, auth і catalog.
catalog — це обробник середовища виконання та конфігурації, яким володіє провайдер; він може викликати активні
API постачальника та повертає записи models.providers.index.ts
registerModelCatalogProvider — це новіша поверхня каталогу площини керування
для інтерфейсів списку, довідки та вибору, яка охоплює рядки text, voice, image_generation,
video_generation і music_generation. Зберігайте виклики кінцевих точок
постачальника та перетворення відповідей у Plugin; OpenClaw керує спільною формою
рядків, позначками джерел і відображенням довідки.Це вже робочий провайдер. Тепер користувачі можуть виконати
openclaw onboard --acme-ai-api-key <key> і вибрати
acme-ai/acme-large як свою модель.Динамічне виявлення моделей
Якщо ваш провайдер надає API на кшталт/models, зберігайте специфічну для провайдера
кінцеву точку та перетворення рядків у своєму Plugin і використовуйте
openclaw/plugin-sdk/provider-catalog-live-runtime для спільного життєвого циклу
отримання даних. Допоміжний засіб надає захищені HTTP-запити, заголовки автентифікації провайдера,
структуровані помилки HTTP, кешування за TTL і статичну резервну поведінку без
перенесення політики провайдера до ядра OpenClaw.Використовуйте buildLiveModelProviderConfig, коли активний API повідомляє лише про те, які
статичні рядки каталогу, якими володіє провайдер, наразі доступні:index.ts
getCachedLiveProviderModelRows, коли API провайдера повертає багатші
метадані й Plugin має самостійно перетворювати рядки на визначення моделей
OpenClaw:index.ts
run має залишатися захищеним автентифікацією та повертати null, коли немає придатних облікових даних.
Зберігайте автономний staticRun або статичний резервний варіант, щоб налаштування, документація,
тести та інтерфейси вибору не залежали від доступу до мережі. Використовуйте TTL,
що відповідає вимогам до актуальності списку моделей, уникайте опитування файлової системи під час запиту
та передавайте специфічні для провайдера readRows / readModelId, лише коли
відповідь зовнішнього сервісу не має сумісної з OpenAI форми { data: [{ id, object }] }.Якщо зовнішній провайдер використовує інші керівні токени, ніж OpenClaw, додайте невелике
двонапрямне перетворення тексту замість заміни шляху потокового передавання:input перезаписує остаточний системний запит і текстовий вміст повідомлення перед
передаванням. output перезаписує текстові дельти асистента та остаточний текст до того, як
OpenClaw розбере власні керівні маркери або передасть дані каналу.Для вбудованих провайдерів, які реєструють лише одного текстового провайдера з автентифікацією
за ключем API та єдиним середовищем виконання на основі каталогу, віддавайте перевагу вужчому
допоміжному засобу defineSingleProviderPluginEntry(...):buildProvider — це шлях динамічного каталогу, який використовується, коли OpenClaw може визначити справжні
дані автентифікації постачальника. Він може виконувати виявлення, специфічне для постачальника. Використовуйте
buildStaticProvider лише для офлайн-рядків, які можна безпечно показувати до налаштування
автентифікації; він не повинен вимагати облікових даних або виконувати мережеві запити.
Наразі відображення models list --all в OpenClaw виконує статичні каталоги
лише для вбудованих плагінів постачальників із порожньою конфігурацією, порожнім середовищем і без
шляхів агента чи робочого простору.Якщо ваш процес автентифікації також має змінювати models.providers.*, псевдоніми та
стандартну модель агента під час початкового налаштування, використовуйте допоміжні функції попередніх налаштувань із
openclaw/plugin-sdk/provider-onboard. Найвужчими допоміжними функціями є
createDefaultModelPresetAppliers(...),
createDefaultModelsPresetAppliers(...) і
createModelCatalogPresetAppliers(...).Коли власна кінцева точка постачальника підтримує потокові блоки використання у
звичайному транспорті openai-completions, віддавайте перевагу спільним допоміжним функціям каталогу з
openclaw/plugin-sdk/provider-catalog-shared, а не жорстко закодованим
перевіркам ідентифікатора постачальника. supportsNativeStreamingUsageCompat(...) і
applyProviderNativeStreamingUsageCompat(...) визначають підтримку за
картою можливостей кінцевої точки, тому власні кінцеві точки в стилі Moonshot/DashScope однаково
вмикають цю можливість, навіть коли плагін використовує власний ідентифікатор постачальника.Наведені вище приклади динамічного виявлення охоплюють API постачальників у стилі /models. Зберігайте
це виявлення всередині catalog.run, виконуючи його лише за наявності придатних даних автентифікації, а
staticRun залишайте без мережевих запитів для офлайн-генерування каталогу.3
Додайте динамічне визначення моделі
Якщо ваш постачальник приймає довільні ідентифікатори моделей (як проксі-сервер або маршрутизатор),
додайте Якщо для визначення потрібен мережевий виклик, використовуйте
resolveDynamicModel:prepareDynamicModel для асинхронного
попереднього прогрівання — resolveDynamicModel запускається знову після його завершення.4
Додайте обробники середовища виконання (за потреби)
Більшості постачальників потрібні лише Доступні сьогодні сімейства повторного відтворення:
catalog + resolveDynamicModel. Додавайте обробники
поступово, коли вони стають потрібними вашому постачальнику.Спільні конструктори допоміжних функцій тепер охоплюють найпоширеніші сімейства
сумісності повторного відтворення та інструментів, тому плагінам зазвичай не потрібно вручну підключати кожен обробник окремо:Доступні сьогодні сімейства потоків:
Точки інтеграції SDK, на яких працюють конструктори сімейств
Точки інтеграції SDK, на яких працюють конструктори сімейств
Кожен конструктор сімейства складається з відкритих допоміжних функцій нижчого рівня, експортованих із того самого пакета, які можна використати, коли постачальнику потрібно відхилитися від загального шаблону:
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), сумісна з OpenAI обгортка DeepSeek V4 (createDeepSeekV4OpenAICompatibleThinkingWrapper), очищення попереднього заповнення міркувань Anthropic Messages (createAnthropicThinkingPrefillPayloadWrapper), сумісність викликів інструментів у вигляді звичайного тексту (createPlainTextToolCallCompatWrapper) і спільні обгортки проксі-серверів/постачальників (createOpenRouterWrapper,createToolStreamWrapper,createMinimaxFastModeWrapper).openclaw/plugin-sdk/provider-stream-shared— легкі обгортки корисного навантаження та подій для гарячих шляхів постачальників, включно зcreateOpenAICompatibleCompletionsThinkingOffWrapper,createPayloadPatchStreamWrapper,createPlainTextToolCallCompatWrapper,normalizeOpenAICompatibleReasoningPayload(...)іsetQwenChatTemplateThinking(...).openclaw/plugin-sdk/provider-tools—ProviderToolCompatFamily,buildProviderToolCompatFamilyHooks("deepseek" | "gemini" | "openai")і базові допоміжні функції схем постачальників.
native
виведення міркувань, щоб OpenClaw обробляв власні частини думок без додавання
директив запиту <think> / <final>. Текстові серверні частини в стилі Gemini CLI,
які аналізують остаточну відповідь JSON/текст, можуть зберігати спільний
контракт google-gemini із тегами.Деякі потокові допоміжні функції навмисно залишаються локальними для постачальника. @openclaw/anthropic-provider зберігає wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier і конструктори обгорток Anthropic нижчого рівня у власній відкритій точці інтеграції api.ts / contract-api.ts, оскільки вони кодують обробку бета-версій OAuth Claude та обмеження context1m. Плагін xAI так само зберігає формування власних Responses xAI у своєму wrapStreamFn (псевдоніми /fast, типовий tool_stream, очищення непідтримуваного суворого режиму інструментів, специфічне для xAI видалення корисного навантаження міркувань).Той самий шаблон кореня пакета також підтримує @openclaw/openai-provider (конструктори постачальників, допоміжні функції стандартних моделей, конструктори постачальників реального часу) і @openclaw/openrouter-provider (конструктор постачальника та допоміжні функції початкового налаштування/конфігурації).- Обмін токенами
- Власні заголовки
- Власна ідентичність транспорту
- Використання та оплата
Для постачальників, яким потрібен обмін токенами перед кожним викликом інференсу:
Поширені обробники провайдерів
Поширені обробники провайдерів
Для плагінів моделей і провайдерів OpenClaw викликає обробники приблизно
в такому порядку. Більшість провайдерів використовує лише 2–3. Це не повний
контракт
ProviderPlugin — повний актуальний перелік обробників і примітки
щодо резервних механізмів див. у розділі Внутрішня архітектура: обробники
середовища виконання провайдера.
Поля провайдерів лише для сумісності, які OpenClaw більше не викликає,
зокрема ProviderPlugin.capabilities і suppressBuiltInModel, тут не
наведено.Примітки щодо резервних механізмів середовища виконання:
normalizeConfigвизначає один плагін-власник для кожного ідентифікатора провайдера (спочатку вбудовані провайдери, потім відповідний плагін середовища виконання) і викликає лише цей обробник — інші провайдери не скануються. Власний обробник GooglenormalizeConfigнормалізує записи конфігураціїgoogle/google-vertex/google-antigravity; це не окремий основний резервний механізм.resolveConfigApiKeyвикористовує обробник провайдера, якщо його надано. Amazon Bedrock зберігає визначення маркерів змінних середовища AWS у своєму плагіні провайдера; сама автентифікація середовища виконання й надалі використовує типовий ланцюжок AWS SDK, якщо налаштованоauth: "aws-sdk".resolveThinkingProfile(ctx)отримує вибраніprovider,modelId, необов’язкову об’єднану підказку каталогуreasoningі необов’язкові об’єднані факти сумісності моделіcompat. Використовуйтеcompatлише для вибору інтерфейсу або профілю міркувань провайдера.resolveSystemPromptContributionдає провайдеру змогу додавати до системного промпту вказівки для сімейства моделей з урахуванням кешу. Віддавайте йому перевагу над застарілим загальноплагінним обробникомbefore_prompt_build, коли поведінка належить одному провайдеру або сімейству моделей і має зберігати поділ кешу на стабільну та динамічну частини.
5
Додайте додаткові можливості (необов’язково)
Крок 5: Додайте додаткові можливості
Плагін провайдера може реєструвати вбудовування, мовлення, транскрибування в реальному часі, голосовий зв’язок у реальному часі, розуміння медіа, генерування зображень, генерування відео, отримання вебресурсів і вебпошук поряд із текстовим логічним висновуванням. OpenClaw класифікує його як плагін із гібридними можливостями — рекомендований шаблон для плагінів компаній (один плагін на постачальника). Див. Внутрішня архітектура: володіння можливостями.Зареєструйте кожну можливість уregister(api) поруч із наявним викликом
api.registerProvider(...). Виберіть лише потрібні вкладки:- Мовлення (TTS)
- Транскрибування в реальному часі
- Голос у реальному часі
- Розуміння медіаданих
- Вбудовування
- Генерування зображень і відео
- Отримання даних і пошук у вебі
assertOkOrThrowProviderError(...) для помилок HTTP
провайдера, щоб плагіни спільно використовували обмежене читання тіла
помилки, розбір помилок JSON і суфікси ідентифікаторів запитів.6
Тестування
Крок 6: Тестування
src/provider.test.ts
Публікація в ClawHub
Плагіни провайдерів публікуються так само, як і будь-який інший зовнішній плагін коду:clawhub skill publish <path> — це інша команда для публікації папки Skills,
а не пакета плагіна — не використовуйте її тут.
Структура файлів
Довідка щодо порядку каталогу
catalog.order визначає, коли ваш каталог об’єднується відносно вбудованих
провайдерів:
Наступні кроки
- Plugin каналів — якщо ваш Plugin також надає канал
- Середовище виконання SDK — допоміжні функції
api.runtime(TTS, пошук, субагент) - Огляд SDK — повний довідник імпорту з підшляхів
- Внутрішня архітектура Plugin — подробиці хуків і вбудовані приклади