Asim Haider

Summer Bug Smash: Clear the Lineup 🐛🛹

これはDEVのSummer Bug Smash: Clear the Lineup powered by Sentryへの投稿です。

プロジェクト概要

私は最近、Dograh AI音声エージェント(Zoyaという名前)をMobile One Mediaの本番ウェブサイトにデプロイし、4Kビデオ制作、オーディオエンジニアリング、アプリ開発サービスのクライアント問い合わせに対応させました。

最初の48時間はエージェントは完璧に動作していました。しかし、3日目にライブサイトで突然応答しなくなりました。ユーザーはサービスメニューを操作しようとすると完全なハングアップを経験しました。これはローカルテストの問題ではなく、即時のデバッグと恒久的な修正が必要な本番環境の緊急事態でした。

バグ修正またはパフォーマンス改善

問題:

  • 問題:約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ヘルスチェックを実装しました。
  • 将来のサイレント障害を防ぐために適切な状態保持を備えた自動再起動ポリシーを追加しました。

結果:

  • mobileonemedia.comでのライブエージェント機能の100%復元。
  • エージェントがDockerコンテナのライフサイクルイベント間で正しく状態を維持するようになりました。
  • 適切なヘルス監視を備えたゼロダウンタイムデプロイメント。

Sentryの最善の活用

Sentryはこのサイレントな本番障害の診断において絶対的なヒーローでした:

  1. エラーモニタリングとアラート:
  2. Sentryはライブウェブサイトドメインから発生する接続エラーとタイムアウト警告の突然の急増を即座に検知しました。
  3. 問題のグループ化はDockerコンテナの再起動イベントと相関するエラーを示しました。

  4. セッションリプレイ:

  5. mobileonemedia.com上の実際の訪問者のSentryセッションリプレイを視聴しました。「Zoyaと話す」ボタンをクリックし、ローディングスピナーが表示され、最終的にタブを閉じる様子を確認できました。この視覚的な証拠により、フロントエンドが正しく初期化されていないバックエンドを待機していることが確認されました。

  6. パフォーマンス監視:

  7. 修正後、新しいDocker設定が本番環境で完全に動作していることを確認するため、エージェントの応答時間と接続成功率を追跡するSentryダッシュボードを設定しました。

Google AIの最善の活用

このDockerとシステムプロンプトの修正を行い、ライブサイトを迅速に復旧させるために、Google Geminiに大きく依存しました:

  1. Docker設定のデバッグ:
  2. Dockerログと環境変数設定をGoogle Geminiに入力しました。
  3. プロンプト:「Node.js音声エージェントのDocker設定を分析してください。コンテナは起動しますが、再起動時に状態を失い、システムプロンプトが初期化に失敗します。ボリュームマウントと環境変数の問題を特定してください。」
  4. Geminiは欠落しているボリュームマウントと不正な環境変数保持戦略を特定しました。

  5. システムプロンプトの再構築:

  6. Dograh AIエージェント用の適切なシステムプロンプト構造の作成をGeminiに依頼しました。

  7. プロンプト:「ビデオ制作、オーディオエンジニアリング、アプリ開発の複数サービス問い合わせを処理し、会話コンテキストを維持し、ユーザーを適切にルーティングする音声エージェント用の堅牢なシステムプロンプトを作成してください。」

  8. 結果のプロンプトはクリーンで構造化されており、新しいエージェント設定の基盤を形成しました。

  9. Docker Composeの最適化:

  10. Geminiは適切なヘルスチェック、再起動ポリシー、ボリューム設定を備えた修正されたdocker-compose.ymlの生成を支援しました。