1 line
158 KiB
JSON
1 line
158 KiB
JSON
{"repo": "benedictking/uni-load", "files": {"docs/api.md": {"55fb1bd7d2e15e8e9fcb98ac0d190b3f3b4a8ff1": {"t": 1785746513.4201467, "n": 9828, "h": "1f2b102d2d1b2707", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 统一处理,用于自动配置 AI 站点。**此接口智能地处理创建和更新两种场景**:\n\n* **如果站点不存在**:它会执行完整的创建流程,包括选择最佳实例、获取模型、创建多层分组等。\n* **如果站点已存在**:它会执行更新流程,例如添加新的 API 密钥,并通过已存在的渠道代理高效地刷新模型列表,而不会创建临时分组。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"targetChannelName\": \"deepseek-openai\",\n \"operationType\": \"update\"\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`。支持的值:\n - `openai`: OpenAI 兼容格式 (使用 `Authorization: Bearer` 头部认证)\n - `anthropic`: Anthropic Claude 格式 (使用 `x-api-key` 头部认证)\n - `gemini`: Google Gemini 格式 (使用 URL 参数 `?key=` 认证)\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n- `targetChannelName` (可选): 指定要更新的目标渠道名称\n- `operationType` (可选): 操作类型,可选值:\n - `create` (默认): 创建新渠道\n - `update`: 更新现有渠道\n\n#### 更新操作说明\n\n当 `operationType` 设置为 `update` 并提供 `targetChannelName` 时,系统执行以下流程:\n\n1. **添加新密钥**: 首先将新提供的 API 密钥添加到指定的现有渠道分组中\n2. **刷新模型列表**: 通过该渠道的代理高效地获取最新的模型列表\n3. **更新配置**: 同步更新相关的分组配置和模型映射\n\n**执行特点**:\n- 通过 `targetChannelName` 精确定位要更新的渠道分组\n- 使用 gpt-load 实例的 token 进行认证,无需上游站点的 API 密钥\n- 不会创建临时分组,直接通过现有渠道代理操作,提高更新效率\n- 确保密钥先添加后使用,保证认证成功率\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"usingManualModels\": false,\n \"modelsByChannel\": {\n \"openai\": [\n \"deepseek-chat\",\n \"deepseek-coder\"\n ]\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 重新分配渠道实例 (提级/降级)\n\n此接口提供了一种便捷的方式来更改渠道分组分配的实例,从而有效地将其**提级**到更高优先级的实例或**降级**到更低优先级的实例。\n\n```http\nPOST /api/channels/reassign\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-openai\",\n \"action\": \"demote\"\n}\n```\n\n**请求参数**:\n- `channelName` (必需): 要重新分配的渠道分组的名称。\n- `action` (必需): 要执行的操作。可选值:\n - `demote`: 将渠道分配到**更高优先级**的实例 (例如,从优先级2的实例移至优先级1的实例)。\n - `promote`: 将渠道分配到**更低优先级**的实例 (例如,从优先级1的实例移至优先级2的实例)。\n\n> ⚠️ **注意**: `action` 参数的行为与名称的直观含义相反。`demote` 会提升渠道的实际优先级,而 `promote` 会降低它。\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"渠道 deepseek-openai 已成功提级到实例 本地 gpt-load\",\n \"data\": {\n \"channelName\": \"deepseek-openai\",\n \"previousInstanceName\": \"美国代理 gpt-load\",\n \"newInstanceName\": \"本地 gpt-load\"\n }\n}\n```\n\n#### 4.3 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.4 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.5 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.6 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.7 删除渠道\n\n彻底删除一个渠道及其所有相关配置。\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。\n"}, "b2c6b5e7117f6f0971240d916b8b92ef511292b2": {"t": 1785765108.8799448, "n": 9828, "h": "1f2b102d2d1b2707", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 统一处理,用于自动配置 AI 站点。**此接口智能地处理创建和更新两种场景**:\n\n* **如果站点不存在**:它会执行完整的创建流程,包括选择最佳实例、获取模型、创建多层分组等。\n* **如果站点已存在**:它会执行更新流程,例如添加新的 API 密钥,并通过已存在的渠道代理高效地刷新模型列表,而不会创建临时分组。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"targetChannelName\": \"deepseek-openai\",\n \"operationType\": \"update\"\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`。支持的值:\n - `openai`: OpenAI 兼容格式 (使用 `Authorization: Bearer` 头部认证)\n - `anthropic`: Anthropic Claude 格式 (使用 `x-api-key` 头部认证)\n - `gemini`: Google Gemini 格式 (使用 URL 参数 `?key=` 认证)\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n- `targetChannelName` (可选): 指定要更新的目标渠道名称\n- `operationType` (可选): 操作类型,可选值:\n - `create` (默认): 创建新渠道\n - `update`: 更新现有渠道\n\n#### 更新操作说明\n\n当 `operationType` 设置为 `update` 并提供 `targetChannelName` 时,系统执行以下流程:\n\n1. **添加新密钥**: 首先将新提供的 API 密钥添加到指定的现有渠道分组中\n2. **刷新模型列表**: 通过该渠道的代理高效地获取最新的模型列表\n3. **更新配置**: 同步更新相关的分组配置和模型映射\n\n**执行特点**:\n- 通过 `targetChannelName` 精确定位要更新的渠道分组\n- 使用 gpt-load 实例的 token 进行认证,无需上游站点的 API 密钥\n- 不会创建临时分组,直接通过现有渠道代理操作,提高更新效率\n- 确保密钥先添加后使用,保证认证成功率\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"usingManualModels\": false,\n \"modelsByChannel\": {\n \"openai\": [\n \"deepseek-chat\",\n \"deepseek-coder\"\n ]\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 重新分配渠道实例 (提级/降级)\n\n此接口提供了一种便捷的方式来更改渠道分组分配的实例,从而有效地将其**提级**到更高优先级的实例或**降级**到更低优先级的实例。\n\n```http\nPOST /api/channels/reassign\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-openai\",\n \"action\": \"demote\"\n}\n```\n\n**请求参数**:\n- `channelName` (必需): 要重新分配的渠道分组的名称。\n- `action` (必需): 要执行的操作。可选值:\n - `demote`: 将渠道分配到**更高优先级**的实例 (例如,从优先级2的实例移至优先级1的实例)。\n - `promote`: 将渠道分配到**更低优先级**的实例 (例如,从优先级1的实例移至优先级2的实例)。\n\n> ⚠️ **注意**: `action` 参数的行为与名称的直观含义相反。`demote` 会提升渠道的实际优先级,而 `promote` 会降低它。\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"渠道 deepseek-openai 已成功提级到实例 本地 gpt-load\",\n \"data\": {\n \"channelName\": \"deepseek-openai\",\n \"previousInstanceName\": \"美国代理 gpt-load\",\n \"newInstanceName\": \"本地 gpt-load\"\n }\n}\n```\n\n#### 4.3 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.4 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.5 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.6 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.7 删除渠道\n\n彻底删除一个渠道及其所有相关配置。\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。\n"}, "2f00ef83c25009a793684837eabfb7aa7668c8a4": {"t": 1785765110.2119944, "n": 10273, "h": "84201809a2ef2aaa", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 统一处理,用于自动配置 AI 站点。**此接口智能地处理创建和更新两种场景**:\n\n* **如果站点不存在**:它会执行完整的创建流程,包括选择最佳实例、获取模型、创建多层分组等。\n* **如果站点已存在**:它会执行更新流程,例如添加新的 API 密钥,并通过已存在的渠道代理高效地刷新模型列表,而不会创建临时分组。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"targetChannelName\": \"deepseek-openai\",\n \"operationType\": \"update\"\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`。支持的值:\n - `openai`: OpenAI 兼容格式 (使用 `Authorization: Bearer` 头部认证)\n - `anthropic`: Anthropic Claude 格式 (使用 `x-api-key` 头部认证)\n - `gemini`: Google Gemini 格式 (使用 URL 参数 `?key=` 认证)\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n- `targetChannelName` (可选): 指定要更新的目标渠道名称\n- `operationType` (可选): 操作类型,可选值:\n - `create` (默认): 创建新渠道\n - `update`: 更新现有渠道\n\n#### 更新操作说明\n\n当 `operationType` 设置为 `update` 并提供 `targetChannelName` 时,系统执行以下流程:\n\n1. **添加新密钥**: 首先将新提供的 API 密钥添加到指定的现有渠道分组中\n2. **刷新模型列表**: 通过该渠道的代理高效地获取最新的模型列表\n3. **更新配置**: 同步更新相关的分组配置和模型映射\n\n**执行特点**:\n- 通过 `targetChannelName` 精确定位要更新的渠道分组\n- 使用 gpt-load 实例的 token 进行认证,无需上游站点的 API 密钥\n- 不会创建临时分组,直接通过现有渠道代理操作,提高更新效率\n- 确保密钥先添加后使用,保证认证成功率\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"selectedInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1,\n \"healthStatus\": \"healthy\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 重新分配渠道实例 (提级/降级)\n\n此接口提供了一种便捷的方式来更改渠道分组分配的实例,从而有效地将其**提级**到更高优先级的实例或**降级**到更低优先级的实例。\n\n```http\nPOST /api/channels/reassign\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-openai\",\n \"action\": \"demote\"\n}\n```\n\n**请求参数**:\n- `channelName` (必需): 要重新分配的渠道分组的名称。\n- `action` (必需): 要执行的操作。可选值:\n - `demote`: 将渠道分配到**更高优先级**的实例 (例如,从优先级2的实例移至优先级1的实例)。\n - `promote`: 将渠道分配到**更低优先级**的实例 (例如,从优先级1的实例移至优先级2的实例)。\n\n> ⚠️ **注意**: `action` 参数的行为与名称的直观含义相反。`demote` 会提升渠道的实际优先级,而 `promote` 会降低它。\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"渠道 deepseek-openai 已成功提级到实例 本地 gpt-load\",\n \"data\": {\n \"channelName\": \"deepseek-openai\",\n \"previousInstanceName\": \"美国代理 gpt-load\",\n \"newInstanceName\": \"本地 gpt-load\"\n }\n}\n```\n\n#### 4.3 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.4 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.5 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.6 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.7 删除渠道\n\n彻底删除一个渠道及其所有相关配置。\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。\n"}, "2c196b137572aa57c569c8a07c4f01a08f9b042f": {"t": 1785765111.580656, "n": 9537, "h": "1c1171becd7ca3af", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 统一处理,用于自动配置 AI 站点。**此接口智能地处理创建和更新两种场景**:\n\n* **如果站点不存在**:它会执行完整的创建流程,包括选择最佳实例、获取模型、创建多层分组等。\n* **如果站点已存在**:它会执行更新流程,例如添加新的 API 密钥,并通过已存在的渠道代理高效地刷新模型列表,而不会创建临时分组。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"targetChannelName\": \"deepseek-openai\",\n \"operationType\": \"update\"\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`。支持的值:\n - `openai`: OpenAI 兼容格式 (使用 `Authorization: Bearer` 头部认证)\n - `anthropic`: Anthropic Claude 格式 (使用 `x-api-key` 头部认证)\n - `gemini`: Google Gemini 格式 (使用 URL 参数 `?key=` 认证)\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n- `targetChannelName` (可选): 指定要更新的目标渠道名称\n- `operationType` (可选): 操作类型,可选值:\n - `create` (默认): 创建新渠道\n - `update`: 更新现有渠道\n\n#### 更新操作说明\n\n当 `operationType` 设置为 `update` 并提供 `targetChannelName` 时,系统执行以下流程:\n\n1. **添加新密钥**: 首先将新提供的 API 密钥添加到指定的现有渠道分组中\n2. **刷新模型列表**: 通过该渠道的代理高效地获取最新的模型列表\n3. **更新配置**: 同步更新相关的分组配置和模型映射\n\n**执行特点**:\n- 通过 `targetChannelName` 精确定位要更新的渠道分组\n- 使用 gpt-load 实例的 token 进行认证,无需上游站点的 API 密钥\n- 不会创建临时分组,直接通过现有渠道代理操作,提高更新效率\n- 确保密钥先添加后使用,保证认证成功率\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"selectedInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1,\n \"healthStatus\": \"healthy\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n彻底删除一个渠道及其所有相关配置。\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。\n"}, "0b2d9dd6f9b28719d66a5e013bfc9d0149bfeff1": {"t": 1785765114.4180477, "n": 9358, "h": "3d7259f34766d3d9", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 统一处理,用于自动配置 AI 站点。**此接口智能地处理创建和更新两种场景**:\n\n* **如果站点不存在**:它会执行完整的创建流程,包括选择最佳实例、获取模型、创建多层分组等。\n* **如果站点已存在**:它会执行更新流程,例如添加新的 API 密钥,并通过已存在的渠道代理高效地刷新模型列表,而不会创建临时分组。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"targetChannelName\": \"deepseek-openai\",\n \"operationType\": \"update\"\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n- `targetChannelName` (可选): 指定要更新的目标渠道名称\n- `operationType` (可选): 操作类型,可选值:\n - `create` (默认): 创建新渠道\n - `update`: 更新现有渠道\n\n#### 更新操作说明\n\n当 `operationType` 设置为 `update` 并提供 `targetChannelName` 时,系统执行以下流程:\n\n1. **添加新密钥**: 首先将新提供的 API 密钥添加到指定的现有渠道分组中\n2. **刷新模型列表**: 通过该渠道的代理高效地获取最新的模型列表\n3. **更新配置**: 同步更新相关的分组配置和模型映射\n\n**执行特点**:\n- 通过 `targetChannelName` 精确定位要更新的渠道分组\n- 使用 gpt-load 实例的 token 进行认证,无需上游站点的 API 密钥\n- 不会创建临时分组,直接通过现有渠道代理操作,提高更新效率\n- 确保密钥先添加后使用,保证认证成功率\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"selectedInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1,\n \"healthStatus\": \"healthy\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n彻底删除一个渠道及其所有相关配置。\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。\n"}, "6ede5dd4d9c700ced970c9473ce1f257ba20e23b": {"t": 1785765116.6009564, "n": 9190, "h": "ba525a42776f2d92", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 统一处理,用于自动配置 AI 站点。**此接口智能地处理创建和更新两种场景**:\n\n* **如果站点不存在**:它会执行完整的创建流程,包括选择最佳实例、获取模型、创建多层分组等。\n* **如果站点已存在**:它会执行更新流程,例如添加新的 API 密钥,并通过已存在的渠道代理高效地刷新模型列表,而不会创建临时分组。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"targetChannelName\": \"deepseek-openai\",\n \"operationType\": \"update\"\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n- `targetChannelName` (可选): 指定要更新的目标渠道名称\n- `operationType` (可选): 操作类型,可选值:\n - `create` (默认): 创建新渠道\n - `update`: 更新现有渠道\n\n#### 更新操作说明\n\n当 `operationType` 设置为 `update` 并提供 `targetChannelName` 时:\n- 系统将执行更新逻辑,而不是创建新渠道\n- 通过 `targetChannelName` 精确定位要更新的模型分组\n- 使用 gpt-load 实例的 token 进行认证,提高更新效率\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"selectedInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1,\n \"healthStatus\": \"healthy\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n彻底删除一个渠道及其所有相关配置。\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。\n"}, "06eb26529873baa152720b0397d1e07fd7d9662a": {"t": 1785765118.4520214, "n": 8831, "h": "f27f5a69f05ce839", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 统一处理,用于自动配置 AI 站点。**此接口智能地处理创建和更新两种场景**:\n\n* **如果站点不存在**:它会执行完整的创建流程,包括选择最佳实例、获取模型、创建多层分组等。\n* **如果站点已存在**:它会执行更新流程,例如添加新的 API 密钥,并通过已存在的渠道代理高效地刷新模型列表,而不会创建临时分组。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"]\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"selectedInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1,\n \"healthStatus\": \"healthy\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n彻底删除一个渠道及其所有相关配置。\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。\n"}, "a94119fb5e0d7556c463f7e2cb813305a8a10633": {"t": 1785765121.0104747, "n": 9086, "h": "c5d6a50ee31bf7a9", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 统一处理,用于自动配置 AI 站点。**此接口智能地处理创建和更新两种场景**:\n\n* **如果站点不存在**:它会执行完整的创建流程,包括选择最佳实例、获取模型、创建多层分组等。\n* **如果站点已存在**:它会执行更新流程,例如添加新的 API 密钥,并通过已存在的渠道代理高效地刷新模型列表,而不会创建临时分组。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"]\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"selectedInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1,\n \"healthStatus\": \"healthy\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n彻底删除一个渠道及其所有相关配置。\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。\n"}, "4c7b4acae557953547680f45c43276b649a9747d": {"t": 1785765122.6295345, "n": 8811, "h": "94b1eb8d0e11ea4c", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 统一处理,用于自动配置 AI 站点。**此接口智能地处理创建和更新两种场景**:\n\n* **如果站点不存在**:它会执行完整的创建流程,包括选择最佳实例、获取模型、创建多层分组等。\n* **如果站点已存在**:它会执行更新流程,例如添加新的 API 密钥,并通过已存在的渠道代理高效地刷新模型列表,而不会创建临时分组。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"]\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"selectedInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1,\n \"healthStatus\": \"healthy\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。"}, "3f3957215073c11cae156a80eecbcb0e3a64acfc": {"t": 1785765123.833815, "n": 8752, "h": "9c2491323e8285b3", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 处理,用于自动配置 AI 站点到 gpt-load 和 uni-api。该接口协调多个服务(GptloadService、ModelsService、YamlManager)来完成完整的站点配置流程。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"]\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"selectedInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1,\n \"healthStatus\": \"healthy\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n获取所有已配置的站点分组(第一层分组,`sort=20`)。\n\n```http\nGET /api/channels/site-groups\n```\n\n**响应示例**:\n```json\n{\n \"siteGroups\": [\n {\n \"id\": 123,\n \"name\": \"deepseek-openai\",\n \"sort\": 20,\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ]\n}\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。"}, "05c8a3ab285cd5e8393b95f5f8b380a41c666ff5": {"t": 1785765125.1873202, "n": 8435, "h": "6a5ac9126965fb95", "c": "# API 接口文档\n\n## 概述\n\nuni-load v2.1 提供了一套完整的 RESTful API 接口,基于重构后的服务化架构,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。所有接口都通过依赖注入的业务逻辑服务层处理,确保了更好的可维护性和测试能力。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,由 `SiteConfigurationService` 处理,用于自动配置 AI 站点到 gpt-load 和 uni-api。该接口协调多个服务(GptloadService、ModelsService、YamlManager)来完成完整的站点配置流程。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"]\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"selectedInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"priority\": 1,\n \"healthStatus\": \"healthy\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"healthyInstances\": 2,\n \"activeInstances\": [\"local\", \"us-proxy\"]\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"services\": {\n \"siteConfigurationService\": \"active\",\n \"instanceHealthManager\": \"monitoring\",\n \"instanceConfigManager\": \"loaded\",\n \"gptloadService\": \"connected\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"supportedFormats\": [\"openai\"],\n \"lastHealthCheck\": \"2024-12-20T10:30:00.000Z\",\n \"siteGroups\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"supportedFormats\": [\"anthropic\"],\n \"lastHealthCheck\": \"2024-12-20T10:29:45.000Z\",\n \"siteGroups\": [\"anthropic\"]\n }\n ],\n \"healthSummary\": {\n \"totalInstances\": 2,\n \"healthyInstances\": 2,\n \"failedInstances\": 0\n }\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n```http\nGET /api/channels/site-groups\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n由 `InstanceHealthManager` 服务处理,并发检查所有配置的 gpt-load 实例。\n\n```http\nPOST /api/check-instances\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"healthResults\": {\n \"local\": {\n \"status\": \"healthy\",\n \"responseTime\": 25,\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n },\n \"us-proxy\": {\n \"status\": \"unhealthy\",\n \"error\": \"Connection timeout\",\n \"lastCheck\": \"2024-12-20T10:30:00.000Z\"\n }\n },\n \"summary\": {\n \"total\": 2,\n \"healthy\": 1,\n \"unhealthy\": 1\n }\n}\n```\n\n#### 7.2 重新分配站点到实例\n\n通过 `MultiGptloadManager` 重新分配站点分组到特定实例。\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 架构说明\n\n### 服务化架构 (v2.1)\n\n本版本的API接口基于重构后的服务化架构实现:\n\n- **表现层** (`server.ts`): 处理HTTP路由,将请求委托给业务服务\n- **业务逻辑层**: `SiteConfigurationService` 等服务编排具体的业务流程\n- **基础服务层**: `GptloadService`, `ModelsService`, `YamlManager` 等提供原子化功能\n- **依赖注入**: 通过 `service-factory.ts` 管理服务间的依赖关系\n\n这种架构确保了API的高可维护性、可测试性和扩展性。\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。"}, "e641c5b5a41798dfa6725dfe95af859eac18c7c6": {"t": 1785765126.7764494, "n": 6814, "h": "970a714cfce5e80a", "c": "# API 接口文档\n\n## 概述\n\nuni-load 提供了一套完整的 RESTful API 接口,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,用于自动配置 AI 站点到 gpt-load 和 uni-api。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"]\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"channelTypes\": [\"openai\"],\n \"groupsCreated\": 1,\n \"modelsCount\": 5,\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"],\n \"siteGroups\": [\n {\n \"name\": \"deepseek-openai\",\n \"id\": \"123\",\n \"upstreams\": [{\"url\": \"https://api.deepseek.com/v1\", \"weight\": 1}],\n \"_instance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n ],\n \"modelGroups\": 5,\n \"usingManualModels\": false,\n \"successfulInstance\": {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\"\n }\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"activeInstance\": \"local\"\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"sites\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"sites\": [\"anthropic\"]\n }\n ]\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n```http\nGET /api/channels/site-groups\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n```http\nPOST /api/check-instances\n```\n\n#### 7.2 重新分配站点到实例\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。"}, "3e370de9ec860bc025e2e77696dc965669b659df": {"t": 1785765128.470955, "n": 6576, "h": "0c04bcaeaf2e2d7e", "c": "# API 接口文档\n\n## 概述\n\nuni-load 提供了一套完整的 RESTful API 接口,用于管理 AI 站点配置、监控服务状态、控制自动化任务等。\n\n## 基础信息\n\n- **基础 URL**: `http://localhost:3002`\n- **Content-Type**: `application/json`\n- **认证**: 目前无需认证(内部服务)\n\n## API 接口分类\n\n### 1. 核心配置接口\n\n#### 1.1 预览站点名称\n\n预览基于 URL 自动生成的站点名称。\n\n```http\nPOST /api/preview-site-name\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"siteName\": \"deepseek\"\n}\n```\n\n#### 1.2 处理 AI 站点配置\n\n核心接口,用于自动配置 AI 站点到 gpt-load 和 uni-api。\n\n```http\nPOST /api/process-ai-site\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\", \"sk-yyy\"],\n \"channelTypes\": [\"openai\"],\n \"customValidationEndpoints\": {\n \"health\": \"/health\"\n },\n \"models\": [\"deepseek-chat\", \"deepseek-coder\"]\n}\n```\n\n**请求参数**:\n- `baseUrl` (必需): AI 站点的基础 URL\n- `apiKeys` (可选): API 密钥数组,用于负载均衡\n- `channelTypes` (可选): 支持的 API 格式类型,默认 `[\"openai\"]`\n- `customValidationEndpoints` (可选): 自定义验证端点\n- `models` (可选): 手动指定模型列表\n\n**支持的 channelTypes**:\n- `openai`: OpenAI 兼容格式\n- `anthropic`: Anthropic Claude 格式\n- `gemini`: Google Gemini 格式\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"成功配置AI站点 deepseek\",\n \"data\": {\n \"siteName\": \"deepseek\",\n \"modelsFound\": 5,\n \"siteGroups\": [\n {\n \"name\": \"deepseek\",\n \"type\": \"openai\",\n \"upstreams\": [\"https://api.deepseek.com/v1\"]\n }\n ],\n \"modelGroups\": [\n {\n \"name\": \"deepseek-chat\",\n \"upstreams\": [\"http://localhost:3001/proxy/deepseek-chat\"]\n }\n ]\n }\n}\n```\n\n#### 1.3 API 探测\n\n测试 API 的可用性和兼容性。\n\n```http\nPOST /api/probe-api\nContent-Type: application/json\n\n{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKey\": \"sk-xxx\"\n}\n```\n\n### 2. 状态监控接口\n\n#### 2.1 健康检查\n\n简单的健康检查端点。\n\n```http\nGET /api/health\n```\n\n**响应示例**:\n```json\n{\n \"status\": \"ok\",\n \"timestamp\": \"2024-12-20T10:30:00.000Z\"\n}\n```\n\n#### 2.2 服务状态\n\n获取详细的服务状态信息。\n\n```http\nGET /api/status\n```\n\n**响应示例**:\n```json\n{\n \"gptload\": {\n \"status\": \"connected\",\n \"instancesCount\": 3,\n \"activeInstance\": \"local\"\n },\n \"uniApi\": {\n \"status\": \"available\",\n \"configPath\": \"../uni-api/api.yaml\"\n },\n \"modelSync\": {\n \"status\": \"running\",\n \"lastSync\": \"2024-12-20T10:25:00.000Z\",\n \"nextSync\": \"2024-12-20T11:25:00.000Z\"\n },\n \"channelHealth\": {\n \"status\": \"monitoring\",\n \"totalChannels\": 15,\n \"healthyChannels\": 12,\n \"failedChannels\": 3\n }\n}\n```\n\n#### 2.3 多实例状态\n\n查看所有 gpt-load 实例的状态。\n\n```http\nGET /api/multi-instances\n```\n\n**响应示例**:\n```json\n{\n \"instances\": [\n {\n \"id\": \"local\",\n \"name\": \"本地 gpt-load\",\n \"url\": \"http://localhost:3001\",\n \"status\": \"healthy\",\n \"priority\": 1,\n \"sites\": [\"deepseek\", \"openai\"]\n },\n {\n \"id\": \"us-proxy\",\n \"name\": \"美国代理 gpt-load\",\n \"url\": \"https://us.gpt-load.example.com\",\n \"status\": \"healthy\",\n \"priority\": 2,\n \"sites\": [\"anthropic\"]\n }\n ]\n}\n```\n\n### 3. 模型同步接口\n\n#### 3.1 手动触发模型同步\n\n```http\nPOST /api/sync-models\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步任务已启动\"\n}\n```\n\n#### 3.2 模型同步控制\n\n控制自动模型同步服务。\n\n```http\nPOST /api/sync-models/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\" | \"restart\"\n}\n```\n\n**响应示例**:\n```json\n{\n \"success\": true,\n \"message\": \"模型同步服务已启动\",\n \"status\": \"running\"\n}\n```\n\n### 4. 渠道管理接口\n\n#### 4.1 获取站点分组\n\n```http\nGET /api/channels/site-groups\n```\n\n#### 4.2 手动渠道健康检查\n\n```http\nPOST /api/check-channels\n```\n\n#### 4.3 渠道健康检查控制\n\n```http\nPOST /api/check-channels/control\nContent-Type: application/json\n\n{\n \"action\": \"start\" | \"stop\" | \"restart\"\n}\n```\n\n#### 4.4 获取失败的渠道\n\n```http\nGET /api/failed-channels\n```\n\n**响应示例**:\n```json\n{\n \"failedChannels\": [\n {\n \"name\": \"deepseek-chat\",\n \"failures\": 3,\n \"lastFailure\": \"2024-12-20T10:25:00.000Z\",\n \"error\": \"Connection timeout\"\n }\n ]\n}\n```\n\n#### 4.5 重置渠道失败次数\n\n```http\nPOST /api/reset-channel-failures\nContent-Type: application/json\n\n{\n \"channelName\": \"deepseek-chat\"\n}\n```\n\n#### 4.6 删除渠道\n\n```http\nDELETE /api/channels/{channelName}\n```\n\n### 5. 渠道清理接口\n\n#### 5.1 预览清理结果\n\n```http\nPOST /api/cleanup-channels/preview\nContent-Type: application/json\n\n{\n \"dryRun\": true,\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.2 执行渠道清理\n\n```http\nPOST /api/cleanup-channels\nContent-Type: application/json\n\n{\n \"maxFailures\": 5,\n \"olderThanDays\": 7\n}\n```\n\n#### 5.3 手动清理指定渠道\n\n```http\nPOST /api/cleanup-channels/manual\nContent-Type: application/json\n\n{\n \"channelNames\": [\"channel1\", \"channel2\"],\n \"dryRun\": false\n}\n```\n\n#### 5.4 获取清理历史\n\n```http\nGET /api/cleanup-history\n```\n\n### 6. 架构管理接口\n\n#### 6.1 初始化三层架构\n\n```http\nPOST /api/initialize-architecture\n```\n\n#### 6.2 获取架构状态\n\n```http\nGET /api/architecture-status\n```\n\n#### 6.3 手动恢复模型-渠道关系\n\n```http\nPOST /api/manual-recovery/{model}/{channel}\n```\n\n#### 6.4 获取架构统计信息\n\n```http\nGET /api/architecture-stats\n```\n\n### 7. 实例管理接口\n\n#### 7.1 检查所有实例健康状态\n\n```http\nPOST /api/check-instances\n```\n\n#### 7.2 重新分配站点到实例\n\n```http\nPOST /api/reassign-site\nContent-Type: application/json\n\n{\n \"siteUrl\": \"https://api.deepseek.com\",\n \"instanceId\": \"us-proxy\"\n}\n```\n\n### 8. 维护接口\n\n#### 8.1 删除所有模型分组\n\n高危操作,用于维护和重置。\n\n```http\nPOST /api/maintenance/delete-model-groups\n```\n\n### 9. 临时分组管理\n\n#### 9.1 获取临时分组统计\n\n```http\nGET /api/temp-groups/stats\n```\n\n#### 9.2 清理所有临时分组\n\n```http\nPOST /api/temp-groups/cleanup\n```\n\n#### 9.3 清理过期临时分组\n\n```http\nPOST /api/temp-groups/cleanup-old\nContent-Type: application/json\n\n{\n \"hoursOld\": 24\n}\n```\n\n## 错误响应格式\n\n所有 API 在出错时都会返回统一的错误格式:\n\n```json\n{\n \"error\": \"错误描述信息\",\n \"details\": \"详细错误信息(可选)\",\n \"code\": \"错误代码(可选)\"\n}\n```\n\n## HTTP 状态码\n\n- `200`: 操作成功\n- `400`: 请求参数错误\n- `404`: 资源不存在\n- `500`: 服务器内部错误\n\n## 认证和授权\n\n当前版本暂未实现认证机制,所有接口都是开放的。建议在生产环境中:\n\n1. 配置反向代理进行访问控制\n2. 使用 VPN 或内网隔离\n3. 配置防火墙规则\n\n## 使用示例\n\n### 完整配置流程\n\n```bash\n# 1. 预览站点名称\ncurl -X POST http://localhost:3002/api/preview-site-name \\\n -H \"Content-Type: application/json\" \\\n -d '{\"baseUrl\": \"https://api.deepseek.com/v1\"}'\n\n# 2. 配置 AI 站点\ncurl -X POST http://localhost:3002/api/process-ai-site \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"apiKeys\": [\"sk-xxx\"],\n \"channelTypes\": [\"openai\"]\n }'\n\n# 3. 检查状态\ncurl http://localhost:3002/api/status\n```\n\n### 监控和维护\n\n```bash\n# 健康检查\ncurl http://localhost:3002/api/health\n\n# 获取失败的渠道\ncurl http://localhost:3002/api/failed-channels\n\n# 手动同步模型\ncurl -X POST http://localhost:3002/api/sync-models\n\n# 预览渠道清理\ncurl -X POST http://localhost:3002/api/cleanup-channels/preview \\\n -H \"Content-Type: application/json\" \\\n -d '{\"dryRun\": true}'\n```\n\n## WebSocket 接口\n\n目前暂未实现 WebSocket 接口,所有通信都基于 HTTP REST API。未来版本可能会添加实时状态推送功能。"}}}} |