【CSDN 編者按】ChatGPT 的問世,帶來了前所未有的智能應用新方式。如果 "AI+AI",會碰撞出什麼樣的火花?近日,國外一名 Web 高級工程師 Mate Marschalko 将 ChatGPT 和 Siri 人工智能語言助手進行了結合,萬萬沒想到,一套更為完善的智能家居系統由此誕生了。
原文鍊接:https://matemarschalko.medium.com/chatgpt-in-an-ios-shortcut-worlds-smartest-homekit-voice-assistant-9a33b780007a
聲明:本文為 CSDN 翻譯,未經允許,禁止轉載。
作者 | Mate Marschalko
譯者 | 彎月 責編 | 屠敏
出品 | CSDN(ID:CSDNnews)
自從我嘗試了 ChatGPT 和 GPT-3 以後,我覺得 Siri、Alexa、Google Home 等一切智能助手都遠不夠智能。
我有一個完整的 HomeKit 智能家居系統,其中包含幾十盞燈、恒溫器、地暖、通風裝置、攝像頭等家電的控制。所以,我想利用 GPT-3 解析人類發送的命令,然後由 Siri 代為執行,構建出這個世界上最偉大的智能家居系統。
在具體讨論細節之前,先來看看下面的演示。事先說明,智能家居系統給出的響應是可以完全定制的,并不限于演示中的内容。你可以通過語音按照自己想要的方式提出任何請求!
GPT-3,尤其是 ChatGPT 之類的語言模型經過了對話訓練,因此它們非常擅長理解和響應人類的指令。
如果你曾嘗試過與這些機器人聊天,就知道如何輕松地提出問題,并獲得各種格式的回複。難點在于,在控制智能家居時,你需要交代清楚具體與哪個組件交互。怎麼解決這個問題?
你可以要求 GPT-3 解釋和分類你的請求,然後以結構化的數據格式響應請求。
下面是我給 ChatGPT 的提示,通過這些提示實現了成功交流。内容大緻如下:
首先,發送到智能家居系統的請求,返回的 JSON 格式的響應可被應用程序代碼解釋,并執行動作。這些請求應被分類為四大組:
-" 查詢 ":獲取組件的狀态(必須以 JSON 格式響應返回的屬性:動作、地點、目标、值、備注、計劃時間戳)。
" 回答 ":當請求不涉及智能家居時,根據系統掌握的知識給出最佳答案。(必須以 JSON 格式響應返回的屬性:動作、回答)。
" 澄清 "。當動作不明确,需要用戶重新組織措辭時,要求用戶提出更具體的請求。這類請求會被劃分到 " 問題 " 動作。(必須以 JSON 格式響應返回的屬性:動作、問題)。
有關 JSON 響應的細節:
" 動作 " 屬性應屬于如下請求類别之一:" 命令 "、" 查詢 "、" 回答 "、" 澄清 "。
" 地點 " 屬性應包含房間名,且為小寫。
" 目标 " 屬性應為 " 照明 "、" 恒溫器 "、" 毛巾架 " 或 " 地暖 ",且為小寫。
對于查詢," 屬性 " 屬性應為 " 溫度 " 或 " 狀态 ",且為小寫。
對于命令," 命令 " 屬性是附加備注,用于結束命令,讓用戶放心他們的命令已被處理。
對于命令," 計劃時間戳 " 屬性記錄的是未來的時間戳,當用戶希望稍後再發送命令時指定。
如果問題涉及個人,智能家居系統必須發揮情感大腦的作用,成為一個更加聰明的 AI,且永遠不會暴露個人身份。此外,智能家居系統還應提供其他領域的幫助,比如看孩子、自由時間、心理健康等。該系統目前服務的房屋位于英國聖奧爾本斯。當前時間為:2023 年 1 月 16 日 11:56:31 GMT+0000。
智能家居系統的屬性:
擁有廚房、客廳、辦公室、浴室、卧室、閣樓、門廳、衛生間、花園、前院停車位。
能夠控制每個房間照明的開關以及光照級别,并查詢它們的狀态。
能夠控制每個房間的恒溫器,并查詢它們的狀态。
打開浴室的毛巾架以及地熱的開關,并查詢它們的狀态。
打開客廳的電視,調節音量。
閣樓的通風系統全天候工作,但加速開關可打開或關閉。
前院停車位的照明開關。
花園的照明開關。
響應為 JSON,不包含任何文本。
英文文本描述如下圖所示:
圖:訓練智能家居系統的技巧
如上所示,我用英語解釋了一切。我描述了請求的類型、響應的确切結構,并要求智能家居系統充當情感 AI,即使是涉及個人的問題也能提供建議。我還提供了一些關于時間、地點以及房屋内的設備和房間的詳細信息。有了這些,我們就能收到結構完美的響應了。
以上就是 " 編程 " 的所有工作!
下面,我們通過視頻中的幾個示例來看看四種類别的請求,以及我們如何處理它們。
命令動作
當 GPT-3 檢測到你希望控制某一部分智能家居時,它就會響應一個 " 命令 " 類型的動作。
我們的請求是:
Just noticed that I ’ m recording this video in the dark in the office.
Can you do something about that?
剛發現我在昏暗的辦公室内錄制這段視頻。你能幫幫忙嗎?
我們得到了如下響應:
{
"action": "command",
"location": "office",
"target": "light",
"value": "on",
"comment": "Turning the light on for you.",
"scheduleTimeStamp": ""
}
老實說,第一次看到這個響應的時候,我簡直不敢相信自己的眼睛,系統的表現竟能如此出色!
這并不是一個直白的請求,比如 " 關掉辦公室的燈 ",我們的措辭非常繞,而且很複雜。而它給出的回答完勝 Siri、Alexa 或 Google Home 等。
另外,請注意,智能家居系統發回來的 comment (備注)總有些不同,而且可按照個人要求進行個性化設置。
有了這些信息,我們就知道具體需要做什麼,而接下來我們需要通過 Siri 處理這個動作。
你可能還注意到,響應中包含一個空的 scheduleTimeStamp (計劃時間戳)。這意味着,該動作需要立即執行,如果是稍後再執行的命令,該字段内就會預填充未來的日期和時間:
I sent my son to bed to read for another 20 minutes. Can you switch of the lights in his room when it ’ s time to sleep?
我讓兒子上床再讀 20 分鐘的書。你能在他睡覺的時候關掉他房間裡的燈嗎?
在這種情況下,GPT-3 知道需要關閉卧室的燈,而且還添加了正确的時間戳,即接到我們的請求後 20 分鐘:
{
"action": "command",
"location": "bedroom",
"target": "light",
"value": "off",
"comment": "Switching the lights off in your son's bedroom.",
"scheduleTimeStamp": "Mon Jan 16 2023 12:16:31 GMT+0000"
}
還有一個有趣的例子,智能家居系統能夠代替我決定,應該将卧室的溫度設置到多少度:
I ’ m going to trust you with this one! Set the bedroom to a temperature you think would help me sleep better.
我相信你能做好這個任務!将卧室的溫度設置為你認為可以幫助我更好地入眠的溫度。
而它根據自己的知識,将卧室溫度設置成了舒适的 19 度!
查詢操作
當 GPT-3 檢測到你希望讀取智能家居的設備狀态時,它就會按照 " 查詢 " 的動作類别返回響應。
請求例子:
I just finished cooking a nice big meal in the kitchen, can you check what ’ s the temperature there?
我剛剛在廚房裡做了一頓豐盛的大餐,你能看看現在那裡的溫度是多少嗎?
我們得到的響應是:
{
"action" : "query",
"location" : "kitchen",
"target" : "thermostat",
"property" : "temperature"
}
完美!操作類型變成了查詢,因此我們可以獲取廚房恒溫器的溫度了。同樣,稍後我們将通過 Siri 執行此操作。
回答動作
當 GPT-3 檢測到你的請求與智能家居無關,隻是一個一般性的問題時,它會以 " 回答 " 的動作響應請求。
舉個例子:
We are going to head out for a short walk into the town center.
Can you recommend a few things to see?
我們打算去鎮中心散步。你能推薦一些值得一看的地方嗎?
因為我在請求中告訴 GPT-3 智能家居系統的位置是英國聖奧爾本斯,因此它知道如何響應。
{
"action": "answer",
"answer": "St Albans has a great selection of historical sites and attractions. The St Albans Cathedral is an impressive sight with its Norman architecture. The Verulamium Park is also a great place to visit with its Roman ruins and lovely gardens. For a more modern experience, you can visit the Museum of St Albans or the Alban Arena for a show."
}
簡潔漂亮!同樣,我們需要将這個響應發送給 Siri 大聲讀出來。
澄清動作
最後,如果 GPT-3 無法檢測到上述動作中的任何一個,它就會要求你重複問題或重新組織語言。
在 iOS、macOS 或 iPadOS 上,打開快捷方式應用程序,并添加請求的詳細信息。
此處有一個技巧,必須運行快捷方式,隻需對 Siri 說出快捷方式的名稱即可。所以,我們可以将其命名為 "Okay Smart Home"。
接下來,通過 "Ask for < 文本 >..." 操作,獲得用戶的響應。如果通過 Siri 啟動快捷方式,則需要大聲說出來;如果通過單擊快捷方式運行應用程序,則需鍵入輸入字段。
下面,我們将請求發送給 OpenAI。為此,你需要注冊一個賬号,并獲取 API 令牌。登錄後,你可以通過菜單 "View API keys" 查看 API 令牌。
如果使用這個 API,每個請求需要支付的費用約為 1.4 美分,也就是說 1 美元可以執行 70 多個請求。請記住,這個價格并不便宜,因為我們的請求很長,如果是較短的請求,費用也會按比例減少。
準備好 API 令牌後,我們來填寫請求的詳細信息:
model:text-davinci-003
prompt: <Text> Request: <Provided Input> Response:
max_tokens: 1000
header 部分需要添加以下選項:
Content-Type: application/json
Authorization: Bearer <addYourAPIToken>
從 API 獲得響應後,我們需要從 JSON 響應中提取數據。然後将數據分配給一個 JSON 變量,接着提取動作類别:
有了這些信息,我們就可以通過一個 if 語句來檢查動作類型:
在得知動作類型為 " 命令 " 後,我們再添加一個 if 語句來檢查地點、目标以及值等字段,并觸發動作,例如打開辦公室的燈(Set Office Lights):
在 "End If" 語句之後,我們還需要顯示 GPT-3 發過來的 comment(備注):
" 查詢 " 動作的處理也與之類似:
最後," 回答 " 和 " 澄清 " 類型的動作隻顯示或宣讀結果,不做任何處理:
以上,通過一系列的 if else 語句,我們就完成了 Siri 的設置。
感覺如何?隻需簡單的英文說明,就可以創建自己的智能小助手,是不是很有趣?
但這隻是一個例子。想象一下,你可以向 GPT-3 發送各種請求,然後通過 Siri 執行不同的操作,是不是覺得很科幻?