# Model Provider Creator

> 为多模型支持创建新的 AI 模型提供商。当用户想要添加对新的 AI 模型（OpenAI、Claude 等）的支持时使用此技能。

- Skill: `bage2014/model-provider-creator` (Agent Skill)
- Install (CLI): `npx skillmds@latest add bage2014/model-provider-creator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bage2014/model-provider-creator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: bage2014 (https://skillmd.com/u/bage2014)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bage2014/model-provider-creator

---


# 模型提供商创建器

## 功能描述

帮助创建新的 AI 模型提供商以扩展多模型支持，实现模型特定的聊天逻辑和配置管理。

## 何时使用

在以下情况调用此技能：
- 为项目添加新的 AI 模型支持（OpenAI、Claude 等）
- 创建自定义模型提供商
- 扩展多模型架构
- 实现模型特定的聊天逻辑

## 核心功能

- **提供商创建**：创建新的模型提供商实现
- **配置管理**：管理模型提供商的配置参数
- **服务注册**：自动注册到模型管理器
- **多模型切换**：支持运行时切换不同模型

## 输入参数

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| providerName | String | 是 | 提供商名称（唯一标识） |
| modelType | String | 是 | 模型类型 |
| config | Map | 否 | 配置参数 |

## 输出格式

```json
{
  "providerName": "newmodel",
  "status": "SUCCESS",
  "description": "模型提供商创建成功"
}
```

## 提供商接口规范

### ModelProvider 接口

```java
public interface ModelProvider {
    String getProviderName();        // 唯一名称（如 "openai"、"claude"）
    boolean supports(String modelType);  // 检查是否支持给定模型
    ChatResponse chat(ChatRequest request);  // 处理聊天请求
    default boolean isAvailable();   // 检查提供商是否就绪
}
```

## 实现模式

### 创建提供商实现类

```java
@Component
public class NewModelProvider implements ModelProvider {

    @Override
    public String getProviderName() {
        return "newmodel";
    }

    @Override
    public boolean supports(String modelType) {
        return "newmodel".equalsIgnoreCase(modelType);
    }

    @Override
    public ChatResponse chat(ChatRequest request) {
        try {
            // 使用 Spring AI ChatClient 或特定客户端
            String content = chatClient.prompt()
                .user(request.message())
                .call()
                .content();
            return ChatResponse.success(getProviderName(), content, "model-name");
        } catch (Exception e) {
            return ChatResponse.error(getProviderName(), e.getMessage());
        }
    }

    @Override
    public boolean isAvailable() {
        return true;
    }
}
```

### 配置属性（可选）

```java
@ConfigurationProperties(prefix = "spring.ai.newmodel")
public class NewModelProperties {
    private String baseUrl;
    private String apiKey;
    private String chatModel;
    private boolean enabled = true;
    // getters/setters
}
```

## 支持的模型提供商

| 提供商名称 | 支持模型 | 配置方式 |
|------------|----------|----------|
| deepseek | deepseek-chat | 环境变量 |
| openai | gpt-3.5-turbo, gpt-4 | 环境变量 |

## 核心组件

| 组件 | 职责 | 文件路径 |
|------|------|----------|
| ModelProvider | 提供商接口 | `provider/ModelProvider.java` |
| ModelProviderManager | 提供商管理器 | `provider/ModelProviderManager.java` |
| ChatService | 聊天服务 | `service/ChatService.java` |

## 创建新模型提供商步骤

### 第一步：创建配置属性类

```java
@ConfigurationProperties(prefix = "spring.ai.newmodel")
public class NewModelProperties {
    private String apiKey;
    private String baseUrl;
    private String model = "default-model";
    // getters/setters
}
```

### 第二步：创建提供商实现

```java
@Component
public class NewModelProvider implements ModelProvider {
    
    private final NewModelProperties properties;
    private final ChatClient chatClient;
    
    @Override
    public String getProviderName() {
        return "newmodel";
    }
    
    @Override
    public boolean supports(String modelType) {
        return "newmodel".equalsIgnoreCase(modelType);
    }
    
    @Override
    public ChatResponse chat(ChatRequest request) {
        // 实现聊天逻辑
    }
}
```

### 第三步：配置 Spring AI

```java
@Configuration
@EnableConfigurationProperties(NewModelProperties.class)
public class NewModelConfig {
    
    @Bean
    public ChatClient newModelChatClient(NewModelProperties properties) {
        return ChatClient.builder()
            .baseUrl(properties.getBaseUrl())
            .apiKey(properties.getApiKey())
            .defaultOptions(options -> options.model(properties.getModel()))
            .build();
    }
}
```

## 配置要求

### 环境变量

| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `MODEL_PROVIDER_API_KEY` | 模型 API Key | - |
| `MODEL_PROVIDER_BASE_URL` | 模型 API 地址 | - |

### 配置文件

```yaml
spring:
  ai:
    newmodel:
      api-key: ${MODEL_PROVIDER_API_KEY}
      base-url: ${MODEL_PROVIDER_BASE_URL}
      chat-model: newmodel-chat
```

## 目录结构

```
src/main/java/com/bage/study/ai/best/practice/hello/
├── provider/
│   ├── ModelProvider.java          # 提供商接口
│   ├── ModelProviderManager.java   # 提供商管理器
│   └── NewModelProvider.java       # 具体提供商实现
├── config/
│   ├── NewModelProperties.java     # 配置属性类
│   └── NewModelConfig.java         # 配置类
├── service/
│   └── ChatService.java            # 聊天服务
└── model/
    ├── ChatRequest.java            # 请求 DTO
    └── ChatResponse.java           # 响应 DTO
```

## 使用方式

提供商通过 `@Component` 注解自动注册，由 `ModelProviderManager` 管理。

```java
@Autowired
private ModelProviderManager providerManager;

// 获取提供商
ModelProvider provider = providerManager.getProvider("newmodel");

// 执行聊天
ChatResponse response = provider.chat(request);
```

## 扩展指南

### 添加新的模型提供商

1. 创建配置属性类（使用 `@ConfigurationProperties`）
2. 创建配置类，注册 `ChatClient` Bean
3. 实现 `ModelProvider` 接口
4. 添加 `@Component` 注解自动注册

### 支持模型切换

在 `ModelProviderManager` 中实现模型切换逻辑，支持运行时动态切换。
