添加新的 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.js 的 PROVIDER_MODELS 对象中添加 DeepSeek 支持的模型名,以便前端 UI 选择。
总结
这种分层设计确保了:
- Core: 负责 API 细节(URL、Auth)。
- Adapter: 统一内部服务接口。
- Converter: 处理跨协议的数据转换。
- Strategy: 处理请求逻辑(如系统提示词注入)。