Skip to main content
Xây dựng Plugin nhà cung cấp để thêm một nhà cung cấp mô hình (LLM) vào OpenClaw: danh mục mô hình, xác thực bằng khóa API và phân giải mô hình động.
Bạn mới làm quen với các Plugin OpenClaw? Trước tiên, hãy đọc Bắt đầu để tìm hiểu cấu trúc gói và cách thiết lập manifest.
Plugin nhà cung cấp thêm các mô hình vào vòng lặp suy luận thông thường của OpenClaw. Nếu mô hình phải chạy qua một daemon tác nhân gốc quản lý các luồng, Compaction hoặc sự kiện công cụ, hãy ghép nhà cung cấp với một harness tác nhân thay vì đưa chi tiết giao thức daemon vào lõi.

Hướng dẫn từng bước

1

Gói và manifest

Bước 1: Gói và manifest

setup.providers[].envVars cho phép OpenClaw phát hiện thông tin xác thực mà không cần tải runtime Plugin của bạn. Thêm providerAuthAliases khi một biến thể nhà cung cấp cần dùng lại thông tin xác thực của id nhà cung cấp khác. modelSupport là tùy chọn và cho phép OpenClaw tự động tải Plugin nhà cung cấp của bạn từ id mô hình dạng viết tắt như acme-large trước khi có các hook runtime. openclaw.compatopenclaw.build trong package.json là bắt buộc để phát hành trên ClawHub (openclaw.compat.pluginApiopenclaw.build.openclawVersion là hai trường bắt buộc; minGatewayVersion sẽ dùng openclaw.install.minHostVersion làm giá trị dự phòng khi bị lược bỏ).
2

Đăng ký nhà cung cấp

Một nhà cung cấp văn bản tối thiểu cần id, label, authcatalog. catalog là hook runtime/cấu hình do nhà cung cấp sở hữu; hook này có thể gọi API trực tiếp của nhà cung cấp và trả về các mục models.providers.
index.ts
registerModelCatalogProvider là bề mặt danh mục mặt phẳng điều khiển mới hơn dành cho giao diện người dùng danh sách/trợ giúp/trình chọn, bao gồm các hàng text, voice, image_generation, video_generationmusic_generation. Giữ các lệnh gọi điểm cuối của nhà cung cấp và việc ánh xạ phản hồi trong Plugin; OpenClaw quản lý hình dạng hàng dùng chung, nhãn nguồn và cách hiển thị trợ giúp.Như vậy là đã có một nhà cung cấp hoạt động được. Giờ đây, người dùng có thể chạy openclaw onboard --acme-ai-api-key <key> và chọn acme-ai/acme-large làm mô hình.

Khám phá mô hình trực tiếp

Nếu nhà cung cấp cung cấp API kiểu /models, hãy giữ điểm cuối riêng của nhà cung cấp và phép chiếu hàng trong Plugin, đồng thời sử dụng openclaw/plugin-sdk/provider-catalog-live-runtime cho vòng đời tìm nạp dùng chung. Trình trợ giúp cung cấp các yêu cầu tìm nạp HTTP có kiểm soát, tiêu đề xác thực của nhà cung cấp, lỗi HTTP có cấu trúc, bộ nhớ đệm TTL và hành vi dự phòng tĩnh mà không đưa chính sách nhà cung cấp vào lõi OpenClaw.Sử dụng buildLiveModelProviderConfig khi API trực tiếp chỉ cho biết những hàng danh mục tĩnh do nhà cung cấp sở hữu nào hiện đang khả dụng:
index.ts
Sử dụng getCachedLiveProviderModelRows khi API nhà cung cấp trả về siêu dữ liệu phong phú hơn và Plugin cần tự chiếu các hàng thành định nghĩa mô hình OpenClaw:
index.ts
run phải tiếp tục được kiểm soát bằng xác thực và trả về null khi không có thông tin xác thực khả dụng. Duy trì staticRun ngoại tuyến hoặc phương án dự phòng tĩnh để quá trình thiết lập, tài liệu, kiểm thử và các bề mặt trình chọn không phụ thuộc vào quyền truy cập mạng trực tiếp. Sử dụng TTL phù hợp với độ mới của danh sách mô hình, tránh thăm dò hệ thống tệp tại thời điểm yêu cầu và chỉ truyền readRows / readModelId dành riêng cho nhà cung cấp khi phản hồi thượng nguồn không có hình dạng { data: [{ id, object }] } tương thích với OpenAI.Nếu nhà cung cấp thượng nguồn sử dụng các token điều khiển khác OpenClaw, hãy thêm một phép biến đổi văn bản hai chiều nhỏ thay vì thay thế đường dẫn luồng:
input viết lại lời nhắc hệ thống cuối cùng và nội dung tin nhắn văn bản trước khi truyền tải. output viết lại các phần gia tăng văn bản của trợ lý và văn bản cuối cùng trước khi OpenClaw phân tích các dấu điều khiển của chính nó hoặc chuyển đến kênh.Đối với các nhà cung cấp đi kèm chỉ đăng ký một nhà cung cấp văn bản có xác thực bằng khóa API cùng một runtime duy nhất dựa trên danh mục, nên ưu tiên trình trợ giúp defineSingleProviderPluginEntry(...) có phạm vi hẹp hơn:
buildProvider là đường dẫn danh mục trực tiếp được dùng khi OpenClaw có thể phân giải thông tin xác thực thực tế của nhà cung cấp. Đường dẫn này có thể thực hiện việc khám phá dành riêng cho nhà cung cấp. Chỉ dùng buildStaticProvider cho các hàng ngoại tuyến có thể hiển thị an toàn trước khi cấu hình xác thực; đường dẫn này không được yêu cầu thông tin xác thực hoặc thực hiện yêu cầu mạng. Phần hiển thị models list --all của OpenClaw hiện chỉ thực thi các danh mục tĩnh cho các plugin nhà cung cấp được đóng gói, với cấu hình trống, môi trường trống và không có đường dẫn tác nhân/không gian làm việc.Nếu luồng xác thực của bạn cũng cần vá models.providers.*, các bí danh và mô hình mặc định của tác nhân trong quá trình thiết lập ban đầu, hãy dùng các trình trợ giúp cấu hình sẵn từ openclaw/plugin-sdk/provider-onboard. Các trình trợ giúp có phạm vi hẹp nhất là createDefaultModelPresetAppliers(...), createDefaultModelsPresetAppliers(...)createModelCatalogPresetAppliers(...).Khi điểm cuối gốc của nhà cung cấp hỗ trợ các khối mức sử dụng dạng luồng trên phương thức truyền tải openai-completions thông thường, hãy ưu tiên các trình trợ giúp danh mục dùng chung trong openclaw/plugin-sdk/provider-catalog-shared thay vì mã hóa cứng các bước kiểm tra mã định danh nhà cung cấp. supportsNativeStreamingUsageCompat(...)applyProviderNativeStreamingUsageCompat(...) phát hiện khả năng hỗ trợ từ bản đồ năng lực của điểm cuối, vì vậy các điểm cuối gốc kiểu Moonshot/DashScope vẫn có thể chủ động bật tính năng ngay cả khi plugin đang dùng mã định danh nhà cung cấp tùy chỉnh.Các ví dụ khám phá trực tiếp ở trên áp dụng cho API nhà cung cấp kiểu /models. Hãy giữ hoạt động khám phá đó bên trong catalog.run, chỉ cho phép khi có thông tin xác thực khả dụng, và giữ staticRun không sử dụng mạng để tạo danh mục ngoại tuyến.
3

Thêm khả năng phân giải mô hình động

Nếu nhà cung cấp của bạn chấp nhận mã định danh mô hình tùy ý (như proxy hoặc bộ định tuyến), hãy thêm resolveDynamicModel:
Nếu việc phân giải yêu cầu một lệnh gọi mạng, hãy dùng prepareDynamicModel để khởi động bất đồng bộ - resolveDynamicModel sẽ chạy lại sau khi quá trình này hoàn tất.
4

Thêm các hook thời gian chạy (khi cần)

Hầu hết nhà cung cấp chỉ cần catalog + resolveDynamicModel. Hãy thêm các hook từng bước theo yêu cầu của nhà cung cấp.Các trình tạo trợ giúp dùng chung hiện hỗ trợ những nhóm tương thích phát lại/công cụ phổ biến nhất, vì vậy plugin thường không cần tự kết nối từng hook một:
Các nhóm phát lại hiện có:Các nhóm luồng hiện có:
Mỗi trình tạo nhóm được cấu thành từ các trình trợ giúp công khai cấp thấp hơn được xuất từ cùng gói, bạn có thể dùng chúng khi nhà cung cấp cần đi lệch khỏi mẫu chung:
  • openclaw/plugin-sdk/provider-model-shared - ProviderReplayFamily, buildProviderReplayFamilyHooks(...) và các trình tạo phát lại thô (buildOpenAICompatibleReplayPolicy, buildAnthropicReplayPolicyForModel, buildGoogleGeminiReplayPolicy, buildHybridAnthropicOrOpenAIReplayPolicy). Đồng thời xuất các trình trợ giúp phát lại Gemini (sanitizeGoogleGeminiReplayHistory, resolveTaggedReasoningOutputMode) và các trình trợ giúp điểm cuối/mô hình (resolveProviderEndpoint, normalizeProviderId, normalizeGooglePreviewModelId).
  • openclaw/plugin-sdk/provider-stream - ProviderStreamFamily, buildProviderStreamFamilyHooks(...), composeProviderStreamWrappers(...), cùng các trình bao OpenAI/Codex dùng chung (createOpenAIAttributionHeadersWrapper, createOpenAIFastModeWrapper, createOpenAIServiceTierWrapper, createOpenAIResponsesContextManagementWrapper, createCodexNativeWebSearchWrapper), trình bao tương thích với OpenAI DeepSeek V4 (createDeepSeekV4OpenAICompatibleThinkingWrapper), dọn dẹp phần điền trước suy luận của Anthropic Messages (createAnthropicThinkingPrefillPayloadWrapper), khả năng tương thích lệnh gọi công cụ dạng văn bản thuần (createPlainTextToolCallCompatWrapper) và các trình bao proxy/nhà cung cấp dùng chung (createOpenRouterWrapper, createToolStreamWrapper, createMinimaxFastModeWrapper).
  • openclaw/plugin-sdk/provider-stream-shared - các trình bao tải trọng và sự kiện nhẹ cho đường dẫn nhà cung cấp nóng, bao gồm createOpenAICompatibleCompletionsThinkingOffWrapper, createPayloadPatchStreamWrapper, createPlainTextToolCallCompatWrapper, normalizeOpenAICompatibleReasoningPayload(...)setQwenChatTemplateThinking(...).
  • openclaw/plugin-sdk/provider-tools - ProviderToolCompatFamily, buildProviderToolCompatFamilyHooks("deepseek" | "gemini" | "openai") và các trình trợ giúp lược đồ nhà cung cấp nền tảng.
Đối với các nhà cung cấp thuộc nhóm Gemini, hãy giữ chế độ đầu ra suy luận phù hợp với phương thức truyền tải. Các nhà cung cấp API Google Gemini trực tiếp nên dùng đầu ra suy luận native để OpenClaw sử dụng các phần suy nghĩ gốc mà không thêm chỉ thị lời nhắc <think> / <final>. Các backend kiểu Gemini CLI chỉ có văn bản phân tích phản hồi JSON/văn bản cuối cùng có thể tiếp tục dùng hợp đồng có thẻ google-gemini dùng chung.Một số trình trợ giúp luồng được giữ cục bộ trong nhà cung cấp theo chủ ý. @openclaw/anthropic-provider giữ wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier và các trình tạo trình bao Anthropic cấp thấp hơn trong seam api.ts / contract-api.ts công khai riêng vì chúng mã hóa việc xử lý Claude OAuth beta và kiểm soát context1m. Tương tự, plugin xAI giữ việc định hình Responses xAI gốc trong wrapStreamFn riêng (các bí danh /fast, tool_stream mặc định, dọn dẹp công cụ nghiêm ngặt không được hỗ trợ, loại bỏ tải trọng suy luận dành riêng cho xAI).Mẫu gốc gói tương tự cũng hỗ trợ @openclaw/openai-provider (các trình tạo nhà cung cấp, trình trợ giúp mô hình mặc định, trình tạo nhà cung cấp thời gian thực) và @openclaw/openrouter-provider (trình tạo nhà cung cấp cùng các trình trợ giúp thiết lập ban đầu/cấu hình).
Dành cho các nhà cung cấp cần trao đổi token trước mỗi lệnh gọi suy luận:
OpenClaw gọi các hook theo thứ tự gần đúng sau đây đối với các Plugin mô hình/nhà cung cấp. Hầu hết nhà cung cấp chỉ sử dụng 2-3 hook. Đây không phải là toàn bộ hợp đồng ProviderPlugin - xem Nội bộ: Hook thời gian chạy của nhà cung cấp để biết danh sách hook đầy đủ, chính xác ở thời điểm hiện tại và các lưu ý về cơ chế dự phòng. Các trường nhà cung cấp chỉ dành cho tương thích mà OpenClaw không còn gọi, chẳng hạn như ProviderPlugin.capabilitiessuppressBuiltInModel, không được liệt kê tại đây.Lưu ý về cơ chế dự phòng thời gian chạy:
  • normalizeConfig phân giải một Plugin sở hữu cho mỗi ID nhà cung cấp (nhà cung cấp đi kèm trước, sau đó đến Plugin thời gian chạy khớp) và chỉ gọi hook đó - không quét qua các nhà cung cấp khác. Hook normalizeConfig riêng của Google là thành phần chuẩn hóa các mục cấu hình google / google-vertex / google-antigravity; đây không phải là cơ chế dự phòng lõi riêng biệt.
  • resolveConfigApiKey sử dụng hook nhà cung cấp khi được cung cấp. Amazon Bedrock giữ việc phân giải dấu môi trường AWS trong Plugin nhà cung cấp của mình; bản thân xác thực thời gian chạy vẫn sử dụng chuỗi mặc định của AWS SDK khi được cấu hình với auth: "aws-sdk".
  • resolveThinkingProfile(ctx) nhận provider, modelId đã chọn, gợi ý danh mục reasoning đã hợp nhất tùy chọn và các dữ kiện mô hình compat đã hợp nhất tùy chọn. Chỉ sử dụng compat để chọn giao diện/hồ sơ tư duy của nhà cung cấp.
  • resolveSystemPromptContribution cho phép nhà cung cấp chèn hướng dẫn prompt hệ thống có nhận biết bộ nhớ đệm cho một họ mô hình. Ưu tiên hook này thay vì hook before_prompt_build cũ áp dụng cho toàn Plugin khi hành vi thuộc về một họ nhà cung cấp/mô hình và cần duy trì sự phân tách bộ nhớ đệm ổn định/động.
5

Thêm các khả năng bổ sung (tùy chọn)

Bước 5: Thêm các khả năng bổ sung

Một Plugin nhà cung cấp có thể đăng ký embedding, giọng nói, phiên âm thời gian thực, thoại thời gian thực, hiểu nội dung đa phương tiện, tạo hình ảnh, tạo video, tìm nạp web và tìm kiếm web cùng với suy luận văn bản. OpenClaw phân loại đây là một Plugin khả năng lai - mẫu được khuyến nghị cho các Plugin của công ty (một Plugin cho mỗi nhà cung cấp). Xem Nội bộ: Quyền sở hữu khả năng.Đăng ký từng khả năng bên trong register(api) cùng với lời gọi api.registerProvider(...) hiện có. Chỉ chọn các tab bạn cần:
Sử dụng assertOkOrThrowProviderError(...) cho các lỗi HTTP của nhà cung cấp để các Plugin dùng chung cơ chế đọc body lỗi có giới hạn, phân tích lỗi JSON và hậu tố ID yêu cầu.
6

Kiểm thử

Bước 6: Kiểm thử

src/provider.test.ts

Xuất bản lên ClawHub

Các Plugin nhà cung cấp được xuất bản giống như mọi Plugin mã bên ngoài khác:
clawhub skill publish <path> là một lệnh khác dùng để xuất bản thư mục skill, không phải gói Plugin — không sử dụng lệnh đó ở đây.

Cấu trúc tệp

Tham chiếu thứ tự danh mục

catalog.order kiểm soát thời điểm danh mục của bạn được hợp nhất so với các nhà cung cấp tích hợp sẵn:

Các bước tiếp theo

  • Plugin kênh - nếu Plugin của bạn cũng cung cấp một kênh
  • Runtime SDK - các trình trợ giúp api.runtime (TTS, tìm kiếm, tác tử phụ)
  • Tổng quan về SDK - tài liệu tham khảo đầy đủ về nhập đường dẫn con
  • Nội bộ Plugin - chi tiết hook và các ví dụ đi kèm

Liên quan