Summer Bug Smash: Clear the Lineup 🐛🛹
这是 DEV 的 Summer Bug Smash: Clear the Lineup 活动投稿,由 Sentry 赞助。
项目概览
我最近在生产网站 Mobile One Media 上部署了 Dograh AI 语音代理(命名为 Zoya),用于处理客户关于 4K 视频制作、音频工程和应用开发服务的咨询。
在最初的 48 小时内,代理运行正常。但在第三天,它突然停止响应线上网站。用户在尝试浏览服务菜单时遇到完全挂起的情况。这不是本地测试问题,而是需要立即调试并永久修复的线上生产故障。
错误修复或性能改进
问题:
- 问题:连续运行约 48 小时后,mobileonemedia.com 上的 Dograh AI 小部件开始静默失败,导致无限加载状态和用户会话中断。
- 影响:100% 的新代理交互失败,直接阻止了潜在客户联系我们的媒体制作服务。
- 根本原因:Docker 容器配置问题与系统提示词不匹配。代理的 Docker 环境变量未能正确持久化工作流状态,系统提示词在容器重启后无法正确初始化,导致代理丢失对话上下文。
代码与视频演示
GitHub 拉取请求:https://github.com/dograh-hq/dograh/pull/287
观看线上代理实际运行: https://youtu.be/pKUxtq8sKDs?si=r1s2LK7zGIzpd2Ry
修复摘要:
- 归档了导致 Docker 和提示词问题的旧代理配置。
- 从头开始构建了一个全新的、干净的代理设置,采用正确的架构。
- 使用正确的环境变量持久化和卷挂载重建了 Docker 容器配置。
- 修复了系统提示词初始化顺序,确保其在容器启动时正确加载。
- 添加了健康检查端点,在接受用户连接前监控代理就绪状态。
我的改进
技术方法:
- 诊断:确定 Docker 容器在重启间丢失状态,且系统提示词未正确注入工作流引擎。
- 干净重置决策:意识到旧代理设置过于混乱,无法修补。我正式归档了旧的损坏代理并重新开始。
- 解决方案:创建了一个全新的代理配置,包含正确的 Docker 卷挂载、环境变量处理和修正的系统提示词结构。
- 测试:验证新代理在容器重启后保持状态,并在生产环境中一致响应。
关键决策:
- 没有浪费时间尝试修补旧的、混乱的代理配置,而是归档它并从头构建了一个全新的、干净的代理。这节省了数小时的调试时间,并带来了更稳定的系统。
- 实现 Docker 健康检查,确保代理在上线前完全初始化。
- 添加自动重启策略和正确的状态保留,以防止未来的静默失败。
结果:
- 100% 恢复了 mobileonemedia.com 上的线上代理功能。
- 代理现在在 Docker 容器生命周期事件中正确保持状态。
- 通过适当的健康监控实现零停机部署。
Sentry 的最佳使用
Sentry 是诊断这次静默生产故障的绝对功臣:
- 错误监控与警报:
- Sentry 立即标记了来自线上网站域名的连接错误和超时警告的突然激增。
问题分组显示错误与 Docker 容器重启事件相关。
会话回放:
我观看了 Sentry 中 mobileonemedia.com 实际访客的会话回放。可以看到他们点击“与 Zoya 交谈”按钮、看到加载动画,然后关闭标签页。这一视觉证据确认了前端正在等待一个未正确初始化的后端。
性能监控:
修复后,我设置了 Sentry 仪表板跟踪代理响应时间和连接成功率,以确保新的 Docker 配置在实际环境中完美运行。
Google AI 的最佳使用
为了完成这次 Docker 和系统提示词修复并快速恢复线上网站,我大量依赖 Google Gemini:
- 调试 Docker 配置:
- 我将 Docker 日志和环境变量设置输入 Google Gemini。
- 提示词:“分析这个 Node.js 语音代理的 Docker 配置。容器启动但在重启时丢失状态,系统提示词无法初始化。识别卷挂载和环境变量问题。”
Gemini 识别出了缺失的卷挂载和错误的环境变量持久化策略。
重建系统提示词:
我请 Gemini 帮助为 Dograh AI 代理创建正确的系统提示词结构。
提示词:“为处理多服务咨询(视频制作、音频工程、应用开发)的语音代理创建一个健壮的系统提示词,该提示词需保持对话上下文并正确路由用户。”
生成的提示词清晰、结构良好,构成了新代理配置的基础。
Docker Compose 优化:
Gemini 帮助生成了修正后的 docker-compose.yml,包含正确的健康检查、重启策略和卷配置。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.