看症狀,不看手冊:Pi Agent 不動的時候怎麼修
其他每一篇都在講事情順利時該怎麼做。這篇反過來:看螢幕上顯示的東西——一個紅色數字、一個轉個不停的轉圈圈、一支沒聲音的影片——再往回推。
把這篇加書籤,不是讀一遍就收起來
問題不會照教學的順序來:一把用了兩個月都沒事的金鑰,某個週二早上突然回傳 401。所以這篇是照症狀來安排的。先跑三項檢查,再跳到跟你螢幕對得上的那一節。
flowchart TD
A["出問題了"] --> B["三項快速檢查"]
B --> C{"What is on screen?"}
C -->|"401 / 402 / 429"| D["金鑰、額度,或速率限制"]
C -->|"404"| E["Ingress 跟這個 add-on"]
C -->|"轉圈圈或空白頁面"| F["沒有錯誤代碼"]
C -->|"Skill 或影片步驟"| G["工作流程各節"]
C -->|"每分鐘都重啟"| H["Watchdog 迴圈"]
D --> I["最後 30 行 log"]
E --> I
F --> I
G --> I
H --> I
I --> J["GitHub issue"]
不到一分鐘,通常就夠了
-
檢查 1
這個 add-on 還在跑嗎?
打開
Settings → Add-ons → Woow HA Pi Agent。綠色的 Started 代表正在運作。如果顯示 Stopped 或紅色,點 Start,給它 30-60 秒完成初始化,再試一次。 -
檢查 2
真的有選好一個供應商嗎?
看訊息輸入框上方的模型選單。它應該顯示一個供應商跟模型,例如
GLM / glm-4.6。如果它是灰的,或顯示「No model」,打開 Models 面板,輸入金鑰,並確認 Test 成功。 -
檢查 3
這個網路連得上網際網路嗎?
打開
https://www.google.com在新分頁打開。如果打不開,先修好網路連線。如果一般瀏覽都正常、只有某個供應商連不上,查一下它的官方狀態頁面,並確認你的網路政策允許連到它的 API endpoint。
- 最底下那排按鈕: Stop、 Restart、 Uninstall、 Open web UI。這裡會有 Stop,是因為這個 add-on 正在運作;已停止的話這裡會換成 Start——見上面的檢查 1。
- Current version: 0.12.0 在標題下面,旁邊有個 Changelog 連結。現在就把這個版本號記下來;每個求助請求都會問到它。
- Watchdog,在這張截圖裡是開著的——它會在這個 add-on 不再回應時把它重啟,而診斷重啟迴圈時,你就是要關掉這個開關。
- 側邊欄開關,標示為 Add to sidebar 在這個版本上, Show in sidebar 則是文件裡的寫法。如果 Pi Agent 在跑,但左側選單裡沒有入口,就是這個開關。
401、402、429、404:四種不同的拒絕方式
一間會員制的俱樂部。 401 是門房拒絕了你的卡片。 402 是吧檯說你的帳戶餘額是空的, 429 同一個酒保要你點慢一點。 404 則是沒有任何人在拒絕你——你只是走錯了自己家的門。
401 Unauthorized
右上角出現紅色的「401」或「Unauthorized」,而且沒有回覆:供應商拒絕了這組憑證。大約 90% 的情況是金鑰的問題。
| 原因 | 發生機率 | 修法 |
|---|---|---|
| 金鑰打錯或過期 | 90% | Models 面板:選那個供應商,輸入一把有效的金鑰,點 Test。看到通過才繼續下一步。 |
| baseUrl 打錯 | 5% | 對照供應商目前的 endpoint 改正它。絕對不要把 OpenRouter 的金鑰配上直連供應商的 endpoint,反過來也一樣。 |
| 供應商服務中斷 | 5% | 查一下那家供應商的狀態頁面——GLM、OpenAI 跟 Anthropic 都有各自的官方狀態頁。等它恢復,或切換到另一個已設定好的供應商。 |
402 Payment Required,或 429 Too Many Requests
一個 402,或訊息裡帶著 insufficient_balance、「insufficient balance」、「rate limit」或「quota exceeded」這類字眼。憑證可能是對的;只是這個帳戶沒有可用的額度、撞到配額上限,或正被限速。
insufficient_balance、 credits 跟 quota 指的是帳戶額度。 rate_limit 跟「too many requests」代表暫時性的限制:等一到兩分鐘,等待期間不要重複送出請求。
如果額度是空的,到負責你這條線路的供應商去加值——GLM 在 bigmodel.cn,OpenAI 在 platform.openai.com,Anthropic 在 console.anthropic.com,OpenRouter 在 openrouter.ai。不需要重啟;下一次請求就會用上新的額度。或者切到另一個已經設定並測試過的供應商跟模型,先確認過它的收費跟限制。
404 Not Found
選了側邊欄的 Pi Agent,或按了 Open Web UI之後,出現「404 Not Found」或「Ingress token invalid」。幾乎都跟 Ingress 有關——Home Assistant 用來代理 add-on 網頁介面的機制:它發出的是一張臨時門卡,門卡是會過期的。
| 情況 | 你看到什麼 | 修法 |
|---|---|---|
| Ingress token 過期了 | 剛才還好好的,回來就 404 | 回到 Home Assistant 首頁,再點一次 Pi Agent;系統會發出一張新的 token。極少數情況需要 ha core restart。 |
| add-on 沒在跑 | 整個打不開;Open Web UI 沒反應 | 去 Info 分頁檢查狀態。如果是停止的,點 Start,等 30-60 秒。 |
| 側邊欄入口不見了 | Pi Agent 在跑,但左側邊欄什麼都沒有 | 見下面的三項檢查。 |
側邊欄完全沒有入口
| 檢查 | 該怎麼做 |
|---|---|
| 側邊欄開關 | Settings → Add-ons → Woow HA Pi Agent → Info: Add to sidebar 在目前的介面裡, Show in sidebar 在文件裡的寫法。從 v0.8.0 開始,這個 add-on 通常會在啟動時透過 Supervisor API 自動註冊它;如果失敗了,手動打開這個開關。 |
| 管理員帳號 | 這個面板用的是 panel_admin: true,所以只有管理員身分能看到這個入口——跟家人共用的一般帳號永遠看不到。 Settings → People → Users,選那個使用者,只有在這個存取層級合適時才開啟 Administrator。 |
| 重啟一次 Home Assistant | Supervisor 偶爾會沒能把側邊面板跟 Core 註冊好。跑 ha core restart,或在介面裡用 Restart Home Assistant。 |
轉圈圈一直轉,卻等不到回覆
沒有任何東西指出問題所在:訊息送出去了,右下角出現轉圈圈,然後什麼都沒回來。照順序檢查四件事。
-
第一
確認基本狀況
有選好模型嗎? Test 在 Models 面板裡對那個供應商測試成功嗎?只要有一個答案是否,先把設定修好。
-
第二
給延遲留一點時間
有推理能力的模型,可能要 30-60 秒甚至更久才開始回應。沒有一個放諸四海皆準的九十秒門檻——延遲取決於模型、線路、請求大小跟供應商的負載。把同一段提示送給另一個已設定的模型,就能分辨是哪種情況。
-
第三
檢查網路是不是擋住了這個 endpoint
公司的 VPN、學校網路、DNS 過濾,或地區政策,可能擋住了某個供應商的
baseUrl。打開https://api.openai.com在瀏覽器裡是基本的連線檢查,不是完整的 API 測試——也要去讀官方狀態頁面,並從發出請求的那台主機測試 DNS 跟 HTTPS。如果真的被擋住了,切換到另一條你的網路跟所在地能支援的線路。 -
第四
給 Watchdog 一分鐘的時間
很少見的情況,pi-web 還在跑,但不再回應。等它自動恢復:v0.10.0 加上的 Watchdog 每分鐘探測一次
/api/home,並要求 Supervisor 重啟一個沒回應的 add-on。它會在 60 秒內察覺,所以總共給 60-90 秒,再重新打開 Pi Agent,讀一下 log。
如果請求還是一直完成不了,打開 Log 分頁,讀失敗那次嘗試前後的最後 30 行。複製下來,把任何敏感內容遮掉,拿去開一個 GitHub issue。
- 每個 工具卡 都帶著它花的秒數——
write notes.md5 秒,read notes.md2 秒——底下還有一行 token 跟成本:1,180 in · 70 out · $0.0080。有新的卡片持續出現,代表工作還在進行。 - Waiting for model… 接在最後一張卡片下面。這一行是轉圈圈的老實版本:這一輪還沒結束,畫面上寫的就是它卡在哪裡。
- session 總計 在頂欄——這裡是 $0.02——會隨著工作進行往上爬。一個還在變動的數字,就是有活動的有用跡象。
- 訊息輸入框變成了 Steer now / queue follow-up ,帶著 Steer、 Follow-up ,跟一個紅色的 Stop。那個 Stop,而不是 Send,才是你想結束這一輪時該按的按鈕。
其他不太明顯的症狀
上面這幾節涵蓋了大約 90% 出錯的情況。剩下的:
| 你看到什麼 | 修法 |
|---|---|
| 整個 pi-web 頁面都連不上——不是 404,根本沒有頁面 | 在另一個分頁打開 Home Assistant 首頁。如果那個也打不開,Home Assistant 本身就掛了——先把它救回來。如果只有 Pi Agent 連不上,用上面 404 那節的檢查。 |
| 頁面打得開,但一直是空白或灰色 | F12 打開開發者工具,讀 Console。 Failed to load /_next/... 暗示是 Ingress 資源路由的問題——重啟一次這個 add-on。 ChunkLoadError 暗示瀏覽器快取過舊——用 Ctrl+Shift+R。 |
| Send 是灰的 | 模型選單沒有選中任何項目——剛建立 Session 後常見這種情況。打開它,選一個已設定的供應商跟模型。 |
| 看起來一切正常,但 Log 分頁是空的 | log_level 設得太嚴格。預設值 info 會記錄重要事件; error 只記錄錯誤。平常用 info , debug 只有在追蹤問題時才用。 |
| 一個 Session 一開就立刻關閉,把你打回首頁 | 這個 Session 的檔案可能不見了或壞了。每次對話都是一個 .jsonl 檔案,放在 /data/pi-agent/sessions/底下;內容無效會讓 pi-web 沒辦法載入它。從一份 Home Assistant 備份還原 sessions 目錄。 |
| 更新之後 Pi Agent 感覺變慢了 | 第一次啟動可能會跑 video-tools-init 檢查,pi-web 也可能重建它的 .next 快取,所以第一次啟動比較慢是正常的。如果連續兩三次啟動都這樣,就讀 log,檢查系統資源。 |
失敗發生在一連串工具鏈裡的時候
一次影片工作流串起 5-6 個工具——文字轉語音、Playwright 錄製、ffmpeg 合成、字幕渲染、rclone 上傳——所以問題在於它停在哪個階段。
就像一支接力隊。棒子掉到地上,你不會重新訓練整支隊伍——你要查的是哪一棒的交接出了問題。有畫面沒聲音,代表配音那一棒根本沒起跑;有聲音沒字幕,代表是最後一棒出的問題。
| 失敗的階段 | 可能的原因 | 修法 |
|---|---|---|
script.yaml 卡住,或沒有可用的結構 | 模型沒有照著結構化的腳本格式走 | 透過一個已設定的供應商,換用一個目前有推理能力的模型,再要求它驗證 YAML 結構,重試一次。 |
| Playwright 錄出來的影片整個是黑的或灰的 | Chromium 不完整,或 Playwright 快取壞了 | Configuration 分頁: reset_video_tools 改成 true,存檔,重啟。給那 720MB 的下載 3-8 分鐘。Supervisor 通常會自己把選項改回 false;如果 log 顯示自動改回失敗,就自己手動關掉。 |
| 有畫面,沒有配音 | edge-tts 連不上微軟的 TTS endpoint | 在 log 裡搜尋 edge-tts ——找逾時或網路錯誤。如果你的網路擋住了 speech.platform.bing.com,就照你的網路政策處理,或設定另一個支援的 TTS 工作流,不要對著一個被擋住的 endpoint 一直重試。 |
| 有畫面有配音,沒有字幕 | SRT 檔案存在,但 ffmpeg 沒把它渲染進去 | pitch_video 的 SKILL.md 用 ffmpeg -vf subtitles= 這一步渲染字幕。在 log 裡搜尋 subtitles。少了 fonts-noto-cjk → 重新安裝或更新這個 add-on; reset_video_tools 不會重新安裝映像檔裡的套件。SRT 路徑錯了 → 拿去跟 script.yaml。 |
| 影片完成了,但上傳失敗 | rclone 的 Google Drive 授權無效、被撤銷或過期了 | 重新打開 rclone --config=/data/pi-agent/rclone/rclone.conf config 來測試或重新連接這個遠端。不要假設 token 有固定的存活期限;以 rclone 實際的錯誤跟供應商帳戶狀態為準。 |
起不來——沒有 python、 ffmpeg 或 rclone | video-tools-init 沒跑完,或 add-on 映像檔不完整 | 缺少 Python 環境:設定 reset_video_tools,重啟,給那 720MB 的初始化 3-8 分鐘,同時盯著 video-tools-init 在 log 裡的動態。 ffmpeg 跟 rclone 來自 add-on 映像檔——重新安裝或更新它。 |
log_level 成 debug,重啟,重現一次失敗的情況。每個階段就會記錄詳細得多的資訊。事後設回 info 。一個 Skill 裝不上去,或啟動不了
| 症狀 | 修法 |
|---|---|
| 用 Add from URL 什麼都沒發生 | 兩種原因。一個無效的套件規格——Pi 不接受單獨一個 owner/repo ,例如 elmo/fridge-check;改用一個完整的網址,例如 https://github.com/elmo/fridge-check,或一個支援的 Git 規格,例如 git:github.com/elmo/fridge-check,並檢查有沒有多餘的空格或缺漏的字元。或者是私有倉庫:純 HTTPS 的 clone 沒辦法跳出來要求憑證,改用文件記載的 SSH 套件規格,並在容器裡設定好金鑰,或直接把倉庫改成公開。 |
| clone 完成了,但 Skills 面板還是空的 | F5 重新整理,接著 Reload Session 或開一個新 Session。確認套件裡有一個 SKILL.md ——大寫的 SKILL,小寫的 .md ——放在一個 Pi 會掃描的目錄裡。如果一個倉庫把 Skill 放在不支援的巢狀結構裡,安裝會乾乾淨淨地成功,但什麼都發現不了。 |
| Skill 列在清單裡,但 AI 從沒用過它 | 讀一下 description 欄位在 SKILL.md裡。agent 靠它來判斷這個 Skill 適不適用,「幫忙處理家事」這種寫法幾乎給不了任何線索。把任務講清楚,具體點出哪些請求該觸發它。 |
| description 寫得很好,還是被忽略 | 檢查這個 Skill 有沒有出現在目前 Session 的可用 Skill 清單裡,重新載入 Session,明確要求 agent 使用它。接著換一個有推理能力的模型比較看看——輕量模型例如 GLM-4-Flash 可能沒那麼穩定地遵循複雜的系統指示。換模型救不回一個從沒被發現、或格式有問題的 Skill,所以要照這個順序檢查。 |
狀態顯示綠色,但 log 卻不斷重新開始
這個 add-on 顯示綠色,但 Log 分頁顯示 video-tools-init 或 pi-web 大約每 60 秒重新啟動一次,對話在回覆到一半時就斷線。Watchdog 正在做它該做的事:它每分鐘探測一次,把沒回應的 add-on 重啟。但當啟動本身每次都失敗時,這個保護機制就變成了一個無窮迴圈。
| 步驟 | 該怎麼做 |
|---|---|
| 找出重啟之前的那個錯誤 | 讀最新的 Log 內容——就是重啟前的那幾行——找 Error、 Failed 或 fatal。常見的元兇:一次被中斷的 video-tools-init 下載、一個已經被佔用的連接埠,或 pi-web 讀不到 models.json。 |
| 只重置下載下來的工具 | 如果 video-tools-init 有問題,設定 reset_video_tools 在 Configuration 分頁裡,重啟,讓初始化跑完——3-8 分鐘。它會重建 Python 環境跟 Playwright 快取;不會重新安裝屬於 add-on 映像檔的套件。 |
| 讀 log 的時候先關掉 Watchdog | 反覆重啟會把你需要的上下文都抹掉。 Settings → Add-ons → Woow HA Pi Agent → Info,把 Watchdog 關掉——跟側邊欄開關在同一個地方。失敗的程序就會保持停止狀態。 |
| 重新安裝,當作最後手段 | Info 分頁:Uninstall,再從商店重新安裝一次。 /data/pi-agent/ 底下的資料——Sessions、Skills、 models.json ——跟被替換掉的映像檔是分開的。 video-tools-init 可能會再跑一次,所以給它 3-8 分鐘,在依賴這個步驟之前先確認過你的備份。 |
大約 90% 答案真正藏在的地方
打開 Settings → Add-ons → Woow HA Pi Agent ,選 Log 分頁;面板會自動捲到最新的紀錄。log 可能長達好幾千行,所以先讀剛失敗那件事前後的最後三十行,只有在錯誤指向更早的初始化步驟時,才需要往前翻。
- 大多是請求紀錄。 每一行都帶著客戶端位址、時間戳記、請求內容跟狀態碼——
"GET /api/agent/running/events HTTP/1.1" 200這裡就是這樣。警告也混在同一串裡,就像epoll_wait() reported that client prematurely closed connection這一行,往上幾行就有。bashio 的啟動訊息跟 pi-web 的輸出,都交錯在同一個畫面裡。 - 最新的在最下面。 從那裡開始看——最後 30 行通常就足夠寫一份第一次的回報。
- Search logs在面板上方,是你輸入關鍵字的地方;瀏覽器自己的 Ctrl+F 對畫面上已經顯示的內容也管用。注意那些很長的
hassio_ingress網址帶著一個 session 識別碼——貼到任何公開的地方之前先遮掉。
值得搜尋的關鍵字,以及對上了通常代表什麼:
| 關鍵字 | 通常代表什麼 |
|---|---|
| Error / ERROR | 一個一般性的錯誤——讀完整條訊息跟前後幾行 |
| Failed / failed | 一個失敗的步驟,通常後面會接著原因 |
| fatal | 嚴重到讓 add-on 程序整個結束 |
| denied / Permission | 檔案或目錄的權限問題,可能跟 chmod 或 SELinux 有關 |
| timeout | 連到某個供應商或其他上游服務時網路逾時 |
| 401 / 402 / 404 | 對應到這篇文章前面幾節的 HTTP 狀態碼 |
| ENOENT | 缺少檔案或指令——路徑錯了,或安裝不完整 |
| EADDRINUSE | 連接埠已被佔用——通常是一個從沒結束的程序 |
想看更詳細的資訊,把 log_level 從 info 成 debug 在 Configuration 分頁上改掉,存檔,Restart。重現一次問題 一次 ——比如那個會回傳 401 的請求——接著設回 info。debug 輸出一分鐘內可能長到幾千行;不要讓 /var/log 被塞爆。
如果還是需要幫忙
到這裡開一個 issue https://github.com/WOOWTECH/Woow_ha_pi_agent_add_on/issues,先搜尋一下既有的 issue——「401」、「video-tools」、「blank iframe」——可能已經有人回報過你遇到的症狀了。有四件事能讓一份回報變得有辦法回答:
- 你的 Pi Agent 版本 從 Info 分頁最上面看,例如 0.13.1。
- 你的 Home Assistant 版本 從
Settings → About或系統資訊頁面。 - 最後 30 行相關的 log,用三個反引號包起來,這樣 GitHub 才會渲染成程式碼區塊。
- 你已經試過的每一件事 ——「重啟過了、換了金鑰、Test 顯示成功,但送訊息還是回傳 401。」
可以的話用英文寫。維護者看得懂中文,但用英文寫的回報,其他地方可能幫得上忙的人也讀得懂;如果用英文不方便,中文也可以。
Bearer <REDACTED>。絕對不要貼出 API 金鑰、任何形式的家中對外位址(Nabu Casa 網址、DuckDNS 網址、公開 IP)、姓名地址電話這類個人資訊,或一份完整的 Session 檔案——那裡面裝著你跟 AI 的私人對話。把敏感值換成 <REDACTED>。如果真的不小心貼出了一把真實的金鑰,就當它已經外洩:立刻到供應商的儀表板撤銷它,換一把新的。我遇到的症狀,這篇文章裡都沒講到
GitHub issue 大概多久會有回覆?
有付費支援可以買嗎?
我發現一個錯誤,或有更好的修法。該怎麼貢獻回去?
Woow_ha_pi_agent_tutorial 這個倉庫裡,這一章是 ch22_troubleshoot.html。如果不想用 Git,開一個 issue,寫清楚是哪一節、提議怎麼修正。或者開一個 GitHub Discussion,適合需要先讓社群討論看看的做法。更新這個 add-on 之前該檢查什麼?
CHANGELOG.md,特別留意任何 BREAKING 的提示——v0.13.0 把 API 金鑰從 add-on 設定搬到 pi-web 的 Models 面板,要求重新輸入一次。像 0.10 → 0.11 這種較大的更新,考慮等個兩三天,讓早期的回報先浮出來。我一升級到 v0.13,所有東西馬上都回傳 401。是壞掉了嗎?
怎麼確認影片工具真的裝好了?
docker exec -it <discovered-container-name> bash 字面上的內容——跑 docker ps | grep pi_agent 先查出來,用回傳的確切名稱,可能長得像 addon_a1b2c3d4_woow_ha_pi_agent。在容器裡跑 which python3、 which ffmpeg、 which rclone 跟 which chromium。每一個都應該回傳一個路徑,例如 /data/pi-agent/venv/bin/python3 或 /usr/bin/ffmpeg。Python 或 Chromium 顯示「not found」代表 video-tools-init 不完整——用 reset_video_tools 重建下載下來的工具。少了 ffmpeg 或 rclone 則是 add-on 映像檔的問題:重新安裝或更新它。圖片在手機上傳失敗,在電腦上卻正常
更新會刪掉我的 Skill、Session,或設定嗎?
models.json 跟 rclone.conf 放在 /data/pi-agent/底下,這個 add-on 的持久化儲存空間;更新替換的是映像檔,不是那個目錄。像 venv 跟 playwright-cache 這種可重新產生的元件,可能被排除在備份之外,需要時再重建,所以不要假設 /data 底下的一切都有備份。在 v0.10.0 之前,Pi 的工作目錄放在容器的根檔案系統裡,更新時可能弄丟;v0.10.0 設定了 HOME=/data/pi-agent/home ,讓那個狀態變得持久化。升級之前,保留一份最新的 Home Assistant 備份。接下來往哪走
《Pi Agent 入住指南》系列第 16 篇,由 WoowTech 渥屋科技 製作。
內容出自 Woow HA Pi Agent 入住指南,依 CC BY 4.0 釋出。
The Smart Space Solution · 智慧空間解決方案 · © 2026 WOOW Technology Co., Ltd.