Skip to content

添加新的 LLM 步骤

假设你要为 DeepSeek 提供支持。根据目前的架构,你需要按照以下步骤操作:

步骤 1: 定义常量

src/utils/common.js 中添加新提供商的标识:

javascript
export const MODEL_PROTOCOL_PREFIX = {
    // ... 现有内容
    DEEPSEEK: 'deepseek', // 新增协议前缀
}

export const MODEL_PROVIDER = {
    // ... 现有内容
    DEEPSEEK_CUSTOM: 'deepseek-custom', // 新增提供商标识
}

步骤 2: 创建提供商核心实现 (Provider Core)

src/providers/deepseek/ 目录下创建 deepseek-core.js

javascript
// src/providers/deepseek/deepseek-core.js
import axios from 'axios';

export class DeepSeekApiService {
    constructor(config) {
        this.apiKey = config.DEEPSEEK_API_KEY;
        this.baseUrl = config.DEEPSEEK_BASE_URL || 'https://api.deepseek.com/v1';
        this.axiosInstance = axios.create({
            baseURL: this.baseUrl,
            headers: {
                'Authorization': `Bearer ${this.apiKey}`,
                'Content-Type': 'application/json'
            }
        });
    }

    async generateContent(model, requestBody) {
        const response = await this.axiosInstance.post('/chat/completions', requestBody);
        return response.data;
    }

    async *generateContentStream(model, requestBody) {
        // 实现流式请求逻辑...
    }
}

步骤 3: 注册适配器 (Provider Adapter)

src/providers/adapter.js 中创建适配器类,并调用 registerAdapter 进行注册:

javascript
// src/providers/adapter.js
import { DeepSeekApiService } from './deepseek/deepseek-core.js';

export class DeepSeekApiServiceAdapter extends ApiServiceAdapter {
    constructor(config) {
        super();
        this.service = new DeepSeekApiService(config);
    }
    // 实现 generateContent, generateContentStream, listModels, refreshToken 等方法...
}

// 在文件底部调用注册方法
registerAdapter(MODEL_PROVIDER.DEEPSEEK_CUSTOM, DeepSeekApiServiceAdapter);

步骤 4: 创建协议转换器 (Converter Strategy)

src/converters/strategies/ 下创建 DeepSeekConverter.js

javascript
// src/converters/strategies/DeepSeekConverter.js
import { BaseConverter } from '../BaseConverter.js';
import { MODEL_PROTOCOL_PREFIX } from '../../utils/common.js';

export class DeepSeekConverter extends BaseConverter {
    // 覆盖 toOpenAIRequest, toClaudeRequest 等方法实现格式转换
}

并在 src/converters/register-converters.js 中注册:

javascript
import { DeepSeekConverter } from './strategies/DeepSeekConverter.js';
// ...
ConverterFactory.registerConverter(MODEL_PROTOCOL_PREFIX.DEEPSEEK, DeepSeekConverter);

步骤 5: 配置提供商策略 (Provider Strategy)

src/utils/provider-strategies.js 中导入新策略,并添加到工厂的 switch 分支中:

javascript
// src/utils/provider-strategies.js
import { DeepSeekStrategy } from '../providers/deepseek/deepseek-strategy.js';

class ProviderStrategyFactory {
    static getStrategy(providerProtocol) {
        switch (providerProtocol) {
            // ... 现有内容
            case MODEL_PROTOCOL_PREFIX.DEEPSEEK:
                return new DeepSeekStrategy();
            default:
                throw new Error(`Unsupported provider protocol: ${providerProtocol}`);
        }
    }
}

步骤 6: (可选) 配置模型列表

src/providers/provider-models.jsPROVIDER_MODELS 对象中添加 DeepSeek 支持的模型名,以便前端 UI 选择。

总结

这种分层设计确保了:

  1. Core: 负责 API 细节(URL、Auth)。
  2. Adapter: 统一内部服务接口。
  3. Converter: 处理跨协议的数据转换。
  4. Strategy: 处理请求逻辑(如系统提示词注入)。