# 故障排除指南
**🌍 Language / 语言** [🇺🇸 English](./Troubleshooting.en.md) | [🇨🇳 中文](./Troubleshooting.md)
本指南涵盖了使用 AI Proxy Worker 时可能遇到的常见问题及其解决方案。如果你遇到的问题不在此列表中,请在 [📋 Issues](../../issues) 中提交新的问题报告。 ## 🚨 常见错误及解决方案 ### 1. 认证相关错误 #### ❌ 401 Unauthorized **错误信息:** ```json { "error": "unauthorized", "details": "Invalid or missing authorization", "timestamp": "2025-01-01T12:00:00.000Z" } ``` **可能原因:** - `PROXY_KEY` 未设置或设置错误 - 请求头中缺少 `Authorization` 字段 - `Authorization` 格式不正确 **解决方案:** 1. **检查环境变量设置:** ```bash # 查看已设置的密钥(不显示值) wrangler secret list # 重新设置 PROXY_KEY wrangler secret put PROXY_KEY ``` 2. **检查请求格式:** ```bash # 正确格式 curl -H "Authorization: Bearer YOUR_PROXY_KEY" \ https://your-worker.workers.dev/chat # 错误格式(缺少 Bearer) curl -H "Authorization: YOUR_PROXY_KEY" \ https://your-worker.workers.dev/chat ``` 3. **验证密钥是否正确:** ```javascript // 确保密钥前后没有空格 const proxyKey = "YOUR_PROXY_KEY".trim(); ``` #### ❌ Configuration Error **错误信息:** ```json { "error": "configuration_error", "details": "Service configuration error", "timestamp": "2025-01-01T12:00:00.000Z" } ``` **可能原因:** - `DEEPSEEK_API_KEY` 未设置 - DeepSeek API 密钥无效或已过期 **解决方案:** 1. **重新设置 DeepSeek API 密钥:** ```bash wrangler secret put DEEPSEEK_API_KEY ``` 2. **验证 DeepSeek 密钥有效性:** ```bash curl -X POST https://api.deepseek.com/chat/completions \ -H "Authorization: Bearer YOUR_DEEPSEEK_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-chat","messages":[{"role":"user","content":"test"}]}' ``` 3. **检查 DeepSeek 账户状态:** - 登录 [DeepSeek 平台](https://platform.deepseek.com/) - 检查账户余额 - 确认 API 密钥状态 ### 2. 请求格式错误 #### ❌ 400 Bad Request - Invalid JSON **错误信息:** ```json { "error": "invalid_request", "details": "Invalid JSON format", "timestamp": "2025-01-01T12:00:00.000Z" } ``` **解决方案:** 1. **验证 JSON 格式:** ```bash # 使用在线 JSON 验证器或 echo '{"model":"deepseek-chat","messages":[]}' | python -m json.tool ``` 2. **检查特殊字符:** ```javascript // 正确转义特殊字符 const message = "He said: \"Hello, world!\""; const payload = JSON.stringify({ model: "deepseek-chat", messages: [{ role: "user", content: message }] }); ``` #### ❌ 400 Bad Request - Missing Required Fields **错误信息:** ```json { "error": "invalid_request", "details": "Invalid request format. Missing or invalid messages array", "timestamp": "2025-01-01T12:00:00.000Z" } ``` **解决方案:** 确保请求包含必需字段: ```json { "model": "deepseek-chat", // 必需 "messages": [ // 必需,且必须是数组 { "role": "user", // 必需:user/assistant/system "content": "Hello" // 必需:消息内容 } ] } ``` #### ❌ 413 Payload Too Large **错误信息:** ```json { "error": "payload_too_large", "details": "Request body too large. Maximum size: 1048576 bytes", "timestamp": "2025-01-01T12:00:00.000Z" } ``` **解决方案:** 1. **减少请求内容:** - 缩短对话历史 - 减少单条消息长度 - 移除不必要的参数 2. **分批处理长文本:** ```javascript function splitLongText(text, maxLength = 8000) { const chunks = []; for (let i = 0; i < text.length; i += maxLength) { chunks.push(text.slice(i, i + maxLength)); } return chunks; } ``` 3. **调整配置(如果有权限):** ```javascript // 在 worker.js 中调整 const CONFIG = { MAX_BODY_SIZE: 2 * 1024 * 1024, // 增加到 2MB }; ``` ### 3. 网络和超时错误 #### ❌ 504 Gateway Timeout **错误信息:** ```json { "error": "timeout", "details": "Request to DeepSeek API timed out", "timestamp": "2025-01-01T12:00:00.000Z" } ``` **解决方案:** 1. **重试请求:** ```javascript async function retryRequest(requestFn, maxRetries = 3) { for (let i = 0; i < maxRetries; i++) { try { return await requestFn(); } catch (error) { if (i === maxRetries - 1) throw error; await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1))); } } } ``` 2. **减少请求复杂度:** - 降低 `max_tokens` 参数 - 简化提示内容 - 使用更简单的模型 3. **检查网络连接:** ```bash # 测试到 DeepSeek API 的连接 curl -I https://api.deepseek.com/ # 测试到 Worker 的连接 curl -I https://your-worker.workers.dev/ ``` #### ❌ 502 Bad Gateway **错误信息:** ```json { "error": "upstream_error", "details": "Failed to connect to DeepSeek API", "timestamp": "2025-01-01T12:00:00.000Z" } ``` **解决方案:** 1. **检查 DeepSeek API 状态:** - 访问 [DeepSeek 状态页面](https://status.deepseek.com/)(如果有) - 在社交媒体查看服务状态更新 2. **验证 API 密钥:** ```bash curl -X POST https://api.deepseek.com/chat/completions \ -H "Authorization: Bearer YOUR_DEEPSEEK_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-chat","messages":[{"role":"user","content":"test"}]}' ``` 3. **等待并重试:** - 等待几分钟后重试 - 如果持续出现,可能是 DeepSeek API 临时故障 ### 4. 部署相关问题 #### ❌ Wrangler 登录失败 **错误信息:** ``` Error: Failed to login. Please try again. ``` **解决方案:** 1. **清除登录状态并重新登录:** ```bash wrangler logout wrangler login ``` 2. **手动登录(如果浏览器无法打开):** ```bash wrangler login --browser=false # 复制显示的 URL 到浏览器中打开 ``` 3. **检查网络代理:** ```bash # 如果使用代理 export https_proxy=http://proxy.example.com:8080 wrangler login ``` #### ❌ 部署失败 **错误信息:** ``` Error: Failed to publish your Worker ``` **解决方案:** 1. **检查 wrangler.toml 配置:** ```toml name = "ai-proxy-worker" # 确保名称有效 main = "worker.js" # 确保文件存在 compatibility_date = "2025-01-01" # 使用有效日期 ``` 2. **验证代码语法:** ```bash # 检查 JavaScript 语法 node -c worker.js ``` 3. **检查账户限制:** - 免费账户有 Worker 数量限制 - 检查 Cloudflare Dashboard 中的配额使用情况 #### ❌ Worker 无法访问 **现象:** - 部署成功但访问 Worker URL 时出现错误 - 返回 Cloudflare 默认错误页面 **解决方案:** 1. **检查 Worker 状态:** ```bash wrangler deployments list ``` 2. **查看实时日志:** ```bash wrangler tail # 然后在另一个终端测试请求 ``` 3. **验证路由配置:** ```bash # 检查健康检查端点 curl https://your-worker.workers.dev/ ``` ### 5. 流式响应问题 #### ❌ 流式响应中断 **现象:** - 流式响应突然停止 - 收到不完整的响应 **解决方案:** 1. **检查客户端超时设置:** ```javascript const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 60000); // 60秒超时 fetch(url, { signal: controller.signal, // ...其他选项 }); ``` 2. **实现重连机制:** ```javascript async function streamWithRetry(url, options, maxRetries = 3) { for (let attempt = 0; attempt < maxRetries; attempt++) { try { const response = await fetch(url, options); // 处理流式响应 return response; } catch (error) { if (attempt === maxRetries - 1) throw error; await new Promise(resolve => setTimeout(resolve, 1000)); } } } ``` 3. **验证 SSE 格式:** ```javascript // 确保正确解析 SSE 数据 const lines = chunk.split('\n'); for (const line of lines) { if (line.startsWith('data: ')) { const data = line.slice(6); if (data === '[DONE]') break; // 处理数据 } } ``` ## 🔍 调试工具和技巧 ### 1. 查看 Worker 日志 **实时日志:** ```bash # 查看实时日志 wrangler tail # 过滤特定级别的日志 wrangler tail --format=pretty ``` **Cloudflare Dashboard 日志:** 1. 登录 Cloudflare Dashboard 2. 进入 Workers & Pages 3. 选择你的 Worker 4. 点击 "Logs" 标签页 ### 2. 本地调试 **本地开发服务器:** ```bash # 启动本地开发环境 wrangler dev # 指定端口 wrangler dev --port 8787 ``` **添加调试日志:** ```javascript // 在 worker.js 中添加调试信息 console.log('Request received:', { method: request.method, url: request.url, headers: Object.fromEntries(request.headers) }); ``` ### 3. 健康检查脚本 创建一个简单的健康检查脚本: ```bash #!/bin/bash # health-check.sh WORKER_URL="https://your-worker.workers.dev" PROXY_KEY="YOUR_PROXY_KEY" echo "🔍 健康检查开始..." # 1. 基础健康检查 echo "1. 检查服务状态..." curl -s "$WORKER_URL/" | jq . # 2. 认证测试 echo "2. 测试认证..." curl -s -X POST "$WORKER_URL/chat" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-chat","messages":[]}' | jq . # 3. API 调用测试 echo "3. 测试 API 调用..." curl -s -X POST "$WORKER_URL/chat" \ -H "Authorization: Bearer $PROXY_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-chat", "messages": [{"role": "user", "content": "test"}] }' | jq . echo "✅ 健康检查完成" ``` ### 4. 性能监控 **响应时间测试:** ```bash # 创建性能测试脚本 curl -w "@curl-format.txt" -s -o /dev/null \ -X POST https://your-worker.workers.dev/chat \ -H "Authorization: Bearer YOUR_PROXY_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-chat","messages":[{"role":"user","content":"test"}]}' ``` **curl-format.txt 文件内容:** ``` time_namelookup: %{time_namelookup}s\n time_connect: %{time_connect}s\n time_appconnect: %{time_appconnect}s\n time_pretransfer: %{time_pretransfer}s\n time_redirect: %{time_redirect}s\n time_starttransfer: %{time_starttransfer}s\n ----------\n time_total: %{time_total}s\n ``` ## 📊 监控和告警 ### 1. Cloudflare Analytics 在 Cloudflare Dashboard 中查看: - 请求数量和响应时间 - 错误率统计 - 流量分布 ### 2. 自定义监控 ```javascript // 在 worker.js 中添加监控指标 const startTime = Date.now(); // 处理请求... const duration = Date.now() - startTime; console.log(`Request completed in ${duration}ms`, { method: request.method, status: response.status, duration, timestamp: new Date().toISOString() }); ``` ### 3. 外部监控服务 可以使用以下服务监控 Worker: - Uptime Robot - Pingdom - StatusCake - UptimeRobot 监控配置示例: ``` URL: https://your-worker.workers.dev/ Method: GET Expected Response: {"status":"ok"} Check Interval: 5 minutes ``` ## 🆘 获取帮助 如果上述解决方案都无法解决你的问题: ### 1. 搜索现有问题 - 查看 [📋 Issues](../../issues) - 搜索 [💡 Discussions](../../discussions) - 查看 [Cloudflare Community](https://community.cloudflare.com/) ### 2. 提交新问题 在 GitHub Issues 中提交问题时,请包含: **基本信息:** - 操作系统和版本 - Node.js 和 Wrangler 版本 - 错误的完整信息 **重现步骤:** - 详细的操作步骤 - 使用的命令或代码 - 期望的结果 vs 实际结果 **日志信息:** ```bash # 获取详细日志 wrangler tail --format=pretty > logs.txt ``` **示例请求:** ```bash # 提供失败的 curl 命令示例 curl -v -X POST https://your-worker.workers.dev/chat \ -H "Authorization: Bearer ***" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-chat","messages":[...]}' ``` ### 3. 社区资源 - [Cloudflare Workers 文档](https://developers.cloudflare.com/workers/) - [DeepSeek API 文档](https://platform.deepseek.com/api-docs) - [💡 Discussions](../../discussions) - 社区讨论 - [Discord/Telegram 群组](如果有) --- **问题解决了?** 👉 [查看更多示例](./Examples.md) | [📋 Issues](../../issues)