Files
AI-VideoAssistant/api/docs/model-access.md
2026-02-12 18:44:55 +08:00

412 lines
7.2 KiB
Markdown

# 模型接入 (Model Access) API
模型接入 API 用于管理 LLM、Embedding、Rerank 等 AI 模型的配置。
## 基础信息
| 项目 | 值 |
|------|-----|
| Base URL | `/api/v1/models` |
| 认证方式 | Bearer Token (预留) |
---
## 数据模型
### LLMModel
```typescript
interface LLMModel {
id: string; // 模型唯一标识
user_id: number; // 所属用户ID
name: string; // 模型显示名称
vendor: string; // 供应商: "OpenAI Compatible" | "Dify" | "FastGPT"
type: string; // 类型: "text" | "embedding" | "rerank"
base_url: string; // API Base URL
api_key: string; // API Key
model_name?: string; // 实际模型名称
temperature?: number; // 温度参数 (仅text类型)
context_length?: int; // 上下文长度
enabled: boolean; // 是否启用
created_at: string;
updated_at: string;
}
```
### ASRModel (语音识别模型)
```typescript
interface ASRModel {
id: string;
user_id: number;
name: string;
vendor: string; // "OpenAI Compatible" | "Azure" | "阿里云" | "讯飞"
language: string; // "zh" | "en" | "Multi-lingual"
base_url: string;
api_key: string;
model_name?: string; // 如 "whisper-1", "SenseVoiceSmall"
enabled: boolean;
created_at: string;
}
```
### TTSModel (语音合成模型 - 可选)
```typescript
interface TTSModel {
id: string;
user_id: number;
name: string;
vendor: string; // "OpenAI Compatible" | "Ali" | "Volcano" | "Minimax"
language: string; // "zh" | "en"
voice_list?: string[]; // 支持的声音列表
enabled: boolean;
created_at: string;
}
```
---
## API 端点
### LLM 模型
#### 1. 获取 LLM 模型列表
```http
GET /api/v1/models/llm
```
**Query Parameters:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| type | string | 否 | 过滤类型: "text" \| "embedding" \| "rerank" |
| vendor | string | 否 | 过滤供应商 |
| enabled | boolean | 否 | 过滤启用状态 |
**Response:**
```json
{
"total": 5,
"list": [
{
"id": "llm_001",
"user_id": 1,
"name": "GPT-4o",
"vendor": "OpenAI Compatible",
"type": "text",
"base_url": "https://api.openai.com/v1",
"api_key": "sk-***",
"model_name": "gpt-4o",
"temperature": 0.7,
"context_length": 128000,
"enabled": true,
"created_at": "2024-01-15T10:30:00Z"
},
{
"id": "emb_001",
"user_id": 1,
"name": "Embedding-3-Small",
"vendor": "OpenAI Compatible",
"type": "embedding",
"base_url": "https://api.openai.com/v1",
"api_key": "sk-***",
"model_name": "text-embedding-3-small",
"enabled": true
}
]
}
```
#### 2. 获取单个 LLM 模型详情
```http
GET /api/v1/models/llm/{id}
```
#### 3. 创建 LLM 模型
```http
POST /api/v1/models/llm
```
**Request Body:**
```json
{
"name": "GPT-4o",
"vendor": "OpenAI Compatible",
"type": "text",
"base_url": "https://api.openai.com/v1",
"api_key": "sk-your-api-key",
"model_name": "gpt-4o",
"temperature": 0.7,
"context_length": 128000,
"enabled": true
}
```
#### 4. 更新 LLM 模型
```http
PUT /api/v1/models/llm/{id}
```
**Request Body:** (部分更新)
```json
{
"name": "GPT-4o-Updated",
"temperature": 0.8,
"enabled": false
}
```
#### 5. 删除 LLM 模型
```http
DELETE /api/v1/models/llm/{id}
```
#### 6. 测试 LLM 模型连接
```http
POST /api/v1/models/llm/{id}/test
```
**Response:**
```json
{
"success": true,
"latency_ms": 150,
"message": "Connection successful"
}
```
---
### ASR 模型
#### 1. 获取 ASR 模型列表
```http
GET /api/v1/models/asr
```
**Response:**
```json
{
"total": 3,
"list": [
{
"id": "asr_001",
"user_id": 1,
"name": "Whisper-1",
"vendor": "OpenAI Compatible",
"language": "Multi-lingual",
"base_url": "https://api.openai.com/v1",
"api_key": "sk-***",
"model_name": "whisper-1",
"enabled": true,
"created_at": "2024-01-15T10:30:00Z"
},
{
"id": "asr_002",
"user_id": 1,
"name": "SenseVoice-Small",
"vendor": "OpenAI Compatible",
"language": "zh",
"base_url": "https://api.speech.ai/v1",
"api_key": "sk-***",
"model_name": "sensevoice-small",
"enabled": true
}
]
}
```
#### 2. 创建 ASR 模型
```http
POST /api/v1/models/asr
```
**Request Body:**
```json
{
"name": "SenseVoice-Small",
"vendor": "OpenAI Compatible",
"language": "zh",
"base_url": "https://api.speech.ai/v1",
"api_key": "sk-your-api-key",
"model_name": "sensevoice-small",
"enabled": true
}
```
#### 3. 测试 ASR 模型
```http
POST /api/v1/models/asr/{id}/test
```
**Request Body:**
```json
{
"audio_url": "https://example.com/test.wav"
}
```
**Response:**
```json
{
"success": true,
"transcript": "测试音频内容",
"language": "zh",
"latency_ms": 500
}
```
---
### TTS 模型 (可选)
#### 1. 获取 TTS 模型列表
```http
GET /api/v1/models/tts
```
#### 2. 创建 TTS 模型
```http
POST /api/v1/models/tts
```
**Request Body:**
```json
{
"name": "阿里云语音合成",
"vendor": "Ali",
"language": "zh",
"base_url": "https://nlp.cn-shanghai.aliyuncs.com",
"api_key": "sk-***",
"enabled": true
}
```
---
## 推荐的 Schema 定义
```python
# ============ LLM Model ============
class LLMModelType(str, Enum):
TEXT = "text"
EMBEDDING = "embedding"
RERANK = "rerank"
class LLMModelVendor(str, Enum):
OPENAI_COMPATIBLE = "OpenAI Compatible"
DIFY = "Dify"
FASTGPT = "FastGPT"
class LLMModelBase(BaseModel):
name: str
vendor: str
type: LLMModelType
base_url: str
api_key: str
model_name: Optional[str] = None
temperature: Optional[float] = None
context_length: Optional[int] = None
enabled: bool = True
class LLMModelCreate(LLMModelBase):
pass
class LLMModelUpdate(BaseModel):
name: Optional[str] = None
base_url: Optional[str] = None
api_key: Optional[str] = None
model_name: Optional[str] = None
temperature: Optional[float] = None
context_length: Optional[int] = None
enabled: Optional[bool] = None
class LLMModelOut(LLMModelBase):
id: str
user_id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
# ============ ASR Model ============
class ASRModelBase(BaseModel):
name: str
vendor: str
language: str # "zh" | "en" | "Multi-lingual"
base_url: str
api_key: str
model_name: Optional[str] = None
enabled: bool = True
class ASRModelCreate(ASRModelBase):
pass
class ASRModelOut(ASRModelBase):
id: str
user_id: int
created_at: datetime
class Config:
from_attributes = True
```
---
## 供应商配置示例
### OpenAI Compatible
```json
{
"vendor": "OpenAI Compatible",
"base_url": "https://api.openai.com/v1",
"api_key": "sk-xxx",
"model_name": "gpt-4o"
}
```
### OpenAI Compatible
```json
{
"vendor": "OpenAI Compatible",
"base_url": "https://api.siliconflow.com/v1",
"api_key": "sf-xxx",
"model_name": "deepseek-v3"
}
```
### Dify
```json
{
"vendor": "Dify",
"base_url": "https://your-dify.domain.com/v1",
"api_key": "app-xxx",
"model_name": "gpt-4"
}
```