MonkeyCode 错误处理哲学:让AI编程工具的每一层都有容错能力
MonkeyCode 错误处理哲学让AI编程工具的每一层都有容错能力在AI编程工具中错误处理不只是try-catch那么简单。AI模型可能返回错误的内容、容器可能崩溃、网络可能断开、用户可能做出不可预期的操作。每一层都需要独立的容错能力。MonkeyCode 的错误处理哲学可以总结为一句话任何单点失败都不应该影响用户的工作。错误分层模型MonkeyCode 将错误分为四个层次每层有独立的处理策略Layer 4: 用户界面层 — 优雅降级不显示错误堆栈\nLayer 3: AI模型层 — 自动重试、模型降级、缓存回退\nLayer 2: 容器层 — 自动重启、快照恢复、环境重建\nLayer 1: 网络层 — 断线重连、请求队列、离线缓存Layer 1网络层错误处理网络是AI编程工具最脆弱的环节。MonkeyCode 的网络容错方案WebSocket断线重连class ResilientWebSocket {\n private reconnectAttempts 0;\n private maxReconnectAttempts 10;\n private reconnectDelay 1000; // 初始1秒\n \n onDisconnect() {\n if (this.reconnectAttempts this.maxReconnectAttempts) {\n this.notifyUser(连接断开请刷新页面);\n return;\n }\n \n const delay this.reconnectDelay * Math.pow(2, this.reconnectAttempts);\n setTimeout(() {\n this.reconnectAttempts;\n this.connect();\n }, Math.min(delay, 30000)); // 最大30秒\n }\n \n onReconnect() {\n this.reconnectAttempts 0;\n this.syncPendingMessages(); // 重发待处理消息\n }\n}请求队列网络断开时的操作不会丢失而是进入队列等待恢复class RequestQueue {\n private queue: QueuedRequest[] [];\n \n async add(request: APIRequest): PromiseAPIResponse {\n if (!navigator.onLine) {\n // 离线时存入队列\n return new Promise((resolve) {\n this.queue.push({ request, resolve });\n });\n }\n return this.execute(request);\n }\n \n onOnline() {\n // 网络恢复时逐个执行\n while (this.queue.length 0) {\n const item this.queue.shift();\n item.resolve(await this.execute(item.request));\n }\n }\n}Layer 2容器层错误处理健康检查每个容器有定期的健康检查// 每30秒检查一次\nhealthCheck:\n test: [CMD, curl, -f, http://localhost:8080/health]\n interval: 30s\n timeout: 10s\n retries: 3\n startPeriod: 60s自动恢复策略故障类型检测方式恢复策略用户感知容器崩溃健康检查失败自动重启最多3次短暂中断10秒内存溢出OOM Killer增加内存配额重启短暂中断磁盘满磁盘使用率监控清理缓存通知用户通知容器无法恢复重启3次仍失败从快照创建新容器需要重新加载约30秒Layer 3AI模型层错误处理AI模型的错误更复杂——它可能返回看起来对但实际错的内容。API调用失败class ModelCaller {\n async callWithFallback(\n prompt: string, \n preferredModel: string\n ): Promisestring {\n const models this.getModelChain(preferredModel);\n // 例: [claude-3.5, gpt-4o, deepseek-v3, qwen-max]\n \n for (const model of models) {\n try {\n const result await this.callWithRetry(model, prompt, {\n maxRetries: 2,\n timeout: 30000,\n });\n if (this.validateResponse(result)) {\n return result;\n }\n } catch (error) {\n this.logModelError(model, error);\n continue; // 尝试下一个模型\n }\n }\n \n throw new Error(所有模型均不可用请稍后重试);\n }\n}输出验证AI生成的代码需要经过验证才应用function validateGeneratedCode(code: string, language: string): ValidationResult {\n const checks [\n () checkSyntax(code, language), // 语法检查\n () checkForDangerousOps(code), // 危险操作检查\n () checkForCommonBugs(code), // 常见Bug检查\n () checkCodeLength(code), // 代码长度检查\n ];\n \n const errors checks\n .map(check check())\n .filter(r !r.passed);\n \n return {\n valid: errors.length 0,\n errors,\n warning: code.length 500 ? 生成代码较长建议分段审查 : null\n };\n}Layer 4UI层错误处理用户永远不应该看到原始的错误堆栈。错误消息映射const errorMessages {\n MODEL_UNAVAILABLE: {\n title: AI暂时不可用,\n message: 我们正在尝试其他AI模型请稍候...,\n action: null // 自动处理\n },\n WORKSPACE_CRASHED: {\n title: 工作环境需要重启,\n message: 你的开发环境遇到了问题正在自动恢复...,\n action: REFRESH \n },\n NETWORK_ERROR: {\n title: 网络连接不稳定,\n message: 你的操作已保存网络恢复后会自动继续。,\n action: null\n },\n SAVE_FAILED: {\n title: 保存失败,\n message: 文件保存到服务器失败但本地暂存了一份。,\n action: RETRY_SAVE\n }\n};自动保存机制防止用户丢失工作内容// 每30秒自动保存到本地\nsetInterval(() {\n const content editor.getContent();\n localStorage.setItem(autosave_${filePath}, JSON.stringify({\n content,\n timestamp: Date.now()\n }));\n}, 30000);\n\n// 页面加载时检查自动保存\nfunction checkAutoSave(filePath: string) {\n const saved localStorage.getItem(autosave_${filePath});\n if (saved) {\n const { content, timestamp } JSON.parse(saved);\n if (Date.now() - timestamp 3600000) { // 1小时内\n showRecoveryPrompt(filePath, content, timestamp);\n }\n }\n}错误监控与学习所有错误都记录到监控系统用于持续改进错误频率— 哪些错误最常发生错误关联— 一个错误是否引发连锁反应恢复时间— 从错误发生到用户恢复正常的时间用户行为— 错误发生后用户做了什么放弃重试刷新总结错误处理不是事后的补救措施而是系统设计的基础。MonkeyCode 通过四层错误处理模型确保任何单点失败都不会导致用户丢失工作。这种防御性编程的哲学是AI编程工具可靠性的基石。GitHubgithub.com/chaitin/MonkeyCode