Summer Bug Smash: Clear the Lineup 🐛🛹
這是 DEV's 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 健康檢查,確保代理完全初始化後才上線。
- 加入具狀態保留的自動重啟政策,避免未來再次發生靜默失效。
結果:
- mobileonemedia.com 上的即時代理功能 100% 恢復。
- 代理現在能在 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.