OpenClaw 自定义 Provider 开发

接入任何 AI 模型 —— 从 OpenAI 兼容到企业私有模型

📅 更新于 2026年5月25日 ⏱️ 阅读时间:20分钟 🏷️ Provider开发, 自定义模型, OpenClaw教程

🎯 为什么需要自定义 Provider?

世界上有一种需求,叫「我要用自己的模型」。OpenAI、Anthropic 很好,但企业有私有模型、本地有 Ollama、特殊场景需要定制 API。

"周二下午4点,公司要求接入内部微调的 GLM 模型。OpenClaw 默认不支持。那一刻我知道,需要学会写自定义 Provider。"

自定义 Provider 让你能够:

  • 🏢 接入企业私有模型 - 公司内部微调模型、私有化部署
  • 🖥️ 本地 LLM - Ollama、LM Studio、vLLM 本地运行
  • 🔌 OpenAI 兼容 API - 任何兼容 OpenAI API 的服务
  • 🛡️ 统一认证管理 - v2026.5.22 改进认证状态预热
  • 🎛️ 细粒度控制 - 自定义重试、超时、fallback 策略

🚀 快速开始

1. 最简单的 Provider(OpenAI 兼容)

// ~/.openclaw/config.json
{
  "providers": {
    "my-custom-api": {
      "type": "openai-compatible",
      "baseUrl": "https://my-api.example.com/v1",
      "apiKey": "sk-your-key",
      "models": ["my-model-1", "my-model-2"]
    }
  },
  "agents": {
    "main": {
      "provider": "my-custom-api",
      "model": "my-model-1"
    }
  }
}

2. 接入 Ollama 本地模型

// Ollama 是 OpenAI 兼容的,配置更简单
{
  "providers": {
    "ollama-local": {
      "type": "openai-compatible",
      "baseUrl": "http://localhost:11434/v1",
      "apiKey": "ollama", // Ollama 不需要真实 key
      "models": ["llama3.1", "mistral", "codellama"]
    }
  }
}

// 验证
openclaw models list --provider ollama-local

// 使用
openclaw agent --provider ollama-local "帮我写个Python脚本"

3. 使用 Plugin SDK 开发高级 Provider

// src/my-provider-plugin.ts
import { Plugin, LLMProvider } from '@openclaw/plugin-sdk';

export class MyProviderPlugin implements Plugin, LLMProvider {
  name = 'my-provider';
  version = '1.0.0';
  
  // Provider 元数据
  getProviderInfo() {
    return {
      id: 'my-provider',
      name: 'My Custom Provider',
      type: 'custom',
      supportsStreaming: true,
      supportsTools: true
    };
  }
  
  // 列出可用模型
  async listModels(): Promise<Model[]> {
    return [
      { id: 'my-model-1', contextWindow: 128000 },
      { id: 'my-model-2', contextWindow: 256000 }
    ];
  }
  
  // 执行 completion
  async complete(request: CompletionRequest): Promise<CompletionResponse> {
    // 实现你的 API 调用逻辑
    const response = await fetch('https://my-api.com/v1/chat/completions', {
      method: 'POST',
      headers: { 
        'Authorization': `Bearer ${this.apiKey}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: request.model,
        messages: request.messages,
        stream: request.stream
      })
    });
    
    return await response.json();
  }
}

export default function createPlugin(config: any) {
  return new MyProviderPlugin(config);
}

💻 v2026.5.22 新特性:认证状态预热

v2026.5.22 带来了 Provider 认证状态的预热机制,模型列表查询性能提升 4000x:

认证状态预热配置

{
  "providers": {
    "my-provider": {
      "type": "custom",
      "preWarmAuth": true,  // 启用预热(默认true)
      "preWarmTimeoutMs": 30000,
      "reuseAuthState": true  // 跨模块复用认证状态
    }
  },
  "gateway": {
    "performance": {
      "preWarmModels": true,
      "reuseProviderAuth": true  // 预热 Provider 认证
    }
  }
}

// 效果:
// 首次 /models 调用:~20s(预热)
// 后续 /models 调用:~5ms(缓存命中)
// 性能提升:~4000x

处理认证失败和重试

// v2026.5.22 改进了认证失败处理
{
  "providers": {
    "my-provider": {
      "auth": {
        "retry": {
          "maxAttempts": 3,
          "backoff": "exponential",
          "initialDelayMs": 1000
        },
        "failover": {
          "enabled": true,
          "fallbackProvider": "openai"  // 认证失败切换到备用
        }
      }
    }
  }
}

🔧 实战:接入企业私有模型

场景:公司微调的 GLM 模型

// 1. 配置企业 GLM Provider
{
  "providers": {
    "company-glm": {
      "type": "openai-compatible",
      "baseUrl": "https://ai.company.com/v1",
      "apiKey": "${COMPANY_AI_KEY}",  // 从环境变量读取
      "models": ["glm-4-plus", "glm-4-air", "glm-4-flash"],
      "headers": {
        "X-Company-ID": "${COMPANY_ID}",
        "X-Project-ID": "miaoquai"
      },
      "timeoutMs": 60000
    }
  },
  "agents": {
    "company-bot": {
      "provider": "company-glm",
      "model": "glm-4-plus",
      "systemPrompt": "你是妙趣AI的企业助手..."
    }
  }
}

// 2. 设置环境变量
export COMPANY_AI_KEY="your-company-key"
export COMPANY_ID="miaoquai-001"

// 3. 测试
openclaw agent --agent company-bot "分析这份财报的要点"

高级:自定义模型 catalog

// 如果你的模型不在 /models 返回中,可以手动定义
{
  "providers": {
    "my-provider": {
      "catalog": {
        "static": [
          {
            "id": "my-model-1",
            "name": "My Model 1",
            "contextWindow": 128000,
            "inputCostPer1k": 0.01,
            "outputCostPer1k": 0.03
          },
          {
            "id": "my-model-2",
            "name": "My Model 2",
            "contextWindow": 256000,
            "supportsTools": true,
            "supportsVision": true
          }
        ]
      }
    }
  }
}

📊 Provider 配置详解

配置项 说明 默认值
type Provider 类型(openai, anthropic, custom等) required
baseUrl API 端点 根据 type 默认
apiKey API 密钥(支持环境变量) null
timeoutMs 请求超时(毫秒) 30000
maxRetries 最大重试次数 3
preWarmAuth 是否预热认证状态(v2026.5.22+) true
reuseAuthState 是否复用认证状态 true

🎓 高级话题

1. 多模型路由(Model Router)

// 根据任务类型自动选择模型
{
  "providers": {
    "router": {
      "type": "model-router",
      "rules": [
        {
          "match": { "task": "code" },
          "provider": "ollama-local",
          "model": "codellama"
        },
        {
          "match": { "task": "chat" },
          "provider": "openai",
          "model": "gpt-4o"
        },
        {
          "match": { "contextWindow": ">128000" },
          "provider": "anthropic",
          "model": "claude-3-opus"
        }
      ],
      "default": {
        "provider": "openai",
        "model": "gpt-4o-mini"
      }
    }
  }
}

2. 成本追踪

// 为自定义 Provider 添加成本追踪
{
  "providers": {
    "my-provider": {
      "costTracking": {
        "enabled": true,
        "inputCostPer1k": 0.01,
        "outputCostPer1k": 0.03,
        "reportTo": "prometheus"  // 或 "logs"
      }
    }
  }
}

// 查看成本
openclaw usage --provider my-provider --last 7d

3. 与嵌入 Provider 集成

// v2026.5.22 新增通用嵌入提供商 API
{
  "embeddingProviders": {
    "my-embeddings": {
      "provider": "custom",
      "baseUrl": "https://my-embeddings.com",
      "apiKey": "${EMBEDDING_KEY}",
      "dimensions": 1536
    }
  },
  "memory": {
    "provider": "lancedb",
    "config": {
      "embeddingProvider": "my-embeddings"
    }
  }
}

🔧 故障排查

问题 原因 解决方案
模型列表为空 认证失败 运行 openclaw doctor,检查 API key
请求超时 网络或模型慢 增加 timeoutMs 配置
工具调用不支持 Provider 不支持 设置 supportsTools: false
预热失败 Provider 响应慢 增加 preWarmTimeoutMs 或禁用预热

📚 相关资源

🎯 妙趣提示: 自定义 Provider 最爽的是「成本可控」。用 Ollama 跑本地模型,一个月才几块钱电费,随便用!v2026.5.22 的认证预热让本地模型也能享受 4000x 性能提升。