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.
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.compat
và openclaw.build trong package.json là bắt buộc để phát hành trên ClawHub
(openclaw.compat.pluginApi và openclaw.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 Sử dụng
id, label, auth và catalog.
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_generation và music_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
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(...) và
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(...) và
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 Nếu việc phân giải yêu cầu một lệnh gọi mạng, hãy dùng
resolveDynamicModel: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 Các nhóm phát lại hiện có:
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 luồng hiện có:
Các seam SDK hỗ trợ trình tạo nhóm
Các seam SDK hỗ trợ trình tạo nhóm
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ồmcreateOpenAICompatibleCompletionsThinkingOffWrapper,createPayloadPatchStreamWrapper,createPlainTextToolCallCompatWrapper,normalizeOpenAICompatibleReasoningPayload(...)và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.
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).- Trao đổi token
- Tiêu đề tùy chỉnh
- Danh tính phương thức truyền tải gốc
- Mức sử dụng và thanh toán
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:
Các hook nhà cung cấp phổ biến
Các hook nhà cung cấp phổ biế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.capabilities và suppressBuiltInModel, không được liệt kê
tại đây.Lưu ý về cơ chế dự phòng thời gian chạy:
normalizeConfigphâ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. HooknormalizeConfigriêng của Google là thành phần chuẩn hóa các mục cấu hìnhgoogle/google-vertex/google-antigravity; đây không phải là cơ chế dự phòng lõi riêng biệt.resolveConfigApiKeysử 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ớiauth: "aws-sdk".resolveThinkingProfile(ctx)nhậnprovider,modelIdđã chọn, gợi ý danh mụcreasoningđã hợp nhất tùy chọn và các dữ kiện mô hìnhcompatđã hợp nhất tùy chọn. Chỉ sử dụngcompatđể chọn giao diện/hồ sơ tư duy của nhà cung cấp.resolveSystemPromptContributioncho 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ì hookbefore_prompt_buildcũ á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 trongregister(api) cùng với lời gọi
api.registerProvider(...) hiện có. Chỉ chọn các tab bạn cần:- Giọng nói (TTS)
- Phiên âm thời gian thực
- Giọng nói thời gian thực
- Hiểu nội dung đa phương tiện
- Embedding
- Tạo hình ảnh và video
- Tìm nạp và tìm kiếm trên web
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