Skip to main content
OpenClaw에 모델 공급자(LLM)를 추가하는 공급자 Plugin을 구축합니다. 모델 카탈로그, API 키 인증, 동적 모델 해석을 포함합니다.
OpenClaw Plugin이 처음이신가요? 패키지 구조와 매니페스트 설정을 알아보려면 먼저 시작하기를 읽어보세요.
공급자 Plugin은 OpenClaw의 일반 추론 루프에 모델을 추가합니다. 모델이 스레드, Compaction 또는 도구 이벤트를 소유하는 네이티브 에이전트 데몬을 통해 실행되어야 한다면, 데몬 프로토콜 세부 정보를 코어에 넣는 대신 공급자를 에이전트 하네스와 함께 사용하세요.

단계별 안내

1

패키지와 매니페스트

1단계: 패키지와 매니페스트

setup.providers[].envVars를 사용하면 OpenClaw가 Plugin 런타임을 로드하지 않고도 자격 증명을 감지할 수 있습니다. 공급자 변형이 다른 공급자 ID의 인증을 재사용해야 한다면 providerAuthAliases를 추가하세요. modelSupport는 선택 사항이며, 런타임 훅이 존재하기 전에 acme-large와 같은 축약 모델 ID를 통해 OpenClaw가 공급자 Plugin을 자동으로 로드할 수 있게 합니다. package.jsonopenclaw.compatopenclaw.build는 ClawHub 게시에 필요합니다(openclaw.compat.pluginApiopenclaw.build.openclawVersion가 필수 필드 두 개이며, minGatewayVersion을 생략하면 openclaw.install.minHostVersion으로 대체됩니다).
2

공급자 등록

최소한의 텍스트 공급자에는 id, label, auth, catalog가 필요합니다. catalog는 공급자가 소유하는 런타임/구성 훅입니다. 실시간 공급업체 API를 호출할 수 있으며 models.providers 항목을 반환합니다.
index.ts
registerModelCatalogProvider는 목록/도움말/선택기 UI를 위한 최신 제어 영역 카탈로그 표면으로, text, voice, image_generation, video_generation, music_generation 행을 다룹니다. 공급업체 엔드포인트 호출과 응답 매핑은 Plugin에 유지하세요. OpenClaw는 공유 행 형식, 소스 레이블, 도움말 렌더링을 담당합니다.이것으로 작동하는 공급자가 완성됩니다. 이제 사용자는 openclaw onboard --acme-ai-api-key <key>를 실행하고 acme-ai/acme-large를 모델로 선택할 수 있습니다.

실시간 모델 검색

공급자가 /models 형식의 API를 제공한다면, 공급자별 엔드포인트와 행 프로젝션은 Plugin에 유지하고 공유 가져오기 수명 주기에는 openclaw/plugin-sdk/provider-catalog-live-runtime을 사용하세요. 이 도우미는 공급자 정책을 OpenClaw 코어에 넣지 않고도 보호된 HTTP 가져오기, 공급자 인증 헤더, 구조화된 HTTP 오류, TTL 캐싱, 정적 대체 동작을 제공합니다.실시간 API가 현재 사용 가능한 공급자 소유 정적 카탈로그 행만 알려주는 경우 buildLiveModelProviderConfig를 사용하세요.
index.ts
공급자 API가 더 풍부한 메타데이터를 반환하고 Plugin이 직접 행을 OpenClaw 모델 정의로 프로젝션해야 한다면 getCachedLiveProviderModelRows를 사용하세요.
index.ts
run에는 인증 관문을 유지해야 하며, 사용할 수 있는 자격 증명이 없으면 null을 반환해야 합니다. 설정, 문서, 테스트, 선택기 표면이 실시간 네트워크 접근에 의존하지 않도록 오프라인 staticRun 또는 정적 대체 경로를 유지하세요. 모델 목록의 최신성에 적합한 TTL을 사용하고, 요청 시점 파일 시스템 폴링을 피하세요. 업스트림 응답이 OpenAI 호환 { data: [{ id, object }] } 형식이 아닐 때만 공급자별 readRows / readModelId를 전달하세요.업스트림 공급자가 OpenClaw와 다른 제어 토큰을 사용한다면 스트림 경로를 교체하지 말고 작은 양방향 텍스트 변환을 추가하세요.
input은 전송 전에 최종 시스템 프롬프트와 텍스트 메시지 콘텐츠를 다시 작성합니다. output은 OpenClaw가 자체 제어 마커를 파싱하거나 채널로 전달하기 전에 어시스턴트 텍스트 델타와 최종 텍스트를 다시 작성합니다.API 키 인증과 단일 카탈로그 기반 런타임을 갖춘 텍스트 공급자 하나만 등록하는 번들 공급자의 경우 더 범위가 좁은 defineSingleProviderPluginEntry(...) 도우미를 우선 사용하세요:
buildProvider는 OpenClaw가 실제 제공자 인증을 확인할 수 있을 때 사용하는 실시간 카탈로그 경로입니다. 이 경로에서는 제공자별 탐색을 수행할 수 있습니다. 인증을 구성하기 전에 표시해도 안전한 오프라인 항목에만 buildStaticProvider를 사용하세요. 이 함수는 자격 증명을 요구하거나 네트워크 요청을 수행해서는 안 됩니다. 현재 OpenClaw의 models list --all 표시는 빈 구성과 빈 환경을 사용하고 에이전트/워크스페이스 경로 없이 번들 제공자 Plugin에 대해서만 정적 카탈로그를 실행합니다.인증 흐름에서 온보딩 중 models.providers.*, 별칭 및 에이전트 기본 모델도 수정해야 한다면 openclaw/plugin-sdk/provider-onboard의 프리셋 헬퍼를 사용하세요. 가장 범위가 좁은 헬퍼는 createDefaultModelPresetAppliers(...), createDefaultModelsPresetAppliers(...)createModelCatalogPresetAppliers(...)입니다.제공자의 네이티브 엔드포인트가 일반 openai-completions 전송 방식에서 스트리밍 사용량 블록을 지원한다면 제공자 ID 검사를 하드코딩하는 대신 openclaw/plugin-sdk/provider-catalog-shared의 공유 카탈로그 헬퍼를 사용하세요. supportsNativeStreamingUsageCompat(...)applyProviderNativeStreamingUsageCompat(...)는 엔드포인트 기능 맵에서 지원 여부를 감지하므로, Plugin이 사용자 지정 제공자 ID를 사용하는 경우에도 네이티브 Moonshot/DashScope 방식의 엔드포인트가 계속 명시적으로 참여할 수 있습니다.위의 실시간 탐색 예시는 /models 방식의 제공자 API를 다룹니다. 해당 탐색은 사용 가능한 인증이 있을 때만 catalog.run 내에서 수행하고, 오프라인 카탈로그 생성을 위해 staticRun에서는 네트워크를 사용하지 마세요.
3

동적 모델 확인 추가

제공자가 프록시나 라우터처럼 임의의 모델 ID를 허용한다면 resolveDynamicModel을 추가하세요.
확인에 네트워크 호출이 필요하다면 비동기 준비 작업에 prepareDynamicModel을 사용하세요. 작업이 완료되면 resolveDynamicModel이 다시 실행됩니다.
4

런타임 훅 추가(필요한 경우)

대부분의 제공자는 catalogresolveDynamicModel만 필요합니다. 제공자의 요구 사항에 따라 훅을 점진적으로 추가하세요.이제 공유 헬퍼 빌더가 가장 일반적인 재생/도구 호환 제품군을 지원하므로, 일반적으로 Plugin에서 각 훅을 하나씩 직접 연결할 필요가 없습니다.
현재 사용 가능한 재생 제품군:현재 사용 가능한 스트림 제품군:
각 제품군 빌더는 동일한 패키지에서 내보내는 하위 수준 공개 헬퍼로 구성되며, 제공자가 일반적인 패턴을 벗어나야 할 때 사용할 수 있습니다.
  • 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), 일반 텍스트 도구 호출 호환 기능(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") 및 기반 제공자 스키마 헬퍼.
Gemini 제품군 제공자의 경우 추론 출력 모드를 전송 방식에 맞게 유지하세요. 직접 Google Gemini API를 사용하는 제공자는 OpenClaw가 <think> / <final> 프롬프트 지시문을 추가하지 않고 네이티브 사고 부분을 처리할 수 있도록 native 추론 출력을 사용해야 합니다. 최종 JSON/텍스트 응답을 파싱하는 텍스트 전용 Gemini CLI 방식 백엔드는 공유 google-gemini 태그 기반 계약을 유지할 수 있습니다.일부 스트림 헬퍼는 의도적으로 제공자 로컬에 유지됩니다. @openclaw/anthropic-provider는 Claude OAuth 베타 처리와 context1m 게이팅을 구현하므로 wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier 및 하위 수준 Anthropic 래퍼 빌더를 자체 공개 api.ts / contract-api.ts 연결부에 유지합니다. 마찬가지로 xAI Plugin은 네이티브 xAI Responses 구성을 자체 wrapStreamFn에 유지합니다 (/fast 별칭, 기본 tool_stream, 지원되지 않는 엄격한 도구 정리, xAI 전용 추론 페이로드 제거).동일한 패키지 루트 패턴은 @openclaw/openai-provider(제공자 빌더, 기본 모델 헬퍼, 실시간 제공자 빌더)와 @openclaw/openrouter-provider(제공자 빌더 및 온보딩/구성 헬퍼)도 지원합니다.
각 추론 호출 전에 토큰 교환이 필요한 제공자의 경우:
OpenClaw는 모델/공급자 Plugin에 대해 대략 다음 순서로 훅을 호출합니다. 대부분의 공급자는 2~3개만 사용합니다. 이는 전체 ProviderPlugin 계약이 아닙니다. 완전하고 현재 기준으로 정확한 훅 목록 및 대체 경로 참고 사항은 내부 구조: 공급자 런타임 훅을 참조하세요. ProviderPlugin.capabilitiessuppressBuiltInModel처럼 OpenClaw가 더 이상 호출하지 않는 호환성 전용 공급자 필드는 여기에 나열되지 않습니다.런타임 대체 경로 참고 사항:
  • normalizeConfig는 공급자 ID마다 하나의 소유 Plugin을 확인하고(번들 공급자를 먼저 확인한 뒤 일치하는 런타임 Plugin 확인) 해당 훅만 호출합니다. 다른 공급자를 모두 검색하지 않습니다. google / google-vertex / google-antigravity 구성 항목을 정규화하는 것은 Google 자체의 normalizeConfig 훅이며, 별도의 코어 대체 경로가 아닙니다.
  • resolveConfigApiKey는 제공되는 경우 공급자 훅을 사용합니다. Amazon Bedrock은 AWS 환경 변수 마커 확인을 해당 공급자 Plugin에 유지합니다. 런타임 인증 자체는 auth: "aws-sdk"로 구성된 경우에도 AWS SDK 기본 체인을 사용합니다.
  • resolveThinkingProfile(ctx)는 선택된 provider, modelId, 선택적인 병합된 reasoning 카탈로그 힌트, 선택적인 병합된 모델 compat 정보를 받습니다. 공급자의 사고 UI/프로필을 선택할 때만 compat을 사용하세요.
  • resolveSystemPromptContribution을 사용하면 공급자가 모델 계열에 캐시 인식 시스템 프롬프트 지침을 삽입할 수 있습니다. 동작이 하나의 공급자/모델 계열에 속하며 안정적/동적 캐시 분리를 유지해야 하는 경우 레거시 Plugin 전체 범위의 before_prompt_build 훅보다 이를 우선 사용하세요.
5

추가 기능 추가(선택 사항)

5단계: 추가 기능 추가

공급자 Plugin은 텍스트 추론과 함께 임베딩, 음성, 실시간 전사, 실시간 음성, 미디어 이해, 이미지 생성, 동영상 생성, 웹 가져오기 및 웹 검색을 등록할 수 있습니다. OpenClaw는 이를 하이브리드 기능 Plugin으로 분류합니다. 이는 회사 Plugin에 권장되는 패턴입니다(공급업체당 하나의 Plugin). 내부 구조: 기능 소유권을 참조하세요.기존 api.registerProvider(...) 호출과 함께 register(api) 내부에 각 기능을 등록하세요. 필요한 탭만 선택하세요:
공급자 HTTP 실패에는 assertOkOrThrowProviderError(...)를 사용하여 Plugin들이 크기가 제한된 오류 본문 읽기, JSON 오류 구문 분석 및 요청 ID 접미사를 공유하도록 하세요.
6

테스트

6단계: 테스트

src/provider.test.ts

ClawHub에 게시

제공자 Plugin은 다른 외부 코드 Plugin과 동일한 방식으로 게시합니다.
clawhub skill publish <path>는 Plugin 패키지가 아니라 Skills 폴더를 게시하기 위한 별도의 명령입니다. 여기에서는 사용하지 마세요.

파일 구조

카탈로그 순서 참조

catalog.order는 기본 제공자에 상대적으로 카탈로그가 병합되는 시점을 제어합니다.

다음 단계

관련 문서