Chuyển đến nội dung chính

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Hướng dẫn này trình bày cách xây dựng một Plugin nhà cung cấp để thêm một nhà cung cấp mô hình (LLM) vào OpenClaw. Đến cuối hướng dẫn, bạn sẽ có một nhà cung cấp với catalog mô hình, xác thực bằng khóa API, và phân giải mô hình động.
Nếu bạn chưa từng xây dựng Plugin OpenClaw nào trước đây, hãy đọc Bắt đầu trước để nắm cấu trúc package cơ bản và cách thiết lập manifest.
Plugin nhà cung cấp thêm 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 agent native sở hữu luồng, Compaction, hoặc sự kiện công cụ, hãy ghép nhà cung cấp với một khung agent thay vì đưa chi tiết giao thức daemon vào lõi.

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

1

Package và manifest

{
  "name": "@myorg/openclaw-acme-ai",
  "version": "1.0.0",
  "type": "module",
  "openclaw": {
    "extensions": ["./index.ts"],
    "providers": ["acme-ai"],
    "compat": {
      "pluginApi": ">=2026.3.24-beta.2",
      "minGatewayVersion": "2026.3.24-beta.2"
    },
    "build": {
      "openclawVersion": "2026.3.24-beta.2",
      "pluginSdkVersion": "2026.3.24-beta.2"
    }
  }
}
Manifest khai báo providerAuthEnvVars để OpenClaw có thể 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 tái sử dụng 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ừ các id mô hình dạng viết tắt như acme-large trước khi các hook runtime tồn tại. Nếu bạn phát hành nhà cung cấp trên ClawHub, các trường openclaw.compatopenclaw.build đó là bắt buộc trong package.json.
2

Đăng ký nhà cung cấp

Một nhà cung cấp tối thiểu cần có id, label, auth, và catalog:
index.ts
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth";

export default definePluginEntry({
  id: "acme-ai",
  name: "Acme AI",
  description: "Acme AI model provider",
  register(api) {
    api.registerProvider({
      id: "acme-ai",
      label: "Acme AI",
      docsPath: "/providers/acme-ai",
      envVars: ["ACME_AI_API_KEY"],

      auth: [
        createProviderApiKeyAuthMethod({
          providerId: "acme-ai",
          methodId: "api-key",
          label: "Acme AI API key",
          hint: "API key from your Acme AI dashboard",
          optionKey: "acmeAiApiKey",
          flagName: "--acme-ai-api-key",
          envVar: "ACME_AI_API_KEY",
          promptMessage: "Enter your Acme AI API key",
          defaultModel: "acme-ai/acme-large",
        }),
      ],

      catalog: {
        order: "simple",
        run: async (ctx) => {
          const apiKey =
            ctx.resolveProviderApiKey("acme-ai").apiKey;
          if (!apiKey) return null;
          return {
            provider: {
              baseUrl: "https://api.acme-ai.com/v1",
              apiKey,
              api: "openai-completions",
              models: [
                {
                  id: "acme-large",
                  name: "Acme Large",
                  reasoning: true,
                  input: ["text", "image"],
                  cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
                  contextWindow: 200000,
                  maxTokens: 32768,
                },
                {
                  id: "acme-small",
                  name: "Acme Small",
                  reasoning: false,
                  input: ["text"],
                  cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 },
                  contextWindow: 128000,
                  maxTokens: 8192,
                },
              ],
            },
          };
        },
      },
    });
  },
});
Đó là một nhà cung cấp hoạt động được. Giờ đây người dùng có thể openclaw onboard --acme-ai-api-key <key> và chọn acme-ai/acme-large làm mô hình của họ.Nếu nhà cung cấp upstream dùng các token điều khiển khác với 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 stream:
api.registerTextTransforms({
  input: [
    { from: /red basket/g, to: "blue basket" },
    { from: /paper ticket/g, to: "digital ticket" },
    { from: /left shelf/g, to: "right shelf" },
  ],
  output: [
    { from: /blue basket/g, to: "red basket" },
    { from: /digital ticket/g, to: "paper ticket" },
    { from: /right shelf/g, to: "left shelf" },
  ],
});
input ghi lại prompt 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 ghi lại các delta văn bản của assistant và văn bản cuối cùng trước khi OpenClaw phân tích các marker điều khiển riêng hoặc phân phối kênh.Với các nhà cung cấp đi kèm chỉ đăng ký một nhà cung cấp văn bản với xác thực bằng khóa API cộng thêm một runtime duy nhất dựa trên catalog, hãy ưu tiên helper hẹp hơn defineSingleProviderPluginEntry(...):
import { defineSingleProviderPluginEntry } from "openclaw/plugin-sdk/provider-entry";

export default defineSingleProviderPluginEntry({
  id: "acme-ai",
  name: "Acme AI",
  description: "Acme AI model provider",
  provider: {
    label: "Acme AI",
    docsPath: "/providers/acme-ai",
    auth: [
      {
        methodId: "api-key",
        label: "Acme AI API key",
        hint: "API key from your Acme AI dashboard",
        optionKey: "acmeAiApiKey",
        flagName: "--acme-ai-api-key",
        envVar: "ACME_AI_API_KEY",
        promptMessage: "Enter your Acme AI API key",
        defaultModel: "acme-ai/acme-large",
      },
    ],
    catalog: {
      buildProvider: () => ({
        api: "openai-completions",
        baseUrl: "https://api.acme-ai.com/v1",
        models: [{ id: "acme-large", name: "Acme Large" }],
      }),
      buildStaticProvider: () => ({
        api: "openai-completions",
        baseUrl: "https://api.acme-ai.com/v1",
        models: [{ id: "acme-large", name: "Acme Large" }],
      }),
    },
  },
});
buildProvider là đường dẫn catalog trực tiếp được dùng khi OpenClaw có thể phân giải xác thực nhà cung cấp thật. Nó có thể thực hiện phát hiện riêng theo nhà cung cấp. Chỉ dùng buildStaticProvider cho các hàng ngoại tuyến an toàn để hiển thị trước khi xác thực được cấu hình; nó không được yêu cầu thông tin xác thực hoặc gửi yêu cầu mạng. Hiện tại màn hình models list --all của OpenClaw chỉ thực thi catalog tĩnh cho các Plugin nhà cung cấp đi kèm, với cấu hình rỗng, env rỗng, và không có đường dẫn agent/workspace.Nếu luồng xác thực của bạn cũng cần vá models.providers.*, alias, và mô hình mặc định của agent trong quá trình onboarding, hãy dùng các helper preset từ openclaw/plugin-sdk/provider-onboard. Các helper hẹp nhất là createDefaultModelPresetAppliers(...), createDefaultModelsPresetAppliers(...), và createModelCatalogPresetAppliers(...).Khi endpoint native của một nhà cung cấp hỗ trợ các khối usage được stream trên transport openai-completions thông thường, hãy ưu tiên các helper catalog dùng chung trong openclaw/plugin-sdk/provider-catalog-shared thay vì hardcode kiểm tra id nhà cung cấp. supportsNativeStreamingUsageCompat(...)applyProviderNativeStreamingUsageCompat(...) phát hiện hỗ trợ từ bản đồ năng lực endpoint, nên các endpoint native kiểu Moonshot/DashScope vẫn opt in ngay cả khi một Plugin đang dùng id nhà cung cấp tùy chỉnh.
3

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

Nếu nhà cung cấp của bạn chấp nhận các ID mô hình tùy ý (như proxy hoặc router), hãy thêm resolveDynamicModel:
api.registerProvider({
  // ... id, label, auth, catalog from above

  resolveDynamicModel: (ctx) => ({
    id: ctx.modelId,
    name: ctx.modelId,
    provider: "acme-ai",
    api: "openai-completions",
    baseUrl: "https://api.acme-ai.com/v1",
    reasoning: false,
    input: ["text"],
    cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
    contextWindow: 128000,
    maxTokens: 8192,
  }),
});
Nếu việc phân giải cần một yêu cầu mạng, hãy dùng prepareDynamicModel để khởi động bất đồng bộ — resolveDynamicModel sẽ chạy lại sau khi nó hoàn tất.
4

Thêm hook runtime (khi cần)

Hầu hết nhà cung cấp chỉ cần catalog + resolveDynamicModel. Thêm hook dần dần theo nhu cầu của nhà cung cấp của bạn.Các helper builder dùng chung hiện bao phủ những nhóm replay/tương thích công cụ phổ biến nhất, nên Plugin thường không cần tự nối từng hook một:
import { buildProviderReplayFamilyHooks } from "openclaw/plugin-sdk/provider-model-shared";
import { buildProviderStreamFamilyHooks } from "openclaw/plugin-sdk/provider-stream";
import { buildProviderToolCompatFamilyHooks } from "openclaw/plugin-sdk/provider-tools";

const GOOGLE_FAMILY_HOOKS = {
  ...buildProviderReplayFamilyHooks({ family: "google-gemini" }),
  ...buildProviderStreamFamilyHooks("google-thinking"),
  ...buildProviderToolCompatFamilyHooks("gemini"),
};

api.registerProvider({
  id: "acme-gemini-compatible",
  // ...
  ...GOOGLE_FAMILY_HOOKS,
});
Các nhóm replay hiện có:
NhómNội dung được nối vàoVí dụ đi kèm
openai-compatibleChính sách replay kiểu OpenAI dùng chung cho các transport tương thích OpenAI, bao gồm vệ sinh tool-call-id, sửa thứ tự assistant-trước, và xác thực lượt Gemini chung khi transport cầnmoonshot, ollama, xai, zai
anthropic-by-modelChính sách replay nhận biết Claude được chọn theo modelId, để các transport thông điệp Anthropic chỉ nhận dọn dẹp thinking-block riêng cho Claude khi mô hình đã phân giải thật sự là id Claudeamazon-bedrock, anthropic-vertex
google-geminiChính sách replay native của Gemini cộng với vệ sinh bootstrap replay và chế độ reasoning-output được gắn thẻgoogle, google-gemini-cli
passthrough-geminiVệ sinh thought-signature của Gemini cho các mô hình Gemini chạy qua transport proxy tương thích OpenAI; không bật xác thực replay native của Gemini hoặc ghi lại bootstrapopenrouter, kilocode, opencode, opencode-go
hybrid-anthropic-openaiChính sách hybrid cho các nhà cung cấp trộn bề mặt mô hình thông điệp Anthropic và tương thích OpenAI trong một Plugin; việc bỏ thinking-block chỉ dành cho Claude tùy chọn vẫn được giới hạn ở phía Anthropicminimax
Các nhóm stream hiện có:
NhómNội dung kết nối vàoVí dụ đi kèm
google-thinkingChuẩn hóa payload thinking của Gemini trên đường dẫn stream dùng chunggoogle, google-gemini-cli
kilocode-thinkingWrapper reasoning của Kilo trên đường dẫn proxy stream dùng chung, với kilo/auto và các id reasoning proxy không được hỗ trợ sẽ bỏ qua thinking được chènkilocode
moonshot-thinkingÁnh xạ payload native-thinking nhị phân của Moonshot từ cấu hình + mức /thinkmoonshot
minimax-fast-modeGhi lại model ở chế độ nhanh của MiniMax trên đường dẫn stream dùng chungminimax, minimax-portal
openai-responses-defaultsCác wrapper Responses OpenAI/Codex native dùng chung: header phân bổ, /fast/serviceTier, độ chi tiết văn bản, tìm kiếm web native của Codex, định hình payload tương thích reasoning và quản lý ngữ cảnh Responsesopenai, openai-codex
openrouter-thinkingWrapper reasoning của OpenRouter cho các tuyến proxy, với việc bỏ qua model không được hỗ trợ/auto được xử lý tập trungopenrouter
tool-stream-default-onWrapper tool_stream bật mặc định cho các provider như Z.AI muốn stream công cụ trừ khi bị tắt rõ ràngzai
Mỗi bộ dựng nhóm được kết hợp từ các helper công khai cấp thấp hơn được export từ cùng package, bạn có thể dùng đến chúng khi một provider cần đi lệch khỏi mẫu chung:
  • openclaw/plugin-sdk/provider-model-sharedProviderReplayFamily, buildProviderReplayFamilyHooks(...) và các bộ dựng replay thô (buildOpenAICompatibleReplayPolicy, buildAnthropicReplayPolicyForModel, buildGoogleGeminiReplayPolicy, buildHybridAnthropicOrOpenAIReplayPolicy). Cũng export các helper replay Gemini (sanitizeGoogleGeminiReplayHistory, resolveTaggedReasoningOutputMode) và helper endpoint/model (resolveProviderEndpoint, normalizeProviderId, normalizeGooglePreviewModelId, normalizeNativeXaiModelId).
  • openclaw/plugin-sdk/provider-streamProviderStreamFamily, buildProviderStreamFamilyHooks(...), composeProviderStreamWrappers(...), cộng với các wrapper OpenAI/Codex dùng chung (createOpenAIAttributionHeadersWrapper, createOpenAIFastModeWrapper, createOpenAIServiceTierWrapper, createOpenAIResponsesContextManagementWrapper, createCodexNativeWebSearchWrapper), wrapper tương thích OpenAI DeepSeek V4 (createDeepSeekV4OpenAICompatibleThinkingWrapper), dọn dẹp phần điền sẵn thinking của Anthropic Messages (createAnthropicThinkingPrefillPayloadWrapper) và các wrapper proxy/provider dùng chung (createOpenRouterWrapper, createToolStreamWrapper, createMinimaxFastModeWrapper).
  • openclaw/plugin-sdk/provider-toolsProviderToolCompatFamily, buildProviderToolCompatFamilyHooks("gemini"), các helper schema Gemini bên dưới (normalizeGeminiToolSchemas, inspectGeminiToolSchemas) và helper tương thích xAI (resolveXaiModelCompatPatch(), applyXaiModelCompat(model)). Plugin xAI đi kèm dùng normalizeResolvedModel + contributeResolvedModelCompat cùng với các helper này để giữ quy tắc xAI do provider sở hữu.
Một số helper stream được cố ý giữ cục bộ trong provider. @openclaw/anthropic-provider giữ wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier và các bộ dựng wrapper Anthropic cấp thấp hơn trong seam công khai api.ts / contract-api.ts riêng vì chúng mã hóa xử lý Claude OAuth beta và cổng context1m. Plugin xAI cũng giữ phần định hình Responses native của xAI trong wrapStreamFn riêng (/fast aliases, tool_stream mặc định, dọn dẹp strict-tool không được hỗ trợ, gỡ bỏ payload reasoning dành riêng cho xAI).Mẫu package-root tương tự cũng hỗ trợ @openclaw/openai-provider (bộ dựng provider, helper model mặc định, bộ dựng provider realtime) và @openclaw/openrouter-provider (bộ dựng provider cộng với helper onboarding/cấu hình).
Với các provider cần trao đổi token trước mỗi lần gọi suy luận:
prepareRuntimeAuth: async (ctx) => {
  const exchanged = await exchangeToken(ctx.apiKey);
  return {
    apiKey: exchanged.token,
    baseUrl: exchanged.baseUrl,
    expiresAt: exchanged.expiresAt,
  };
},
OpenClaw gọi các hook theo thứ tự này. Hầu hết provider chỉ dùng 2-3 hook: Các trường provider chỉ dành cho tương thích mà OpenClaw không còn gọi nữa, chẳng hạn như ProviderPlugin.capabilitiessuppressBuiltInModel, không được liệt kê ở đây.
#HookKhi nào dùng
1catalogCatalog model hoặc mặc định URL cơ sở
2applyConfigDefaultsMặc định toàn cục do provider sở hữu trong quá trình hiện thực hóa cấu hình
3normalizeModelIdDọn dẹp alias model-id legacy/preview trước khi tra cứu
4normalizeTransportDọn dẹp api / baseUrl theo họ provider trước khi lắp ráp model chung
5normalizeConfigChuẩn hóa cấu hình models.providers.<id>
6applyNativeStreamingUsageCompatGhi lại tương thích streaming-usage native cho provider cấu hình
7resolveConfigApiKeyPhân giải xác thực env-marker do provider sở hữu
8resolveSyntheticAuthXác thực tổng hợp cục bộ/tự host hoặc dựa trên cấu hình
9shouldDeferSyntheticProfileAuthHạ độ ưu tiên placeholder hồ sơ đã lưu tổng hợp phía sau xác thực env/cấu hình
10resolveDynamicModelChấp nhận ID model upstream tùy ý
11prepareDynamicModelLấy metadata bất đồng bộ trước khi phân giải
12normalizeResolvedModelGhi lại transport trước runner
13contributeResolvedModelCompatCờ tương thích cho model vendor phía sau transport tương thích khác
14normalizeToolSchemasDọn dẹp tool-schema do provider sở hữu trước khi đăng ký
15inspectToolSchemasChẩn đoán tool-schema do provider sở hữu
16resolveReasoningOutputModeHợp đồng reasoning-output dạng tagged so với native
17prepareExtraParamsTham số yêu cầu mặc định
18createStreamFnTransport StreamFn hoàn toàn tùy chỉnh
19wrapStreamFnWrapper header/body tùy chỉnh trên đường dẫn stream bình thường
20resolveTransportTurnStateHeader/metadata native theo từng lượt
21resolveWebSocketSessionPolicyHeader/cool-down phiên WS native
22formatApiKeyHình dạng token runtime tùy chỉnh
23refreshOAuthLàm mới OAuth tùy chỉnh
24buildAuthDoctorHintHướng dẫn sửa xác thực
25matchesContextOverflowErrorPhát hiện tràn ngữ cảnh do provider sở hữu
26classifyFailoverReasonPhân loại giới hạn tốc độ/quá tải do provider sở hữu
27isCacheTtlEligibleCổng TTL cache prompt
28buildMissingAuthMessageGợi ý thiếu xác thực tùy chỉnh
29augmentModelCatalogHàng forward-compat tổng hợp
30resolveThinkingProfileTập tùy chọn /think theo model
31isBinaryThinkingTương thích thinking nhị phân bật/tắt
32supportsXHighThinkingTương thích hỗ trợ reasoning xhigh
33resolveDefaultThinkingLevelTương thích chính sách /think mặc định
34isModernModelRefKhớp model live/smoke
35prepareRuntimeAuthTrao đổi token trước suy luận
36resolveUsageAuthPhân tích thông tin xác thực mức dùng tùy chỉnh
37fetchUsageSnapshotEndpoint mức dùng tùy chỉnh
38createEmbeddingProviderAdapter embedding do provider sở hữu cho bộ nhớ/tìm kiếm
39buildReplayPolicyChính sách replay/Compaction transcript tùy chỉnh
40sanitizeReplayHistoryGhi lại replay dành riêng cho provider sau dọn dẹp chung
41validateReplayTurnsXác thực replay-turn nghiêm ngặt trước runner nhúng
42onModelSelectedCallback sau khi chọn (ví dụ: telemetry)
Ghi chú fallback runtime:
  • normalizeConfig kiểm tra provider đã khớp trước, sau đó đến các provider plugin khác có hook cho đến khi một hook thật sự thay đổi cấu hình. Nếu không hook provider nào ghi lại một mục cấu hình họ Google được hỗ trợ, trình chuẩn hóa cấu hình Google đi kèm vẫn được áp dụng.
  • resolveConfigApiKey dùng hook provider khi được cung cấp. Đường dẫn amazon-bedrock đi kèm cũng có trình phân giải env-marker AWS tích hợp sẵn tại đây, dù bản thân xác thực runtime Bedrock vẫn dùng chuỗi mặc định AWS SDK.
  • resolveSystemPromptContribution cho phép provider chèn hướng dẫn system-prompt nhận biết cache cho một họ model. Ưu tiên dùng nó thay vì before_prompt_build khi hành vi thuộc về một provider/họ model và cần giữ nguyên phân tách cache ổn định/động.
Để xem mô tả chi tiết và ví dụ thực tế, hãy xem Nội bộ: Hook runtime provider.
5

Thêm năng lực bổ sung (tùy chọn)

Một provider plugin có thể đăng ký speech, realtime transcription, realtime voice, media understanding, image generation, video generation, web fetch, và web search cùng với suy luận văn bản. OpenClaw phân loại đây là một plugin hybrid-capability — mẫu được khuyến nghị cho plugin của công ty (một plugin cho mỗi vendor). Xem Nội bộ: Quyền sở hữu năng lực.Đăng ký từng năng lực bên trong register(api) cùng với lệnh gọi api.registerProvider(...) hiện có của bạn. Chỉ chọn các tab bạn cần:
import {
  assertOkOrThrowProviderError,
  postJsonRequest,
} from "openclaw/plugin-sdk/provider-http";

api.registerSpeechProvider({
  id: "acme-ai",
  label: "Acme Speech",
  isConfigured: ({ config }) => Boolean(config.messages?.tts),
  synthesize: async (req) => {
    const { response, release } = await postJsonRequest({
      url: "https://api.example.com/v1/speech",
      headers: new Headers({ "Content-Type": "application/json" }),
      body: { text: req.text },
      timeoutMs: req.timeoutMs,
      fetchFn: fetch,
      auditContext: "acme speech",
    });
    try {
      await assertOkOrThrowProviderError(response, "Acme Speech API error");
      return {
        audioBuffer: Buffer.from(await response.arrayBuffer()),
        outputFormat: "mp3",
        fileExtension: ".mp3",
        voiceCompatible: false,
      };
    } finally {
      await release();
    }
  },
});
Dùng assertOkOrThrowProviderError(...) cho các lỗi HTTP của nhà cung cấp để các plugin chia sẻ việc đọc nội dung lỗi có giới hạn, phân tích lỗi JSON và hậu tố mã định danh yêu cầu.
6

Test

src/provider.test.ts
import { describe, it, expect } from "vitest";
// Export your provider config object from index.ts or a dedicated file
import { acmeProvider } from "./provider.js";

describe("acme-ai provider", () => {
  it("resolves dynamic models", () => {
    const model = acmeProvider.resolveDynamicModel!({
      modelId: "acme-beta-v3",
    } as any);
    expect(model.id).toBe("acme-beta-v3");
    expect(model.provider).toBe("acme-ai");
  });

  it("returns catalog when key is available", async () => {
    const result = await acmeProvider.catalog!.run({
      resolveProviderApiKey: () => ({ apiKey: "test-key" }),
    } as any);
    expect(result?.provider?.models).toHaveLength(2);
  });

  it("returns null catalog when no key", async () => {
    const result = await acmeProvider.catalog!.run({
      resolveProviderApiKey: () => ({ apiKey: undefined }),
    } as any);
    expect(result).toBeNull();
  });
});

Xuất bản lên ClawHub

Plugin nhà cung cấp được xuất bản giống như mọi Plugin mã ngoài khác:
clawhub package publish your-org/your-plugin --dry-run
clawhub package publish your-org/your-plugin
Không dùng bí danh xuất bản cũ chỉ dành cho skill ở đây; gói plugin nên dùng clawhub package publish.

Cấu trúc tệp

<bundled-plugin-root>/acme-ai/
├── package.json              # openclaw.providers metadata
├── openclaw.plugin.json      # Manifest with provider auth metadata
├── index.ts                  # definePluginEntry + registerProvider
└── src/
    ├── provider.test.ts      # Tests
    └── usage.ts              # Usage endpoint (optional)

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:
Thứ tựKhi nàoTrường hợp sử dụng
simpleLượt đầuNhà cung cấp dùng khóa API thuần túy
profileSau simpleNhà cung cấp bị ràng buộc bởi hồ sơ xác thực
pairedSau profileTổng hợp nhiều mục liên quan
lateLượt cuốiGhi đè nhà cung cấp hiện có (thắng khi trùng)

Bước tiếp theo

  • Plugin kênh — nếu plugin của bạn cũng cung cấp một kênh
  • SDK Runtime — trình trợ giúp api.runtime (TTS, tìm kiếm, subagent)
  • Tổng quan SDK — tham chiếu nhập đầy đủ theo đường dẫn con
  • Nội bộ Plugin — chi tiết hook và ví dụ tích hợp sẵn

Liên quan