找回密碼
 立即註冊
    查看: 186|回覆: 0

    把 AI 關進籠子:Home Assistant 裡四個護欄的完整做法

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-25 01:46:44 | 顯示全部樓層 |閱讀模式
    AI 在智慧家庭裡真正會出事的四個地方是:做了不該它做的決定、在迴圈裡燒錢、把該立刻反應的事情拖慢、以及編造你家的數字。

    這篇不是叫你不要用,而是把這四件事各做成一個今天就可以裝上去的護欄。四個護欄全部收在同一個地方:一支叫 `script.ask_ai` 的包裝腳本,之後所有的 AI 呼叫都走它。

    今天就可以裝上去的護欄

    做完這篇你會有什麼


    • 一支包裝腳本,每一次 AI 呼叫自動計次、自動在超過預算時停下來、失敗時自動退回備用文字
    • 一個「這個月呼叫了幾次 / 上限是幾次」的儀表板卡片,家人也能自己調上限
    • 一個超過預算會自己關掉總開關並通知你的自動化
    • 一個可以驗證「AI 有沒有在編數字」的方法


    這篇假設你已經有一個 AI Task 實體(在設定 → 系統 → AI 任務裡設成了預設)。還沒有的話先去設定 → 裝置與服務,在你的 AI 整合上按新增子項目 → 選 AI Task,再回來。

    ---

    步驟 1:先把檔案結構弄好

    四個護欄加起來會用到五種不同的設定區段(`counter`、`input_number`、`input_boolean`、`script`、`automation`)。全部塞進 `configuration.yaml` 會很難維護,所以用套件(package)把它們裝在同一個檔案裡。

    1-1 在 configuration.yaml 的最外層加一行
    1. homeassistant:
    2.   packages: !include_dir_named packages
    複製代碼

    已經有 `homeassistant:` 區段的話,把 `packages:` 那一行接在底下就好,不要寫第二個 `homeassistant:`。

    ⚠ 是 `!include_dir_named`,不是 `!include_dir_merge_named`

    兩個差一個字,行為完全不同:


    • `!include_dir_named` —— 檔名就是套件名。檔案內容直接從 `counter:` 這種頂層鍵開始寫
    • `!include_dir_merge_named` —— 檔案裡自己要多一層套件名稱,底下的東西全部多縮排一層


    寫錯的錯誤訊息完全看不出原因,會變成「某個區段的格式不正確」之類的話。這篇用的是前者。

    1-2 建立資料夾與檔案

    在 `configuration.yaml` 旁邊建一個 `packages` 資料夾,裡面放一個 `ai_guard.yaml`。

    用檔案編輯器應用程式(File editor / Studio Code Server)的話直接建就好。

    你會看到的目錄結構:
    1. configuration.yaml
    2. automations.yaml
    3. packages/
    4.     ai_guard.yaml
    複製代碼

    下面步驟 2 到 5 的內容全部寫進 `ai_guard.yaml`,步驟 6 會把完整的一份列出來。

    ---

    步驟 2:護欄一 —— 決定權不給 AI

    步驟 2:護欄一 —— 決定權不給 AI

    2-1 問題長什麼樣

    危險的寫法是這種:
    1. # 不要這樣寫
    2. - action: ai_task.generate_data
    3.   data:
    4.     task_name: door check
    5.     instructions: 這是門口的畫面,這個人是不是住在這裡的人?
    6.     structure:
    7.       is_resident:
    8.         required: true
    9.         selector:
    10.           boolean:
    11.   response_variable: check
    12. - condition: template
    13.   value_template: "{{ check.data.is_resident }}"
    14. - action: lock.unlock
    15.   target:
    16.     entity_id: lock.front_door
    複製代碼

    這段程式碼沒有任何語法問題,設定檢查會通過,而且十次有九次會正確運作。 問題在第十次。

    2-2 為什麼不能用「它錯的機率很低」來說服自己

    一般的感測器壞掉通常看得出來:數值卡住、回報 `unavailable`、或是明顯不合理(室溫 −40 度)。你可以寫條件把這些擋掉。

    AI 回給你的是一個乾乾淨淨的 `true`。 它不會附帶「我有六成把握」,也不會在看錯的時候回 `unknown`。沒有任何可以檢查的訊號 —— 這才是它跟壞掉的感測器不一樣的地方。

    2-3 正確的形狀:AI 只寫字,決定由確定性的條件做

    同一個需求改成這樣:

    以下還有約 84% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 00:27 , Processed in 0.127233 second(s), 25 queries .

    快速回覆 返回頂部 返回列表