# Claude API Router 智能的Claude API路由器,提供自动故障转移和负载均衡功能。当主要API服务遇到限制或错误时,自动切换到备用提供商。 ## 🚀 功能特性 - **自动故障转移**: 检测到速率限制或错误时自动切换API提供商 - **多提供商支持**: 支持Claude Pro、DeepSeek、Kimi - **手动切换**: 支持手动强制切换到指定提供商 - **健康检查**: 自动监控和恢复主要提供商 - **完全兼容**: 与Anthropic Claude API完全兼容 - **流式响应**: 支持流式和非流式响应 ## 📋 支持的提供商 按优先级排序: 1. **Claude Pro** - 最高优先级,首选提供商 2. **DeepSeek** - OpenAI兼容的备用提供商 3. **Kimi** - OpenAI兼容的备用提供商 ## 🛠️ 安装和配置 ### 1. 环境要求 ```bash cd router pip install -r requirements.txt ``` ### 2. 配置API密钥 在 `/home/will/docker/tokens.txt` 文件中添加以下令牌: ```txt claude_api_key=your_claude_api_key_here deepseek_api_key=your_deepseek_api_key_here kimi_api_key=your_kimi_api_key_here ``` 或者设置环境变量: ```bash export CLAUDE_API_KEY="your_claude_api_key" export DEEPSEEK_API_KEY="your_deepseek_api_key" export KIMI_API_KEY="your_kimi_api_key" ``` ### 3. 启动服务 ```bash # 开发模式 python app.py # 生产模式 (使用Docker Compose) docker-compose up -d ``` 服务将在 `http://localhost:8000` 启动。 ## 🔧 手动切换提供商 ### API端点 ```http POST /v1/switch-provider Content-Type: application/json { "provider": "provider_name" } ``` ### 可用的提供商名称 - `claude_pro` - Claude Pro提供商 (默认) - `deepseek` - DeepSeek提供商 - `kimi` - Kimi提供商 ### 使用示例 #### curl命令 ```bash # 切换到DeepSeek curl -X POST http://localhost:8000/v1/switch-provider \ -H "Content-Type: application/json" \ -d '{"provider": "deepseek"}' # 切换到Kimi curl -X POST http://localhost:8000/v1/switch-provider \ -H "Content-Type: application/json" \ -d '{"provider": "kimi"}' # 切换回Claude Pro curl -X POST http://localhost:8000/v1/switch-provider \ -H "Content-Type: application/json" \ -d '{"provider": "claude_pro"}' ``` #### Python脚本 ```python import requests def switch_provider(provider_name): """切换API提供商""" url = "http://localhost:8000/v1/switch-provider" data = {"provider": provider_name} response = requests.post(url, json=data) if response.status_code == 200: result = response.json() print(f"成功切换到: {result['current_provider']}") return True else: print(f"切换失败: {response.text}") return False # 使用示例 switch_provider("deepseek") switch_provider("kimi") switch_provider("claude_pro") ``` ### 查看当前状态 ```bash # 查看当前使用的提供商 curl http://localhost:8000/v1/health # 响应示例 { "status": "healthy", "current_provider": "claude_pro", "providers": { "claude_pro": "available", "deepseek": "unknown", "kimi": "unknown" } } ``` ## 🔄 自动故障转移 路由器会自动检测以下错误并进行故障转移: - 速率限制 (Rate limit exceeded) - 使用配额超额 (Usage limit exceeded) - HTTP 429错误 - 每日/月度限制达到 - 网络连接错误 ### 故障转移流程 1. 检测到故障转移触发条件 2. 自动切换到下一个优先级提供商 3. 重试请求 4. 记录切换日志 5. 定期尝试恢复到主要提供商 ## 🩺 健康检查和自动恢复 - **自动检查频率**: 每小时的前5分钟 - **检查内容**: 向Claude Pro发送测试请求 - **自动恢复**: 如果Claude Pro恢复可用,自动切换回去 ## 🔌 API兼容性 路由器完全兼容Anthropic Claude API,支持: - 所有Claude模型 (claude-3-sonnet, claude-3-opus等) - 流式和非流式响应 - 系统消息和用户消息 - 所有API参数 (max_tokens, temperature等) ### 使用示例 ```python import requests # 标准Claude API调用 url = "http://localhost:8000/v1/messages" headers = { "Content-Type": "application/json", "x-api-key": "your_claude_api_key" } data = { "model": "claude-3-sonnet-20240229", "max_tokens": 1000, "messages": [ {"role": "user", "content": "Hello, Claude!"} ] } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` ## 🐛 故障排除 ### 常见问题 #### 1. 自动切换不工作 **问题**: 遇到限制时不自动切换 **解决方案**: ```bash # 手动切换到备用提供商 curl -X POST http://localhost:8000/v1/switch-provider \ -H "Content-Type: application/json" \ -d '{"provider": "deepseek"}' ``` #### 2. API密钥错误 **问题**: 提示API密钥无效 **解决方案**: 1. 检查 `tokens.txt` 文件中的密钥格式 2. 确保密钥没有多余的空格或换行 3. 验证密钥是否有效 #### 3. 服务无法启动 **问题**: 路由器启动失败 **解决方案**: ```bash # 检查日志 docker-compose logs router # 手动启动调试 cd router python app.py ``` ### 调试模式 启用详细日志: ```python import logging logging.basicConfig(level=logging.DEBUG) ``` ## 📊 监控和日志 ### 日志级别 - `INFO`: 正常操作日志 - `WARNING`: 提供商切换警告 - `ERROR`: 错误和故障转移事件 ### 关键日志信息 - 提供商切换事件 - API请求失败 - 健康检查结果 - 自动恢复操作 ## ⚙️ 高级配置 ### 自定义故障转移条件 编辑 `app.py` 中的 `should_failover` 方法: ```python def should_failover(self, error_message: str) -> bool: # 添加自定义错误检测条件 custom_indicators = [ "your_custom_error", "specific_provider_error" ] return any(indicator in error_message.lower() for indicator in custom_indicators) ``` ### 调整健康检查频率 修改 `app.py` 中的定时任务: ```python # 每30分钟检查一次 @scheduler.cron("*/30 * * * *") async def health_check_claude_pro(): # ... 健康检查逻辑 ``` ## 🤝 SillyTavern集成 在SillyTavern中使用此路由器: 1. **API URL**: `http://localhost:8000/v1/messages` 2. **API Key**: 使用你的Claude API密钥 3. **模型**: 选择任何Claude模型 路由器会自动处理故障转移,对SillyTavern完全透明。 ## 📄 许可证 MIT License ## 🆘 获取帮助 如果遇到问题: 1. 检查日志文件 2. 验证API密钥配置 3. 尝试手动切换提供商 4. 查看健康检查状态 需要进一步帮助请查看代码注释或联系开发者。