人智能管家:從自動(dòng)化場(chǎng)景到進(jìn)階集成)
1. 從科幻到現(xiàn)實(shí)為什么我們需要一個(gè)“Jarvis”如果你和我一樣是個(gè)科幻迷或者至少看過幾部《鋼鐵俠》那你一定對(duì)托尼·斯塔克那個(gè)無所不能的AI管家“Jarvis”印象深刻。它不僅能控制整個(gè)斯塔克大廈的燈光、溫度、安防還能分析數(shù)據(jù)、制定戰(zhàn)術(shù)、甚至和托尼斗嘴。很長(zhǎng)一段時(shí)間里我們都覺得這只是電影里的幻想。但今天我想和你聊聊如何利用我們手邊幾乎人人都有的工具——Google Assistant來搭建一個(gè)屬于你自己的、觸手可及的“Jarvis”雛形。這聽起來可能有點(diǎn)夸張但核心邏輯是相通的一個(gè)集中式的、能理解自然語言、并能聯(lián)動(dòng)你生活中各種設(shè)備和服務(wù)的智能中樞。我們不再需要電影里那種強(qiáng)人工智能而是通過巧妙的“連接”與“自動(dòng)化”讓現(xiàn)有的智能服務(wù)為我們協(xié)同工作。Google Assistant本身已經(jīng)是一個(gè)強(qiáng)大的語音助手但它更像一個(gè)“應(yīng)答機(jī)”——你問它答或者執(zhí)行一個(gè)單一指令。而“Jarvis”的構(gòu)想是讓它變得更主動(dòng)、更集成、更個(gè)性化成為你數(shù)字生活的“操作系統(tǒng)”。那么誰需要這樣一個(gè)系統(tǒng)如果你已經(jīng)擁有多個(gè)智能家居設(shè)備燈泡、插座、音箱經(jīng)常使用日歷、待辦事項(xiàng)、郵件等服務(wù)并且厭倦了在不同App間切換或者希望一些重復(fù)性任務(wù)能自動(dòng)完成那么這個(gè)項(xiàng)目就非常適合你。它不需要你成為編程專家但需要你有一點(diǎn)折騰的耐心和對(duì)效率提升的渴望。本質(zhì)上我們是在用現(xiàn)有的“樂高積木”各種云服務(wù)和API搭建一個(gè)更符合自己習(xí)慣的“城堡”。2. 構(gòu)建你的數(shù)字中樞核心組件與工作原理拆解在開始動(dòng)手之前我們必須先理清思路一個(gè)能被稱為“Jarvis”的系統(tǒng)應(yīng)該由哪些部分組成它們是如何協(xié)同工作的理解了這些后續(xù)的配置才不會(huì)變成盲目的操作。2.1 大腦Google Assistant 與 Google Home 生態(tài)Google Assistant 是我們整個(gè)系統(tǒng)的“交互界面”和“指令接收器”。它負(fù)責(zé)聽懂你的話語音或文字并將其解析成結(jié)構(gòu)化的“意圖”。例如當(dāng)你說“Hey Google我回家了”它會(huì)識(shí)別出這是一個(gè)觸發(fā)“回家”場(chǎng)景的指令。但Assistant本身的能力是有限的它主要擅長(zhǎng)回答知識(shí)性問題、設(shè)置鬧鐘、播放音樂等。它的真正威力在于其開放的生態(tài)——Actions和Home Graph。Google Assistant Actions你可以把它理解為給Assistant安裝的“技能”或“小程序”。通過Actions我們可以讓Assistant與第三方服務(wù)如IFTTT、Zapier甚至是你自己寫的服務(wù)器進(jìn)行對(duì)話。這是我們擴(kuò)展Jarvis能力的關(guān)鍵橋梁。Google Home App 與 Home Graph這是你所有智能家居設(shè)備的“管理中心”和“關(guān)系數(shù)據(jù)庫”。在這里你可以將不同品牌的燈泡、插座、攝像頭等設(shè)備添加進(jìn)來并給它們分配房間。更重要的是Home Graph記錄了設(shè)備之間的關(guān)系比如“客廳的燈”讓Assistant能夠準(zhǔn)確控制特定設(shè)備。所以Google Assistant 是這個(gè)系統(tǒng)的大腦皮層負(fù)責(zé)理解和發(fā)出指令而 Actions 和 Home Graph 是神經(jīng)纖維和基底核負(fù)責(zé)連接和調(diào)度具體的執(zhí)行單元。2.2 神經(jīng)與肌肉自動(dòng)化平臺(tái)IFTTT/Zapier與智能設(shè)備大腦發(fā)出了指令需要神經(jīng)和肌肉去執(zhí)行。在數(shù)字世界里自動(dòng)化平臺(tái)就是我們的“神經(jīng)”。IFTTT它的理念是“If This Then That”如果這樣那么就那樣。它連接了海量的互聯(lián)網(wǎng)服務(wù)包括Google Assistant。你可以創(chuàng)建一些非常直觀的自動(dòng)化流程。例如“如果我對(duì)Google Assistant說‘晚安’那么就關(guān)閉所有燈并將恒溫器調(diào)到睡眠模式?!盳apier功能與IFTTT類似但更偏向于企業(yè)級(jí)和復(fù)雜的多步工作流。它支持的應(yīng)用程序更多邏輯也更靈活。對(duì)于更高級(jí)的Jarvis場(chǎng)景Zapier可能是更好的選擇。這些自動(dòng)化平臺(tái)接收來自Google Assistant的觸發(fā)指令然后去操作對(duì)應(yīng)的“肌肉”——也就是各種智能設(shè)備和服務(wù)。智能家居設(shè)備Philips Hue燈泡、TP-Link Kasa智能插座、Nest恒溫器等。它們是物理世界的執(zhí)行者。云服務(wù)Google日歷、Gmail、Todoist、Spotify等。它們是數(shù)字世界的執(zhí)行者。通過自動(dòng)化平臺(tái)Jarvis可以幫你添加日歷事件、發(fā)送特定郵件、管理待辦清單、播放符合你心情的歌單。2.3 記憶與邏輯自定義服務(wù)器可選進(jìn)階方案如果你不滿足于IFTTT/Zapier提供的預(yù)制化流程想要更復(fù)雜的邏輯判斷、數(shù)據(jù)存儲(chǔ)或私有化控制那么就需要引入一個(gè)自定義服務(wù)器。這相當(dāng)于給Jarvis加裝了一個(gè)“海馬體”和“前額葉”。例如你可以用Python的Flask框架寫一個(gè)簡(jiǎn)單的Web服務(wù)部署在Raspberry Pi或云服務(wù)器上。這個(gè)服務(wù)可以通過Google Assistant的Actions SDK接收指令。查詢本地?cái)?shù)據(jù)庫比如記錄你每天回家時(shí)間的歷史數(shù)據(jù)。根據(jù)復(fù)雜的邏輯判斷比如“如果今天是工作日且晚于晚上8點(diǎn)則播放舒緩音樂如果是周末則播放派對(duì)音樂”來決策。通過設(shè)備廠商提供的API如Hue API或再次調(diào)用IFTTT/Zapier的Webhook來執(zhí)行最終操作。這個(gè)方案門檻較高但提供了幾乎無限的自定義能力是打造真正個(gè)性化Jarvis的終極路徑。3. 實(shí)戰(zhàn)第一步基礎(chǔ)環(huán)境搭建與場(chǎng)景自動(dòng)化理論講完我們開始動(dòng)手。我們從最簡(jiǎn)單、最實(shí)用的場(chǎng)景開始創(chuàng)建一個(gè)“早安”和“晚安”的自動(dòng)化場(chǎng)景。這不需要編程只需要用到Google Home和IFTTT。3.1 準(zhǔn)備工作設(shè)備與賬戶硬件一部安裝了Google Home App的智能手機(jī)Android或iOS一個(gè)Google Nest Speaker或任何內(nèi)置Google Assistant的智能音箱/顯示器作為常設(shè)的語音接收點(diǎn)。至少一個(gè)智能設(shè)備比如一個(gè)智能燈泡或插座。軟件與服務(wù)確保你的Google賬戶正常。在手機(jī)上下載并登錄Google Home App。注冊(cè)并登錄IFTTT賬戶。將你的智能設(shè)備如Philips Hue燈泡按照廠商說明成功添加到Google Home App中。你可以在Home App的“設(shè)備”標(biāo)簽頁中看到它并能用語音控制它開關(guān)。3.2 創(chuàng)建你的第一個(gè)“場(chǎng)景”IFTTT Applet 配置場(chǎng)景Routine在Google Home里也可以創(chuàng)建但功能相對(duì)基礎(chǔ)。我們利用IFTTT來實(shí)現(xiàn)更強(qiáng)大的聯(lián)動(dòng)。目標(biāo)當(dāng)我說“Hey Google早安”時(shí)自動(dòng)執(zhí)行1) 臥室燈光緩慢亮起到70%亮度模擬日出2) 播報(bào)今天的天氣和日歷上的第一個(gè)事件3) 打開咖啡機(jī)如果連接了智能插座。步驟登錄IFTTT點(diǎn)擊右上角你的頭像選擇“Create”。點(diǎn)擊“If This”在搜索框中輸入“Google Assistant”并選擇它。你會(huì)看到幾個(gè)觸發(fā)條件我們選擇“Say a simple phrase”。配置觸發(fā)短語What do you want to say?填入早安Whats another way to say it? (optional)可以增加同義句如早上好、新的一天What do you want the Assistant to say in response?填入正在啟動(dòng)早安模式主人。這是Jarvis的回應(yīng)可以增加個(gè)性。語言選擇中文如果你常用中文。點(diǎn)擊“Then That”現(xiàn)在添加一系列動(dòng)作。注意一個(gè)Applet只能有一個(gè)“That”動(dòng)作但I(xiàn)FTTT提供了“Multi-Action Applet”的選項(xiàng)可能需要升級(jí)到Pro版。對(duì)于免費(fèi)用戶我們可以創(chuàng)建多個(gè)串聯(lián)的Applet或者先實(shí)現(xiàn)一個(gè)核心功能。這里我們先實(shí)現(xiàn)開燈。搜索并選擇“Philips Hue”前提是你已將在IFTTT中連接了Hue賬戶。選擇動(dòng)作“Turn on lights”然后選擇你臥室的燈并可以設(shè)置亮度、顏色等。這里設(shè)置亮度為70%顏色為暖黃色。創(chuàng)建第二個(gè)Applet將“If This”同樣設(shè)置為“Google Assistant”說“早安”但“Then That”選擇“Weather Underground”或任何IFTTT支持的天氣服務(wù)的“Get current condition”然后再添加一個(gè)“Google Assistant”的“Say a phrase with a text ingredient”動(dòng)作將天氣信息說出來。關(guān)于咖啡機(jī)如果你的咖啡機(jī)接在智能插座上可以再創(chuàng)建第三個(gè)Applet觸發(fā)條件相同“Then That”選擇對(duì)應(yīng)智能插座品牌的動(dòng)作“Turn on”。注意免費(fèi)版IFTTT對(duì)Applet的觸發(fā)速度有時(shí)會(huì)有延遲可能幾秒到十幾秒并且多個(gè)Applet的執(zhí)行可能是并發(fā)的沒有嚴(yán)格順序。對(duì)于“早安”這種場(chǎng)景輕微的延遲和亂序是可以接受的。如果要求瞬時(shí)精確同步就需要考慮Zapier或自定義服務(wù)器方案。通過以上步驟你就擁有了一個(gè)最簡(jiǎn)單的多任務(wù)聯(lián)動(dòng)場(chǎng)景。雖然用了三個(gè)Applet但對(duì)你來說只需要說一句“早安”剩下的就交給Jarvis去調(diào)度了。4. 進(jìn)階集成連接日歷、郵件與通訊工具一個(gè)合格的管家應(yīng)該能幫你處理信息。讓Jarvis接入你的日歷和通訊工具可以極大地提升效率。4.1 語音管理Google日歷我們可以創(chuàng)建一個(gè)場(chǎng)景當(dāng)你晚上說“Hey Google準(zhǔn)備明天的工作”時(shí)Jarvis為你播報(bào)明天所有的會(huì)議安排。在Google Home App內(nèi)部就可以創(chuàng)建這個(gè)場(chǎng)景Routine。打開Google Home App - 右下角“設(shè)置” - 選擇“Assistant”選項(xiàng)卡 - 選擇“Routines”。點(diǎn)擊“”號(hào)新建。添加啟動(dòng)命令例如“準(zhǔn)備明天的工作”。添加操作首先“添加動(dòng)作” - “瀏覽熱門動(dòng)作” - 找到并選擇“Communicate and announce” - “Tell about your day”。這個(gè)內(nèi)置動(dòng)作會(huì)播報(bào)天氣、通勤、日歷事件等。但我們可以更定制化。選擇“添加動(dòng)作” - “嘗試添加自己的動(dòng)作”。在文本框中輸入指令告訴我明天有什么日程。Assistant會(huì)解析這個(gè)自然語言指令并執(zhí)行。你還可以在后面繼續(xù)添加動(dòng)作比如“添加動(dòng)作” - “播放媒體” - 選擇某個(gè)舒緩的播放列表讓你在聽日程的同時(shí)放松下來。這個(gè)場(chǎng)景的優(yōu)勢(shì)是全部在Google生態(tài)內(nèi)完成響應(yīng)速度極快。4.2 通過郵件或通訊軟件接收摘要如果你更喜歡視覺化的信息或者想在上班前通過手機(jī)查看可以讓Jarvis把摘要發(fā)送到你的郵箱或Telegram/ Slack。這里我們需要用回IFTTT或Zapier。方案每天上午8點(diǎn)自動(dòng)將今日日歷摘要發(fā)送到Telegram。在Zapier中創(chuàng)建一個(gè)ZapZapier的工作流稱為Zap。Trigger觸發(fā)選擇“Schedule by Zapier”設(shè)置為“Every Day” at 8:00 AM。Action動(dòng)作選擇“Google Calendar”動(dòng)作選擇“Find Events”。設(shè)置搜索條件時(shí)間從“今天”到“今天”日歷選擇你的主日歷。添加一個(gè)格式化步驟Formatter by Zapier將找到的日歷事件列表格式化成一段清晰的文本。例如使用“Line-Item to Text”模塊將每個(gè)事件的“開始時(shí)間”和“摘要”拼接起來。最終動(dòng)作選擇“Telegram”動(dòng)作選擇“Send Message”。將格式化好的文本填入消息內(nèi)容指定發(fā)送給你的私人聊天或某個(gè)群組。這樣一來每天早晨你的Telegram都會(huì)準(zhǔn)時(shí)收到一份今日日程清單。你可以把這個(gè)思路擴(kuò)展到任何你需要的摘要上比如未讀重要郵件的標(biāo)題、待辦事項(xiàng)列表等。關(guān)鍵在于找到支持這些服務(wù)的自動(dòng)化平臺(tái)Zapier支持的應(yīng)用遠(yuǎn)超IFTTT并將它們串聯(lián)起來。5. 個(gè)性化與主動(dòng)智能實(shí)現(xiàn)條件觸發(fā)與自定義響應(yīng)基礎(chǔ)的自動(dòng)化是被動(dòng)的需要你發(fā)出指令。一個(gè)更像Jarvis的管家應(yīng)該具備一定的“主動(dòng)”能力即在特定條件滿足時(shí)自動(dòng)運(yùn)行并且回應(yīng)更具個(gè)性。5.1 基于位置或時(shí)間的自動(dòng)觸發(fā)“地理圍欄”是一個(gè)經(jīng)典的主動(dòng)觸發(fā)場(chǎng)景。當(dāng)你手機(jī)GPS判斷你離家還有5分鐘路程時(shí)自動(dòng)打開空調(diào)和客廳燈。使用 IFTTT 的 “Location” 觸發(fā)器創(chuàng)建新Applet“If This”選擇“Location” - “You enter an area”。在地圖上圈定你家范圍?!癟hen That”選擇智能家居設(shè)備操作如打開空調(diào)通過對(duì)應(yīng)的智能家居服務(wù)、打開客廳燈。痛點(diǎn)與解決方案痛點(diǎn)一誤觸發(fā)。如果你只是路過家附近也可能觸發(fā)。解決方案是合理設(shè)置地理圍欄區(qū)域大小并結(jié)合時(shí)間條件例如只在傍晚6點(diǎn)后觸發(fā)。痛點(diǎn)二耗電。手機(jī)持續(xù)進(jìn)行位置檢測(cè)會(huì)消耗電量。這是功能與功耗的權(quán)衡。更優(yōu)方案一些高級(jí)的智能家居平臺(tái)如Home Assistant可以與手機(jī)上的定位App如OwnTracks更精確地聯(lián)動(dòng)但配置更復(fù)雜。5.2 利用 Webhooks 和自定義服務(wù)器實(shí)現(xiàn)復(fù)雜邏輯這是通往“真·Jarvis”的道路。假設(shè)你想實(shí)現(xiàn)“如果明天上午9點(diǎn)有會(huì)議且天氣為雨天則在今晚睡前提醒我明天帶傘?!边@個(gè)邏輯涉及日歷事件查詢、天氣數(shù)據(jù)獲取、條件判斷和定時(shí)提醒IFTTT/Zapier的簡(jiǎn)單組合可能難以一步到位。這時(shí)就需要一個(gè)自定義服務(wù)器作為中樞。簡(jiǎn)化版實(shí)現(xiàn)思路以Python Flask為例服務(wù)器端部署在云服務(wù)器或樹莓派上編寫一個(gè)接口例如/check_tomorrow_meeting。在這個(gè)接口的函數(shù)中 a. 調(diào)用Google Calendar API查詢明天9點(diǎn)左右的會(huì)議。 b. 調(diào)用天氣API如OpenWeatherMap查詢明天的天氣狀況。 c. 進(jìn)行邏輯判斷if 有會(huì)議 and “rain” in 天氣描述:。 d. 如果條件滿足調(diào)用IFTTT 的 Webhook或 Telegram/Bark 等推送服務(wù)的API發(fā)送一條提醒到你的手機(jī)“主人明天上午有會(huì)議且預(yù)報(bào)有雨記得帶傘哦?!庇|發(fā)機(jī)制方案A定時(shí)觸發(fā)在服務(wù)器上設(shè)置一個(gè)Cron任務(wù)每天晚上10點(diǎn)訪問自己的/check_tomorrow_meeting接口。方案B事件觸發(fā)使用Zapier的“Schedule”觸發(fā)器每天晚10點(diǎn)觸發(fā)其動(dòng)作為“Webhook”去調(diào)用你服務(wù)器的接口地址。這個(gè)方案將復(fù)雜的邏輯處理放在了自己的服務(wù)器上而將簡(jiǎn)單的觸發(fā)和通知交給了成熟平臺(tái)平衡了難度與靈活性。5.3 打造個(gè)性化語音回應(yīng)讓Google Assistant的回應(yīng)更像Jarvis主要是修改Routine或IFTTT Applet中的回應(yīng)文本。在Google Home Routine中添加“添加動(dòng)作” - “嘗試添加自己的動(dòng)作”輸入說 [你想要的回應(yīng)]。例如“說‘隨時(shí)為您效勞先生?!痹贗FTTT的Google Assistant觸發(fā)配置里有一個(gè)字段是“What do you want the Assistant to say in response?”在這里可以精心設(shè)計(jì)回應(yīng)語。實(shí)操心得不要過度設(shè)計(jì)回應(yīng)否則會(huì)顯得冗長(zhǎng)。在確認(rèn)性操作如“燈已打開”后使用簡(jiǎn)短、肯定的回應(yīng)在觸發(fā)一個(gè)復(fù)雜場(chǎng)景時(shí)如“啟動(dòng)早安模式”可以使用一句更有個(gè)性的開場(chǎng)白。關(guān)鍵是保持一致性讓它逐漸形成一種“人設(shè)”。6. 安全、隱私與穩(wěn)定性考量在享受便利的同時(shí)我們必須清醒認(rèn)識(shí)到我們正在搭建一個(gè)能接觸我們?nèi)粘?、家庭設(shè)備甚至地理位置的系統(tǒng)。安全與隱私是重中之重。6.1 權(quán)限管理最小化原則審查每一個(gè)連接在IFTTT、Zapier或Google賬戶中定期檢查已授權(quán)的第三方應(yīng)用和服務(wù)。只保留必要的授權(quán)對(duì)于不再使用的服務(wù)立即移除其訪問權(quán)限。使用專用賬戶可選但推薦考慮為智能家居和自動(dòng)化服務(wù)單獨(dú)創(chuàng)建一個(gè)Google賬戶而不是使用你的主個(gè)人或工作賬戶。這可以隔離風(fēng)險(xiǎn)。關(guān)注API密鑰如果你使用了自定義服務(wù)器并調(diào)用各種API如天氣API、日歷API務(wù)必妥善保管API密鑰。不要將它們硬編碼在代碼中或上傳到公開的Git倉庫。使用環(huán)境變量或配置文件來管理并設(shè)置訪問頻率限制。6.2 網(wǎng)絡(luò)與設(shè)備安全智能設(shè)備安全立即更改所有智能設(shè)備路由器、攝像頭、燈泡等的默認(rèn)密碼。確保家中的Wi-Fi網(wǎng)絡(luò)使用強(qiáng)密碼WPA2/WPA3加密。有條件的話可以為IoT設(shè)備設(shè)置獨(dú)立的訪客網(wǎng)絡(luò)或VLAN將其與你的主設(shè)備手機(jī)、電腦隔離防止一個(gè)設(shè)備被攻破后波及全部。服務(wù)器安全如果你的Jarvis涉及自定義服務(wù)器即使是部署在樹莓派上也要更改默認(rèn)SSH端口禁用root密碼登錄使用密鑰認(rèn)證。保持系統(tǒng)與所用軟件如Python、Flask的更新。如果提供Web服務(wù)務(wù)必使用HTTPS可以通過Let‘s Encrypt申請(qǐng)免費(fèi)證書。6.3 穩(wěn)定性與故障排查分布式系統(tǒng)必然面臨穩(wěn)定性挑戰(zhàn)。你的Jarvis可能因?yàn)榫W(wǎng)絡(luò)波動(dòng)、服務(wù)商API故障或Applet執(zhí)行順序問題而“失靈”。建立降級(jí)方案最重要的設(shè)備如門鎖、安防攝像頭必須保留物理開關(guān)或本地聯(lián)動(dòng)方案不能完全依賴云端自動(dòng)化。例如智能門鎖一定要有物理鑰匙備份。關(guān)鍵場(chǎng)景冗余對(duì)于“回家開燈”這種核心場(chǎng)景可以同時(shí)設(shè)置基于地理圍欄和基于時(shí)間的觸發(fā)如下班時(shí)間后如果檢測(cè)到家門打開也執(zhí)行開燈提高可靠性。日志記錄自定義服務(wù)器方案的最大優(yōu)勢(shì)之一是你可以記錄詳細(xì)的日志。記錄每一個(gè)觸發(fā)請(qǐng)求、決策邏輯和執(zhí)行結(jié)果。當(dāng)自動(dòng)化失效時(shí)查看日志是定位問題的第一步。對(duì)于IFTTT/Zapier可以檢查其各自的“Activity Log”來查看Applet/Zap是否被觸發(fā)和執(zhí)行。定期測(cè)試不要設(shè)置完就放任不管。每隔幾周測(cè)試一下各個(gè)核心場(chǎng)景是否正常工作。服務(wù)商的API接口可能會(huì)變更你的生活習(xí)慣也可能改變需要適時(shí)調(diào)整自動(dòng)化規(guī)則。構(gòu)建個(gè)人Jarvis的過程是一個(gè)不斷迭代、學(xué)習(xí)和平衡的過程。它不會(huì)一蹴而就也可能永遠(yuǎn)達(dá)不到電影里的水平。但每當(dāng)你完成一個(gè)自動(dòng)化場(chǎng)景并看著它無縫融入你的生活節(jié)省你的時(shí)間和精力時(shí)那種成就感和愉悅感是實(shí)實(shí)在在的。這不僅僅是一個(gè)技術(shù)項(xiàng)目更是一種對(duì)高效、舒適生活方式的主動(dòng)設(shè)計(jì)和塑造。