Asim Haider

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 容器配置。
  • 修复了系统提示词初始化顺序,确保其在容器启动时正确加载。
  • 添加了健康检查端点,在接受用户连接前监控代理就绪状态。

我的改进

技术方法:

  1. 诊断:确定 Docker 容器在重启间丢失状态,且系统提示词未正确注入工作流引擎。
  2. 干净重置决策:意识到旧代理设置过于混乱,无法修补。我正式归档了旧的损坏代理并重新开始。
  3. 解决方案:创建了一个全新的代理配置,包含正确的 Docker 卷挂载、环境变量处理和修正的系统提示词结构。
  4. 测试:验证新代理在容器重启后保持状态,并在生产环境中一致响应。

关键决策:

  • 没有浪费时间尝试修补旧的、混乱的代理配置,而是归档它并从头构建了一个全新的、干净的代理。这节省了数小时的调试时间,并带来了更稳定的系统。
  • 实现 Docker 健康检查,确保代理在上线前完全初始化。
  • 添加自动重启策略和正确的状态保留,以防止未来的静默失败。

结果:

  • 100% 恢复了 mobileonemedia.com 上的线上代理功能。
  • 代理现在在 Docker 容器生命周期事件中正确保持状态。
  • 通过适当的健康监控实现零停机部署。

Sentry 的最佳使用

Sentry 是诊断这次静默生产故障的绝对功臣:

  1. 错误监控与警报:
  2. Sentry 立即标记了来自线上网站域名的连接错误和超时警告的突然激增。
  3. 问题分组显示错误与 Docker 容器重启事件相关。

  4. 会话回放:

  5. 我观看了 Sentry 中 mobileonemedia.com 实际访客的会话回放。可以看到他们点击“与 Zoya 交谈”按钮、看到加载动画,然后关闭标签页。这一视觉证据确认了前端正在等待一个未正确初始化的后端。

  6. 性能监控:

  7. 修复后,我设置了 Sentry 仪表板跟踪代理响应时间和连接成功率,以确保新的 Docker 配置在实际环境中完美运行。

Google AI 的最佳使用

为了完成这次 Docker 和系统提示词修复并快速恢复线上网站,我大量依赖 Google Gemini:

  1. 调试 Docker 配置:
  2. 我将 Docker 日志和环境变量设置输入 Google Gemini。
  3. 提示词:“分析这个 Node.js 语音代理的 Docker 配置。容器启动但在重启时丢失状态,系统提示词无法初始化。识别卷挂载和环境变量问题。”
  4. Gemini 识别出了缺失的卷挂载和错误的环境变量持久化策略。

  5. 重建系统提示词:

  6. 我请 Gemini 帮助为 Dograh AI 代理创建正确的系统提示词结构。

  7. 提示词:“为处理多服务咨询(视频制作、音频工程、应用开发)的语音代理创建一个健壮的系统提示词,该提示词需保持对话上下文并正确路由用户。”

  8. 生成的提示词清晰、结构良好,构成了新代理配置的基础。

  9. Docker Compose 优化:

  10. Gemini 帮助生成了修正后的 docker-compose.yml,包含正确的健康检查、重启策略和卷配置。