157 lines
3.8 KiB
Markdown
157 lines
3.8 KiB
Markdown
# 模型管理系统
|
||
|
||
## 概述
|
||
|
||
本项目的模型管理系统支持两种服务提供者:
|
||
- **OpenRouter**: 用于文本生成模型
|
||
- **Replicate**: 用于图片、视频、音频生成模型
|
||
|
||
## 数据库结构
|
||
|
||
### Model 表新增字段
|
||
|
||
```sql
|
||
serviceProvider String @default("openrouter") // 服务提供者
|
||
outputType String @default("text") // 输出类型
|
||
```
|
||
|
||
- `serviceProvider`: 服务提供者,可选值:
|
||
- `openrouter`: OpenRouter 服务
|
||
- `replicate`: Replicate 服务
|
||
|
||
- `outputType`: 输出类型,可选值:
|
||
- `text`: 文本输出(OpenRouter 模型)
|
||
- `image`: 图片输出(Replicate 图片生成模型)
|
||
- `video`: 视频输出(Replicate 视频生成模型)
|
||
- `audio`: 音频输出(Replicate 音频生成模型)
|
||
|
||
## 环境变量配置
|
||
|
||
### 必需的环境变量
|
||
|
||
```bash
|
||
# OpenRouter API 密钥(用于文本生成模型)
|
||
OPENROUTER_API_KEY="your_openrouter_api_key"
|
||
|
||
# Replicate API 令牌(用于多媒体生成模型)
|
||
REPLICATE_API_TOKEN="your_replicate_api_token"
|
||
```
|
||
|
||
## 服务类
|
||
|
||
### OpenRouterService
|
||
|
||
位置:`src/lib/openrouter.ts`
|
||
|
||
功能:
|
||
- 获取 OpenRouter 可用模型
|
||
- 转换模型数据为数据库格式
|
||
- 自动设置 `serviceProvider: 'openrouter'` 和 `outputType: 'text'`
|
||
|
||
### ReplicateService
|
||
|
||
位置:`src/lib/replicate.ts`
|
||
|
||
功能:
|
||
- 获取 Replicate 可用模型
|
||
- 按类型分类模型(图片、视频、音频)
|
||
- 转换模型数据为数据库格式
|
||
- 自动设置 `serviceProvider: 'replicate'` 和相应的 `outputType`
|
||
|
||
主要方法:
|
||
- `getImageGenerationModels()`: 获取图片生成模型
|
||
- `getVideoGenerationModels()`: 获取视频生成模型
|
||
- `getAudioGenerationModels()`: 获取音频生成模型
|
||
|
||
## API 接口
|
||
|
||
### POST /api/admin/models
|
||
|
||
同步模型接口支持新参数:
|
||
|
||
```json
|
||
{
|
||
"action": "sync",
|
||
"planId": "plan_id",
|
||
"serviceProvider": "openrouter" | "replicate"
|
||
}
|
||
```
|
||
|
||
响应:
|
||
```json
|
||
{
|
||
"message": "Models fetched successfully",
|
||
"availableModels": [...],
|
||
"planId": "plan_id",
|
||
"serviceProvider": "openrouter"
|
||
}
|
||
```
|
||
|
||
## 前端界面
|
||
|
||
### 管理员模型管理页面
|
||
|
||
位置:`src/app/admin/models/page.tsx`
|
||
|
||
新增功能:
|
||
1. 服务提供者选择器
|
||
- OpenRouter (Text Models)
|
||
- Replicate (Image/Video/Audio Models)
|
||
|
||
2. 模型显示增强
|
||
- 显示输出类型标签
|
||
- 显示服务提供者标签
|
||
- 区分不同类型的模型
|
||
|
||
## 使用流程
|
||
|
||
1. **选择订阅套餐**
|
||
2. **选择服务提供者**
|
||
- OpenRouter: 获取文本生成模型
|
||
- Replicate: 获取多媒体生成模型
|
||
3. **同步模型**
|
||
- 系统自动获取对应服务的可用模型
|
||
- 自动分类和标记输出类型
|
||
4. **添加模型到套餐**
|
||
- 选择需要的模型
|
||
- 批量添加到指定套餐
|
||
|
||
## 模型分类逻辑
|
||
|
||
### Replicate 模型分类
|
||
|
||
系统通过以下关键词自动分类 Replicate 模型:
|
||
|
||
**图片生成模型**:
|
||
- 名称包含: image, diffusion, flux, sdxl, dalle
|
||
- 描述包含: image, generate, diffusion
|
||
|
||
**视频生成模型**:
|
||
- 名称包含: video, runway, pika, animate
|
||
- 描述包含: video, animate, motion
|
||
|
||
**音频生成模型**:
|
||
- 名称包含: audio, music, sound, musicgen, bark
|
||
- 描述包含: audio, music, sound, speech
|
||
|
||
## 注意事项
|
||
|
||
1. **API 限制**: Replicate API 可能有调用频率限制
|
||
2. **模型可用性**: 某些 Replicate 模型可能需要特定权限
|
||
3. **成本考虑**: Replicate 模型的定价结构与 OpenRouter 不同
|
||
4. **错误处理**: 系统会优雅处理 API 调用失败的情况
|
||
|
||
## 扩展性
|
||
|
||
系统设计支持未来添加更多服务提供者:
|
||
- 只需实现相应的服务类
|
||
- 更新 API 接口支持新的 serviceProvider 值
|
||
- 在前端添加新的选项
|
||
|
||
## 测试建议
|
||
|
||
1. 测试 OpenRouter 模型同步
|
||
2. 测试 Replicate 模型同步(需要有效的 API 令牌)
|
||
3. 验证模型分类的准确性
|
||
4. 测试前端界面的响应性和用户体验
|