Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/benedictking_uni-load.json
T

1 line
158 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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。未来版本可能会添加实时状态推送功能。"}}}}