第 19 章

語音助理與 LLM 串接

這一章把你的家從「用手機點」升級成「用嘴巴喊」。你會學會 Home Assistant 內建的 Assist 怎麼運作、怎麼決定哪些裝置聽得懂你講話、怎麼把語音辨識跟朗讀全部搬回家裡跑,還有怎麼把 ChatGPT、Gemini、Claude 這類大型語言模型(LLM)接上來,讓它真的能幫你關燈。

為什麼要學這個

你已經在第 6 章做好儀表板、在第 8 章寫過自動化了。但生活裡有一種情境是儀表板救不了的:你手上端著一鍋湯走進廚房,或是你已經躺平在床上、手機掉到床底下。這時候你需要的是喊一聲就有人理你。

Home Assistant 內建的語音助理叫 Assist,它是完全免費、內建的,不用裝任何東西就能用。而且它跟 Google 助理、Alexa 最大的不同是:你可以決定它的每一段要跑在你家裡,還是跑在別人的雲端。

讀完這章你會有這些能力:

  • 知道 Assist 到底是什麼、跟「LLM」是兩回事還是一回事。
  • 會設定哪些實體(Entity)可以被語音控制、哪些絕對不要開放。
  • 會自己組一條語音流水線(Assist pipeline),四段各自挑本地或雲端。
  • 會把 OpenAI/Google/Anthropic 的模型設成對話代理,而且真的叫得動家裡的燈。
  • 知道 Model Context Protocol(MCP)在 Home Assistant 裡是什麼角色。
  • 知道錢會花在哪、延遲會卡在哪、隱私會漏在哪。
觀念:這章大量依賴你前面的功課。第 3 章的區域(Area)跟第 4 章的命名沒做好,語音助理會爛到你想砸手機。名字亂 = 叫不動,這是鐵律。

Assist 是什麼:先分清楚三個名詞

很多人一開始就被三個詞搞混,我們先切乾淨。

名詞白話解釋你會在哪裡看到它
AssistHome Assistant 整套語音功能的品牌名。包含打字聊天和講話兩種用法。右上角的對話圖示、手機 App 的三點選單
對話代理(Conversation agent)真正在「聽懂你在講什麼」的那顆腦袋。可以是內建的,也可以換成 LLM。設定 → 語音助理 → 助理的設定畫面
語音流水線(Assist pipeline)一整條加工線:喚醒詞 → 語音轉文字 → 對話代理 → 文字轉語音。設定 → 語音助理 裡的每一個「助理」就是一條流水線

最重要的一件事:Home Assistant 內建的對話代理不是 AI,它是一個句型比對器。它拿你講的話去比對一大堆事先寫好的句型範本,比對到就觸發對應的意圖(Intent),例如「打開客廳的燈」對到 HassTurnOn

這帶來兩個結果:

  • 好處:速度極快、完全在本機、零成本、不會亂講話。你叫它關燈它就是關燈。
  • 壞處:句型沒中就是聽不懂。你說「幫我把客廳弄暗一點好嗎拜託」,它可能就當機了。而且它完全不會閒聊。

內建代理這幾年有在補強。2025.9 之後加了一個「模糊比對(fuzzy matcher)」,你多講幾個贅字、換個講法,它也還是能對到正確的意圖。不過官方講得很老實:這個功能是先從英文開始做的,其他語言會陸續跟上。所以講中文的你,短期內還是要靠好念的名字跟別名來拉高命中率。

提示:先別急著接 LLM。把內建代理調到「叫得動」再說。內建代理是免費、即時、可靠的基準線,LLM 是加值。很多人跳過基準線直接上 LLM,結果家裡變成一個很貴又很慢的關燈機器。

想先玩玩看不用設定任何東西:登入 Home Assistant 後,點右上角的對話圖示(一個講話泡泡),直接打字「turn on the living room light」或用你設定的語言講一句。這就是 Assist 的最小可用形態。

流水線的四段,每段都能換零件

把語音助理想成一條工廠輸送帶。你喊一句話進去,最後吐出動作跟回話。中間有四個站,每個站都可以獨立選要用本地的還是雲端的。

#站名它在幹嘛本地選項雲端選項
1喚醒詞
(Wake word)
一直豎著耳朵等你叫它的名字openWakeWord(跑在 HA 主機上)、microWakeWord(跑在裝置晶片上)無,喚醒詞一律在本地
2語音轉文字
(STT)
把你的聲音變成一行字Whisper、Speech-to-PhraseHome Assistant Cloud、OpenAI、Google Gemini
3對話代理看懂那行字要幹嘛,決定動作內建 Assist、Ollama(本地 LLM)OpenAI、Google、Anthropic
4文字轉語音
(TTS)
把回話唸出來PiperHome Assistant Cloud、OpenAI、Google Gemini
觀念:四段可以混搭。很常見的實用組合是「喚醒詞在裝置上(省電)+ 語音轉文字用雲端(中文準)+ 對話代理用內建(快又免費)+ 朗讀用雲端(聲音好聽)」。你不必全本地或全雲端,二選一是假議題。

如果你只打字不講話(例如在手機 App 裡打字問 Assist),那第 1、2、4 站根本不會啟動,只有對話代理會跑。所以「我想接 ChatGPT 來聊天」跟「我想對著音箱喊」是兩件難度差很多的事。

本地方案的角色分工

  • Whisper:語音轉文字,通用型,語言支援廣(包含中文)。官方 Add-on 的模型預設是 auto,在樹莓派這種 ARM 機器上會挑 tiny-int8,其他機器挑 base-int8。你可以自己往上調到 smallmedium,但吃 CPU 會明顯變重。
  • Speech-to-Phrase:語音轉文字,但它只認得「你家裡真的有的東西」的句子,所以在很弱的硬體上也超快。代價是它不支援自由講話,而且目前的語言清單裡沒有中文,講中文的家庭基本上用不到。
  • Piper:文字轉語音,本地朗讀,速度快、資源需求低。
  • openWakeWord:喚醒詞偵測,跑在 Home Assistant 主機上。官方說法是一台樹莓派 4 大約可以同時扛 5 台語音衛星(satellite)串流音訊,再多就要把偵測搬到另一台機器上。
注意:Whisper 的語言設定不要留在 auto。官方文件明講,自動偵測語言會讓每一次請求都慢很多。直接指定你家講的語言。

這四個都是官方 Add-on,安裝之後透過 Wyoming 這個通訊協定被 Home Assistant 發現。Add-on 商店怎麼用已經在附錄 A 講過了,這裡不重複。

哪些東西聽得懂你講話:公開實體

這是全章最重要、也最多人漏掉的設定。Home Assistant 不會把你所有實體都交給語音助理。你必須明確「公開(Expose)」它們,語音助理才看得到。這是刻意的安全設計。

  1. 打開公開設定頁

    左側欄 設定(Settings)語音助理(Voice assistants),然後切到 公開(Expose) 分頁。

  2. 看看目前公開了什麼

    清單會列出已經公開的實體,以及它被公開給哪些助理。這裡的助理不只 Assist,如果你有接 Google Assistant 或 Alexa,它們也會出現在同一張表上。

  3. 加入你要的實體

    公開實體(Expose entities) 按鈕可以一次勾選多個加進來。也可以點單一實體進去,細調它要公開給哪幾個助理。

  4. 順手加別名(Alias)

    點進單一實體後可以加別名。實體叫「客廳主燈」但你平常都講「大燈」,那就把「大燈」加成別名。你也可以從實體的資訊視窗右上角齒輪 → 語音助理 進去改。

  5. 把不該被喊的東西移除

    門鎖、警報器、電熱水器、任何會發熱或有安全疑慮的東西,除非你真的想清楚了,否則從清單裡拿掉。

危險:門鎖(lock)跟警報主機(alarm_control_panel)公開給語音助理,等於任何站在你家窗外對著音箱喊話的人都可能開你家門。除非你完全清楚自己在幹嘛,預設就是不要公開。

公開太多會怎樣

官方的最佳實務講得很直白:只公開最少必要的實體。原因有兩個,而且兩個都很痛:

用內建對話代理時用 LLM 當對話代理時
名字跟別名越多,句型比對要掃的東西越多,反應越慢;名字相近還會誤中,你叫「房間燈」結果開到「房間空氣清淨機的指示燈」。每一個公開的實體都會被塞進送給模型的提示裡,直接變成 token 成本,而且清單一長模型就開始選錯裝置。官方在 Ollama 的文件裡建議實驗本地模型時公開少於 25 個實體

區域與樓層的別名

光公開實體還不夠。你要能說「把客廳的燈全部關掉」,前提是那些燈真的被指派到「客廳」這個區域。區域跟樓層也可以加別名:設定區域、標籤與區間(Areas, labels & zones),點區域卡片上的鉛筆 → 新增別名;樓層則是點旁邊的三點選單 → 編輯樓層新增別名

提示:官方建議的命名格式是「區域 + 描述 + 裝置類型」,例如「客廳 檯燈」。如果那個房間只有一盞燈,直接叫「客廳燈」就好。像 Tuya Light Controller 0E54B1 Light 1 這種原廠名,語音助理是絕對叫不動的,趕快回第 4 章改名。

動手做:組一條可以講話的流水線

這一節我們實際做出一個可以對著手機講話的助理。下面用「本地 Whisper + 本地 Piper + 內建代理」當範例,這是最省錢、隱私最好的起手式。

  1. 安裝語音轉文字 Add-on

    設定附加元件(Add-ons)附加元件商店,找到 Whisper,安裝後啟動。啟動前先進它的設定分頁,把 language 改成你要用的語言,不要留 auto

  2. 安裝文字轉語音 Add-on

    同一個商店裡找到 Piper,安裝後啟動。

  3. 接受 Wyoming 的自動探索

    回到 設定裝置與服務(Devices & services)。剛剛啟動的兩個 Add-on 會被 Wyoming Protocol 整合自動探索到,各按一次 新增(Add) 就好。如果沒自動跳出來,可以手動 新增整合 → 搜尋 Wyoming Protocol。

  4. 建立助理

    設定語音助理,按 新增助理(Add assistant)。取一個看得懂的名字(例如「家裡本地版」),選語言。

  5. 把四段零件裝上去

    在同一個畫面裡:對話代理Home Assistant語音轉文字 選你剛加的 Whisper 並挑語言;文字轉語音 選 Piper 並挑語音變體。喚醒詞那一欄如果你還沒有實體語音裝置,可以先留著不管。

  6. 公開實體

    切到 公開 分頁,照上一節把你要控制的燈、插座、風扇加進去。沒做這步的話,接下來一定叫不動。

  7. 用手機測試

    打開 Companion App(第 7 章裝好的那個),右上角三點選單 → Assist。先打字測,能打字關燈之後再按麥克風講話測。

  8. 設成預設助理

    一切都通了之後,回到 設定語音助理,把這個助理設成預設。之後所有 Assist 入口都會走它。

注意:如果 設定語音助理 裡完全看不到 Assist 區塊,官方的解法是在 configuration.yaml 裡加上一行 assist_pipeline: 再重啟。一般用 default_config: 的安裝不會遇到這個問題。

雲端方案:Home Assistant Cloud 幫你做掉什麼

Home Assistant Cloud(背後的公司叫 Nabu Casa)是官方訂閱服務,錢會直接回到 Home Assistant 開發上。它跟語音有關的部分是兩件事:雲端語音轉文字雲端文字轉語音

項目內容
價格美國區 6.50 美元/月,或 65 美元/年;歐盟區 7.50 歐元/月,或 75 歐元/年。台灣的實際扣款金額看你信用卡走哪個區。
試用官方標示 31 天試用
語音轉文字官方支援清單裡有 Chinese (Taiwan) – zh-TW,另外也有 zh-CN、zh-HK 與粵語(yue-CN)
文字轉語音官方清單列出一百多個語言/口音變體,同樣包含 zh-TW,而且一種語言常常有好幾個聲音可挑
其他順便給的遠端安全連線、雲端備份、Google Assistant 與 Alexa 串接等
提示:對講中文的家庭,這是這一章 CP 值最高的一個決定。本地的 Speech-to-Phrase 目前語言清單裡沒有中文;本地 Whisper 中文可以跑但要夠力的 CPU 才不卡。如果你只有一台樹莓派,訂閱 Cloud 把 STT 跟 TTS 丟出去、對話代理留在本地,體感差異非常大。

設定方式很無腦:訂閱並登入之後,Home Assistant 會依你的地區語言自動建立一個助理。你只要到 設定語音助理 選那個 Home Assistant Cloud 助理,確認語音轉文字、文字轉語音的語言,對話代理保持 Home Assistant,就可以用了。

觀念:Cloud 的語音處理是「經過但不留存」。官方的說法是音訊一轉成文字就刪掉,語音資料也不會拿去訓練模型。但這仍然是「你的聲音離開了家裡」,跟全本地方案本質不同,自己權衡。另外,官方文件目前沒有寫任何用量上限或配額,所以也別聽人家說「無限用」——沒寫就是沒寫,不要當保證。

接上 LLM:把腦袋換成大型語言模型

內建代理只認句型。當你想要「今天有點冷,幫我處理一下」這種模糊講法也叫得動裝置,或想要它回話有個性,就該把對話代理換成 LLM。

有哪些官方整合

整合名稱你需要什麼特點
OpenAI ConversationOpenAI API 金鑰官方文件目前標示的預設模型是 gpt-4o-mini(下拉選單裡通常還有更新的模型可挑,模型清單變動很快,以你畫面上看到的為準)。這個整合會分出四種子項目(subentry):對話(Conversation)、AI Task、語音轉文字、文字轉語音。
Google Generative AIGoogle AI Studio 的 API 金鑰(有免費額度,但有速率限制,而且要在支援地區)同時提供對話代理、語音轉文字、文字轉語音三種實體。有「建議設定(Recommended settings)」開關,懶得調參數就開著。
AnthropicAnthropic Console 的 API 金鑰(需先開通付費)選項比較細:快取策略、思考預算、程式碼執行、網路搜尋等都可以開關。
Ollama一台自己跑 Ollama 的機器完全本地、不用付 token 錢。但控制功能官方標為實驗性,而且只有支援 Tools 的模型才能控制 Home Assistant。

設定流程

  1. 加整合

    設定裝置與服務新增整合,搜尋你要的那一家(OpenAI、Google Generative AI、Anthropic、Ollama),照畫面填 API 金鑰或本地網址。

  2. 建一個新的助理

    設定語音助理新增助理。取名字,然後在對話代理那一欄選剛剛加進來的那個 LLM。

  3. 調它的個性

    在代理名稱旁邊的齒輪進去,會有一個提示範本(prompt template)欄位。你可以寫「你是一個講話很簡短的管家,回答不超過兩句話」,也可以寫「你是超級瑪利歐,講話要好笑」。這欄支援 Home Assistant 的範本語法,所以可以塞進即時資訊。

  4. 打開控制權限

    同一個設定畫面裡找 控制 Home Assistant(Control Home Assistant)。這個一定要開,否則它只會跟你聊天,不會關燈。詳見下一節。

  5. 先用打字測

    在代理的選單裡選「開始對話」,用打字測到穩定了,再把語音轉文字、文字轉語音掛上去。這樣出問題時你知道是哪一段爛掉。

注意:語音轉文字跟文字轉語音是獨立於對話代理設定的。換成 LLM 對話代理不會自動讓它會聽會講,那兩段還是要各自選引擎。

讓 LLM 真的叫得動你家的燈

很多人接完 LLM 之後發現:它很會聊天,但叫它關燈它就開始瞎掰「好的,我已經幫你關閉客廳燈了」——然後燈還亮著。原因幾乎都是下面這三件事其中之一。

第一:控制開關沒打開

OpenAI、Google Generative AI、Anthropic 這三個整合,設定裡都有一個 控制 Home Assistant(Control Home Assistant) 的選項。打開之後,模型才會拿到 Home Assistant 的 Assist API 當工具(Tool)用。沒開就是純聊天機器人。

版本比較舊的話,同一個位置可能不是開關,而是一個下拉選單,選項寫著「無控制(No control)」跟「Assist」——選 Assist 就是把控制權打開,意思一樣。

第二:實體沒公開

這是最常見的。官方文件對這三家整合的說法都一樣:模型只能控制或查詢「已公開」的實體。開了控制權限但沒公開任何實體,等於給它一台沒有按鈕的遙控器。回到前面的「公開實體」那節做完。

第三:模型太小

如果你用的是 Ollama 跑本地小模型,官方文件講得很老實:小模型比大模型更容易出錯,而且開啟控制功能後,小模型可能無法穩定維持對話。官方甚至建議一個變通做法:開兩個 Ollama 設定,一個不開控制專門聊天,另一個開控制專門操作裝置。

觀念:「控制 Home Assistant」和「公開實體」是兩道獨立的閘門,要同時打開才會通。這種雙重確認是刻意的:你不會希望一個雲端模型某天心血來潮把你家全部電器打開。

省錢又保險的組合技:優先本地處理

在助理的三點選單裡有一個 優先在本地處理指令(Prefer handling commands locally) 的開關。打開之後,Home Assistant 會先讓內建的句型比對器試試看,比對得到就直接執行,比對不到才丟給 LLM。

這一招同時解決三個問題:

  • :「開客廳燈」這種簡單指令走本地,幾乎零延遲。
  • :日常八成的指令根本不會呼叫 API,不燒 token。
  • :關燈這種事交給不會亂想的比對器,比交給模型可靠。
提示:幾乎所有情況下這個開關都該打開。除非你就是想要 LLM 完整接管所有語意理解(例如你在做多語言家庭,或你的講法很少符合內建句型)。

讓 LLM 使用你的腳本

你在第 10 章寫的腳本(Script),也可以被公開給語音助理。這其實是「教 LLM 新技能」最乾淨的方式:把一串複雜動作包成腳本、取一個講人話的名字、公開出去,模型就會在適當時機呼叫它。比起讓模型自己拼湊十個動作,這樣穩定太多。

Model Context Protocol(MCP)現在是什麼狀況

MCP 是一套讓大型語言模型跟外部工具溝通的開放協定。Home Assistant 官方在部落格裡把它形容成「一層很薄的東西,讓 LLM 可以接上任何東西」。目前 Home Assistant 在 MCP 這件事上有兩個方向、兩個不同的整合,非常容易搞混,我們拆開講。

MCP Server(伺服器)MCP(用戶端)
方向外面的 AI 來控制你家你家的對話代理去用外面的工具
整合名稱Model Context Protocol ServerModel Context Protocol
典型情境用 Claude 或 ChatGPT 這類外部 App,直接叫它幫你關家裡的燈讓你家的 Assist 對話代理多出「記憶」、「網路搜尋」之類本來沒有的能力
怎麼設定設定 → 裝置與服務 → 新增整合 → Model Context Protocol Server,設定過程會問你要不要允許用戶端控制 Home Assistant設定 → 裝置與服務 → 新增整合 → Model Context Protocol,填 SSE 伺服器網址,需要驗證的話再填 OAuth 用戶端 ID 與密鑰
端點/驗證對外開在 /api/mcp(要指定某一組 LLM API 的話是 /api/mcp/<api_id>,內建那組就是 /api/mcp/assist);驗證支援 OAuth(用 IndieAuth,用戶端 ID 就是那個 App 的網址,例如 https://claude.ai,Client Secret 用不到、隨便填或留空都行),不支援 OAuth 的用戶端則用長期存取權杖目前只支援 MCP 的 Tools,還不支援 prompts、resources、sampling、notifications

用戶端那個整合是在 2025.2 版加入的。設定完之後,它抓到的工具會像 Home Assistant 原生的 Assist API 一樣被丟給對話代理用——不過你還要另外去對話代理的設定裡把這些工具啟用。

危險:MCP Server 那一邊等於把「控制你家」這件事開放給一個外部服務。要用的話,務必:只公開你真的需要的實體、優先用 OAuth 而不是到處貼長期權杖、而且絕對不要把 /api/mcp 隨便暴露在沒有防護的公開網際網路上。遠端存取的做法請回附錄 A
注意:MCP 這塊變動非常快,各家 AI App 的支援程度也一直在改。上面寫的是官方文件目前的說法,你實際操作時如果畫面對不起來,以你版本的畫面與官方整合頁為準。

把外部 AI 網頁掛進側邊欄

有時候你根本不需要串 API,只是想在 Home Assistant 的側邊欄按一下就跳到某個 AI 網頁,不用另外開分頁。這在平板掛牆上的情境特別有用。

注意:舊教學裡常見的 panel_iframe: YAML 設定已經被「網頁(Webpage)」儀表板取代了。官方寫得很清楚:舊的 iFrame panel 設定會在升級時自動遷移成新的網頁儀表板,你不用手動改,但新設定不要再抄 panel_iframe,網路上教你貼那段 YAML 的文章都可以直接關掉。
  1. 進儀表板設定

    設定儀表板(Dashboards)

  2. 新增儀表板

    新增儀表板(Add dashboard),在類型清單裡挑 網頁(Webpage)

  3. 填名字、圖示、網址

    取一個側邊欄上看得懂的名字,選一個圖示,填入你要嵌入的網址。

  4. 決定誰看得到

    可以設定只有管理員看得到、以及要不要顯示在側邊欄。家裡有小朋友的話這格很有用。

  5. 按建立,然後測試

    回到主畫面,側邊欄應該多一個項目,點下去就是那個網頁。

注意:不是每個網頁都嵌得進去。很多網站(包括不少 AI 服務)會用瀏覽器的安全標頭明確禁止被別人 iframe,結果就是你看到一片空白。這不是你設定錯,是對方擋的,沒有解。另外,如果你的 Home Assistant 是 HTTPS,嵌入的網頁也必須是 HTTPS,不然瀏覽器會擋掉。

如果你只是想在某一個檢視裡塞一小塊網頁,而不是整個側邊欄項目,那用網頁卡片(Webpage card)就好,加卡片的方式跟第 6 章一樣。

要對著什麼講話:語音硬體

流水線設好了,但你總得有個東西聽你講。從最便宜到最爽,選項大概是這樣。

方案成本喚醒詞適合場景
Companion App(Android)免費支援,可選 Hey Nabu/Hey Jarvis/Hey Mycroft隨身、外出、測試流水線
Companion App(iPhone/iPad)免費沒有內建喚醒詞;靠捷徑(Shortcuts)觸發,或用「語音控制」硬湊一個隨身,但多半要動手按
舊平板掛牆手邊有就免費看瀏覽器與 App 支援玄關、廚房固定點
ESPHome 自製語音裝置低(ESP32-S3 開發板等級)可用裝置端的 microWakeWord想自己焊、想塞進特定角落
Home Assistant Voice Preview Edition官方建議售價 69 美元/59 歐元Okay Nabu/Hey Jarvis/Hey Mycroft,用 microWakeWord 在裝置上跑想要一台放著就好、不折騰

Android 上怎麼叫出 Assist

  • App 裡右上角三點選單 → Assist
  • 設成系統預設的數位助理之後,就能用手勢叫出來(從左下角往上滑、長按電源鍵,看你手機)。設成預設後也能從鎖定畫面啟動。
  • 加桌面小工具:長按桌面 → 小工具 → Home Assistant → 拖出 Assist。
  • 喚醒詞設定在 App 的 設定Companion appAssist for Android

iPhone 上怎麼叫出 Assist

  • App 裡右上角三點選單 → Assist
  • 用 iOS 的「捷徑」App 建一個 Assist 捷徑,然後綁到你喜歡的觸發方式:背面輕點兩下、長按動作按鈕、控制中心、鎖定畫面小工具。
  • 想要不動手:iOS 的語音控制(Voice Control)這個輔助使用功能可以自訂一句話(例如「Okay Nabu」)去觸發那個捷徑,算是 iPhone 上最接近喚醒詞的做法。官方也直說了,這條路比按按鈕或叫 Siri 慢,而且語音控制開著會一直在聽,自己斟酌。
  • 注意:透過 Siri 觸發的捷徑,語言會跟著 Siri 的語言走,不是跟著你的流水線設定走。手動觸發的捷徑則可以指定語言——想要中英文各一個,就把捷徑匯入兩次、各設一種語言。

官方硬體:Voice Preview Edition

如果你懶得折騰,這是最省事的一台。裡面是 ESP32-S3(16MB flash、8MB PSRAM)加上 XMOS XU316 音訊晶片,負責回音消除、降噪跟自動增益——講白話就是「電視在放聲音的時候它還聽得到你」。雙麥克風陣列,內建喇叭也有 3.5mm 輸出孔,機身上有實體靜音開關、旋鈕音量、LED 燈環,還有一個 Grove 擴充埠可以接感測器。尺寸 84×84×21mm、96 公克。它不需要 Home Assistant Cloud 也能用,可以全本地跑,只是官方提醒全本地的完整體驗需要比較有力的主機(大約 Intel N100 等級起跳)。

提示:從 2025.10 版開始,每一台 Assist 語音衛星可以設定最多兩組喚醒詞、對應兩條不同的流水線。這超好用:例如「Okay Nabu」走全本地的快速關燈流水線,「Hey Jarvis」走接了 LLM 的雲端流水線。一台機器兩種人格,講哪個名字就走哪條路。多語言家庭也可以一個喚醒詞一種語言。

順便一提:語音衛星可以主動找你講話

語音裝置不只是被動等你喊。assist_satellite 這個領域(Domain)提供三個動作,可以寫進自動化裡:

actions:
  - action: assist_satellite.announce
    target:
      entity_id: assist_satellite.living_room
    data:
      message: 洗衣機洗好了

另外兩個是 assist_satellite.start_conversation(主動開啟一段對話)跟 assist_satellite.ask_question(問你一個問題並拿到你的回答)。第三個特別好玩:可以做出「偵測到有人開門 → 玄關的音箱問『要不要順便開客廳燈?』→ 你說要 → 燈就開」這種互動。

寫這種自動化很容易踩到一個坑:它正在跟人講話的時候,你又叫它播報,兩段話會互相蓋台。從 2026.2 起,自動化的條件(Condition)裡多了一組專門給語音衛星用的條件,可以判斷這台裝置現在是閒置、正在聽、正在處理、還是正在回話。播報前先加一個「閒置才播」的條件,家人講到一半被打斷的情況就沒了。

提示:2025.10 起還多了一個很貼心的行為:當你下的指令就是在這台衛星所在的區域裡執行(例如你在客廳對客廳的音箱說「開燈」),它會用一聲短提示音代替把整句「已為您打開客廳燈」唸出來。省掉的那兩秒,體感差很多。

隱私、成本、延遲:三個東西不可能全拿

這一節沒有標準答案,只有給你做決定的表。

組合隱私金錢成本反應速度聽懂中文的能力
全本地(Whisper + 內建代理 + Piper)最好,聲音不出家門零,但要一台夠力的主機看 CPU,樹莓派上會明顯等Whisper 中文可以,但小模型會聽錯
Cloud 語音 + 內建代理聲音經過 Nabu Casa,官方聲明不儲存不訓練約 6.5 美元/月快,通常一兩秒內好,官方支援 zh-TW
Cloud 語音 + 雲端 LLM 代理聲音跟家中裝置清單都會送給 AI 供應商訂閱費 + 每次對話的 token 費最慢,多一次模型往返最好,模糊講法也能懂
全本地 + Ollama 本地 LLM最好零 token 費,但要顯卡等級的硬體看你的機器,通常偏慢看模型,小模型中文常出包
提示:「接了 LLM 就一定慢」這件事在 2025.10 之後改善很多。以前是模型要把整段回答生完,才開始唸;現在文字轉語音改成邊收邊唸(串流),官方講的改善幅度是「回應開始出聲的時間快了約十倍」。所以如果你上次試 LLM 覺得慢到不能用,值得再試一次。

關於 token 花費,你該知道的心態

雲端 LLM 是按用量計費的,各家的單價一直在變,這裡不寫死數字(寫了很快就過期,去各家官網看最新價目)。但有幾個會讓帳單暴衝的原則是不會變的:

  • 每一句話都會把你公開的實體清單送過去。公開 200 個實體跟公開 20 個,成本差一個數量級。
  • 提示範本寫太長也是每次都在付錢。個性設定寫個三五句就好,不要寫小說。
  • 「優先在本地處理指令」打開,日常關燈開燈根本不會呼叫 API。這是最有效的省錢開關。
  • 設定用量上限再把 API 金鑰貼進去。三家供應商的後台都可以設,去設。
危險:API 金鑰等於你的信用卡。不要把金鑰貼在論壇、截圖、GitHub、或請人幫忙看設定的訊息裡。金鑰不小心外流就立刻去供應商後台撤銷重發,不要心存僥倖。
觀念:延遲是體感的殺手。喊完到燈亮如果超過三秒,家人就不會再用了,你這章白做。如果你只能優化一件事,優化「常用的那五句話」的速度,其他慢一點沒關係。

常見卡關

  1. 叫不動任何裝置,它說「抱歉,我不知道那個」

    九成是實體沒公開。去 設定語音助理公開 分頁確認那個實體在清單裡。第二個可能是你講的名字跟 Home Assistant 裡的名字對不上——它是拿實體的名稱或別名去比對的,差一個字就可能不算數,所以想到什麼講法就加什麼別名。第三個可能是它根本不在你以為的區域裡,回第 3 章檢查。

  2. 不知道問題出在哪一段

    用官方的除錯工具。設定語音助理 → 點你的助理 → 開啟除錯(Debug)對話框,從下拉選單挑你剛剛那一次執行,就能看到每一段各花了多久、辨識出來的文字是什麼。在除錯畫面右上角的圖示裡還可以選 Run text pipeline,直接打一句話跑完整條流水線。

  3. 只想知道句子有沒有被解析,不要真的執行

    用 Assist 的句型測試工具:設定(Settings)工具(Tools)Assist 分頁。它會告訴你這句話被解析成哪個意圖、鎖定了哪些實體,但不會真的動作。改名字、加別名之後拿它來驗收最快。

    找不到「工具」的話看你的版本:2026.2 以前這一組工具叫「開發者工具(Developer tools)」,掛在左側欄最下面;2026.2 起它被搬進設定頁面的最下方,改叫「工具」。電腦上最快的走法是按 Ctrl + K(Mac 是 Cmd + K)打開快速搜尋,直接打「tools」或「開發者」。

  4. 它有反應但沒有聲音

    先檢查 設定系統網路 裡的「本地網路 Home Assistant URL」是不是正確的。朗讀出來的音檔要靠這個網址讓裝置去抓,網址錯了就是有畫面沒聲音。如果你是純手寫 YAML 沒有用 default_config:,還要確認 media_source: 有加。

  5. 名字念不對、或每次都要講很饒舌的全名

    加別名。設定語音助理公開 → 點該實體 → 新增別名。一個實體可以有多個別名,你家每個人講法不一樣就每種都加一個。中文特別容易遇到「口語簡稱」跟「正式名稱」不同的狀況,別名就是解法。

  6. 誤觸發:叫 A 卻開到 B

    這是公開太多 + 名字太像的併發症。處理順序是:先砍掉不需要公開的實體,再把剩下容易搞混的重新命名成「區域 + 描述」的格式。官方最佳實務也提醒,實體的領域(Domain)跟裝置類別(Device class)要設對——你沒辦法叫 Assist「打開」一個被歸類成開關的閥門。

  7. 本地 Whisper 慢到想哭

    三個方向:把 languageauto 改成固定語言(官方說 auto 會慢很多);模型往下調(tiny-int8base-int8 這種 int8 壓縮版);或是把語音轉文字換成 Home Assistant Cloud,把本機留給對話代理。Whisper 的 beam_size 預設是 0,代表在 ARM 機器上自動用 1、其他機器用 5——數字越大越準但越慢。

  8. 喚醒詞常常沒反應,或半夜自己醒來

    先確認你的喚醒詞是跑在裝置上(microWakeWord)還是主機上(openWakeWord)。跑在主機上時,官方提到一台樹莓派 4 大約同時支撐 5 台衛星串流,超過就會開始卡。裝置端的問題則多半是麥克風增益或降噪設定,用 ESPHome 調整那台裝置的設定。

  9. LLM 說它做了但其實沒做

    模型幻覺的經典場景。檢查順序:整合設定裡的 控制 Home Assistant 有沒有開 → 那個實體有沒有公開 → 模型是不是太小(本地小模型開啟控制後可能連對話都撐不住)。改善做法是打開「優先在本地處理指令」,讓確定性高的指令根本不經過模型。

  10. 嵌進側邊欄的網頁是一片空白

    對方網站用安全標頭禁止被 iframe 嵌入,這是它們決定的,你改不了。換一個網站,或改用「在新分頁開啟」的做法。另外檢查 HTTPS/HTTP 有沒有混用。

常見問題

我一定要付錢訂 Home Assistant Cloud 才能用語音嗎?
不用。Assist 本身完全免費內建,本地的 Whisper、Piper、openWakeWord 也都是免費的官方 Add-on。訂閱 Cloud 買的是「不用自己養一台夠力的主機」跟「中文語音辨識與朗讀品質」。如果你的 Home Assistant 跑在樹莓派上又要用中文,訂閱通常比升級硬體划算;如果你有一台閒置的小主機,全本地完全可行。
內建 Assist 跟接 ChatGPT 差在哪?我一定要接 LLM 嗎?
內建 Assist 是句型比對,講對句型就百分之百執行,速度快、免費、離線可用,但完全不會變通也不會聊天。LLM 能懂模糊的講法、能講人話、能連續對話,但每次都要付 token 錢、會慢、偶爾會幻覺(說做了其實沒做)。大部分家庭最實用的答案是兩個都要:接 LLM 當對話代理,同時打開「優先在本地處理指令」,簡單指令走本地,聽不懂的才丟給 LLM。
把 API 金鑰貼進 Home Assistant,我家的資料會被拿去訓練模型嗎?
這要看你用哪一家、以及該家的 API 條款怎麼寫,Home Assistant 管不到這件事,各家政策也會變,請直接去該供應商的資料使用政策看。你能控制的是送出去多少:只公開必要的實體,模型就只會看到那些。門鎖、攝影機、有個資意味的東西不要公開。如果你完全不接受資料離開家裡,那答案是用 Ollama 跑本地模型,或乾脆只用內建代理。
我可以叫語音助理開門鎖或解除保全嗎?
技術上可以(把 lockalarm_control_panel 的實體公開就行),但強烈不建議。語音沒有辦法可靠地分辨是誰在講話,站在門外對著窗戶喊也可能被聽到。如果你真的要做,至少改成用腳本包一層,加上額外的條件(例如某支手機必須在家、某個時間區間內),並且清楚知道自己承擔什麼風險。第 10 章有腳本的寫法。
中文講不太準,有什麼優化順序?
照這個順序調:一、確認語音轉文字引擎的語言設定是中文而不是 auto。二、把裝置名稱改成好念的口語(「客廳燈」比「客廳吸頂燈第一組」好一百倍),並大量加別名。三、如果本地 Whisper 用小模型聽不準,往上調模型或改用 Home Assistant Cloud 的語音轉文字(它的清單裡有 zh-TW)。四、還是不行的話,把對話代理換成 LLM,讓模型去容忍辨識出來的錯字。順帶一提,本地的 Speech-to-Phrase 目前語言清單裡沒有中文,這條路不用試。
Assist 聽不懂我某個特定講法,可以自己教它嗎?
可以,而且有兩條路。不想碰 YAML 的走這條:設定自動化與場景建立自動化,觸發(Trigger)的下拉選單裡選 句子(Sentence),把你想講的那句話填進去,動作那邊接你要做的事。這等於用自動化教它一句新台詞,全程點選就好。想寫設定檔的走這條:configuration.yaml 裡擴充現有意圖:
conversation:
  intents:
    HassTurnOn:
      - "activate [the] {name}"
更完整的做法是在設定資料夾裡開 config/custom_sentences/<語言代碼>/ 目錄(英文就是 config/custom_sentences/en/)放 YAML 檔,可以自己定義意圖、清單、數值範圍,甚至改掉它回你的句子(同目錄放一個 responses.yaml)。改完之後重新啟動一次 Home Assistant 最保險。
一台音箱可以同時服務講中文的我跟講英文的家人嗎?
可以。從 2025.10 版開始,每台 Assist 語音衛星支援最多兩組喚醒詞、各自對應一條流水線。你可以讓「Okay Nabu」走中文流水線、「Hey Jarvis」走英文流水線。同樣的機制也能拿來分「本地快速版」跟「雲端 LLM 版」,看你喊哪個名字決定走哪條路。
MCP 到底要不要碰?
如果你只是想在家裡用語音關燈,完全不用碰,前面的內容就夠了。MCP 適合兩種人:想在 Claude、ChatGPT 這類外部 App 裡直接操作家裡(用 Model Context Protocol Server 整合,端點是 /api/mcp),或是想給家裡的對話代理加上額外工具例如記憶、網路搜尋(用 Model Context Protocol 用戶端整合,2025.2 版加入,目前只支援 Tools)。兩者都牽涉到把控制權交出去,設定前先把「公開實體」的清單縮到最小。
我把外部 AI 網站掛進側邊欄,結果一片空白,是我設錯了嗎?
通常不是。很多網站會用瀏覽器的安全機制明確禁止自己被別人的網頁嵌入,這是對方的決定,你沒辦法繞過。另外也要確認協定一致:Home Assistant 用 HTTPS 的話,嵌入的網址也得是 HTTPS。順帶提醒,舊教學裡的 panel_iframe: YAML 設定已經被「網頁」儀表板取代(升級時會自動遷移),現在請用 設定儀表板新增儀表板網頁
可以在自動化裡「叫 AI 幫我做事」嗎?
可以,而且有兩條路。第一條是 conversation.process 動作,把一段文字丟給指定的對話代理處理,等於用程式的方式跟 Assist 講話。第二條是 AI Task(2025.7 版加入的建構區塊整合),提供 ai_task.generate_dataai_task.generate_image 兩個動作,專門用來在自動化裡產生文字、結構化資料或圖片,例如「看一眼攝影機畫面,數一下車道上有幾台車」。這比自己拼一大堆範本乾淨很多。