Впервые работаете с плагинами OpenClaw? Сначала прочитайте Начало работы,
чтобы узнать о структуре пакета и настройке манифеста.
Пошаговое руководство
1
Пакет и манифест
Шаг 1. Пакет и манифест
setup.providers[].envVars позволяет OpenClaw обнаруживать учетные данные без
загрузки среды выполнения вашего плагина. Добавьте providerAuthAliases, когда вариант
провайдера должен повторно использовать аутентификацию идентификатора другого провайдера. modelSupport
необязателен и позволяет OpenClaw автоматически загружать ваш плагин провайдера по сокращенным
идентификаторам моделей, таким как 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. Оставляйте вызовы конечных точек
поставщика и преобразование ответов в плагине; OpenClaw отвечает за общую форму
строк, метки источников и отображение справки.Теперь провайдер готов к работе. Пользователи могут выполнить
openclaw onboard --acme-ai-api-key <key> и выбрать
acme-ai/acme-large в качестве модели.Динамическое обнаружение моделей
Если ваш провайдер предоставляет API в стиле/models, оставьте специфичные для провайдера
конечную точку и преобразование строк в своем плагине и используйте
openclaw/plugin-sdk/provider-catalog-live-runtime для общего жизненного
цикла получения данных. Вспомогательная функция предоставляет защищенные HTTP-запросы, заголовки аутентификации провайдера,
структурированные HTTP-ошибки, кэширование с TTL и статическое резервное поведение,
не помещая политику провайдера в ядро OpenClaw.Используйте buildLiveModelProviderConfig, когда динамический API сообщает только о том,
какие принадлежащие провайдеру строки статического каталога доступны в данный момент:index.ts
getCachedLiveProviderModelRows, когда API провайдера возвращает более подробные
метаданные и плагину необходимо самостоятельно преобразовывать строки в определения
моделей 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> — это другая команда для публикации папки навыка,
а не пакета плагина — не используйте её здесь.
Структура файлов
Справочник по порядку каталогов
catalog.order определяет, когда ваш каталог объединяется относительно встроенных
провайдеров:
Дальнейшие действия
- Плагины каналов — если ваш плагин также предоставляет канал
- Среда выполнения SDK — вспомогательные функции
api.runtime(TTS, поиск, субагент) - Обзор SDK — полный справочник по импорту подпутей
- Внутреннее устройство плагинов — сведения о хуках и встроенные примеры