波士頓動力機器狗裝上ChatGPT大腦當導游,一開口就是老倫敦腔
我們看過機器狗攀爬、跳躍、跑酷、開門,但現在,它竟然開口說話了。
「可以開始我們的旅程了嗎?」Spot 禮貌地發出詢問:「請跟我來,先生們!」
在一段最新發布的視頻里,波士頓動力展示了將機器狗與 LLM 集成的成果:「Spot 先生」戴著高禮帽,留著小胡子,有著大眼睛和英國口音,正帶人參觀公司的設施。
為了讓 Spot 能夠「開口」,波士頓動力公司使用 OpenAI 的 ChatGPT API 以及一些開源 LLM 來訓練,然后為機器人配備了揚聲器,添加了文本到語音轉換的功能。
所以你能看到,在發出聲音的同時,Spot 不停張開「嘴巴」,看起來像是真在說話:
波士頓動力公司首席軟件工程師 Matt Klingensmith 表示,「Spot 先生」使用 VQA 模型來為圖像添加字幕并回答有關圖像的問題。
比如你可以提問:「Hey,Spot!你看到了什么?」
「Spot 先生」快速作答:「我看到了一塊二維碼的板子,還有一扇很大的窗戶?!?/span>
LLM 所謂的「涌現行為」,使其能夠執行既定訓練之外的任務。正因如此,它們可以適用于各種應用。波士頓動力團隊對此的探索是從今年夏天開始的,他們在機器人應用中使用 LLM 制作一些概念驗證演示。
特別是,他們對 Spot 使用 LLM 作為自主工具的演示很感興趣,團隊的靈感來源于 LLM 在角色扮演、復制文化和細微差別、形成計劃和長期保持連貫性方面的明顯能力,以及近期發布的 VQA 模型(這些模型可以為圖像添加標題并回答有關圖像的簡單問題)。
技術細節
接下來,讓我們解密如何使用 Spot 的 SDK 打造這樣一只「機器狗導游」。在最新的官方博客中,波士頓動力對「Spot 先生」背后的技術進行了詳細介紹。
作為導游,Spot 的「四處走動」能力是現成的,Spot SDK 也允許用戶實現對機器狗的自定義。「Spot 先生」會觀察環境中的物體,使用 VQA 或字幕模型對其進行描述,然后使用 LLM 對這些描述進行詳細說明。
團隊在 Spot 收集的三維地圖上標注了簡短的描述,機器人會根據定位系統查找所在位置的描述,并將其與傳感器提供的其他上下文一起輸入 LLM。然后,LLM 將這些內容合成為命令,比如「說」、「問」、「去」或「標簽」等。
下圖是「Spot 先生」導游的建筑環境的三維地圖,為 LLM 標注了位置:1 是演示實驗室 / 陽臺;2 是演示實驗室 / 天橋;3 是博物館 /old-spots;4 是博物館 / 圖集;5 是大廳;6 是外部 / 入口。
此外,LLM 還可以回答參觀者的問題,并計劃機器人下一步應該采取的行動。可以將 LLM 理解為一個即興演員,在有了大致腳本之后,也能夠臨時填補空白。
這種組合的方式充分發揮了 LLM 的優勢,而規避了 LLM 可能帶來的風險:眾所周知,LLM 的幻覺很嚴重,容易添加一些聽起來似是而非的細節,幸好在這類參觀過程中,并不太強調事實準確性。機器狗只需四處走動并談論它所看到的事物,帶來一些娛樂性、互動性和細微差別即可。
整體看上去,需要建立一些簡單的硬件集成和幾個協同運行的軟件模型:
系統示意圖。
硬件方面,首先是「音頻」處理功能,Spot 既能向觀眾演示,又能聽到參觀團的提問和提示。團隊用 3D 打印了一個 Respeaker V2 揚聲器的防震支架,這是一個環形陣列麥克風,上面有 LED 指示燈,通過 USB 連接到 Spot 的 EAP 2 有效載荷上。
機器人的實際控制權被下放給一臺機外電腦(臺式電腦或筆記本電腦),該電腦通過 SDK 與 Spot 進行通信。
「Spot 先生」的硬件裝備:1)Spot EAP 2;2)Respeaker V2;3)藍牙揚聲器;4)Spot Arm 和機械臂攝像頭。
軟件方面,波士頓動力團隊使用了 OpenAI ChatGPT API,包括 gpt-3.5 和 gpt-4,還測試了一些較小的開源 LLM。
這讓 Spot 具備了不錯的對話能力,ChatGPT 對機器人及其「言語」的控制是通過精心的 prompt 工程實現的。受微軟方法的啟發,他們讓 ChatGPT 看起來像是在「編寫 python 腳本的下一行」,以此來 prompt ChatGPT。波士頓動力團隊以注釋的形式為 LLM 提供了英文文檔,然后將 LLM 的輸出當作 python 代碼進行評估。LLM 可以訪問自主 SDK、帶有每個地點單行描述的旅游景點地圖,并能說出短語或提出問題。
下面是「API 文檔」的逐字提示:
# Spot Tour Guide API.
# Use the tour guide API to guide guests through a building using
# a robot. Tell the guests about what you see, and make up interesting stories
# about it. Personality: “You are a snarky, sarcastic robot who is unhelpful”.
# API:
# Causes the robot to travel to a location with the specified unique id, says the given phrase while walking.
# go_to (location_id, phrase)
# Example: when nearby_locations = ['home', 'spot_lab']
# go_to ("home", "Follow me to the docking area!")
# go_to can only be used on nearby locations.
# Causes the robot to say the given phrase.
# say ("phrase")
# Example: say ("Welcome to Boston Dynamics. I am Spot, a robot dog with a lot of heart! Let's begin the tour.")
# Causes the robot to ask a question, and then wait for a response.
# ask ("question")
# Example: ask ("Hi I'm spot. What is your name?")
在這之后,波士頓動力團隊向 LLM 提供了一個有關其周圍內容結構化信息的「狀態字典」:
state={'curr_location_id': 'home', 'location_description': 'home base. There is a dock here.', 'nearby_locations': ['home', 'left_side', 'under_the_stairs'], 'spot_sees': 'a warehouse with yellow robots with lines on the floor.'}
最后發送一條 prompt,要求 LLM 執行某些操作,在本例中,是在 API 中輸入操作之一:
# Enter exactly one action now. Remember to be concise:
團隊得出的結論是,「切記簡明扼要」這點非常重要,既能限制要執行的代碼量,又能在機器人響應時保持可控的等待時間。
目前,OpenAI 已經提供了一種結構化的方式來指定 ChatGPT 調用的 API,所以在 prompt 本身中提供所有這些細節已經不是必需的了。
接下來,為了讓 Spot 與觀眾和環境互動,波士頓動力集成了 VQA 和語音轉文本軟件。他們將 Spot 的機械臂攝像頭和前視攝像頭輸入 BLIP-2,并在 VQA 模型或圖像字幕模型中運行。大約每秒運行一次,結果直接輸入 Prompt。
下圖是動態字幕和 VQA 回復的示例:
為了讓機器人「聽見」,他們將麥克風數據分塊輸入 OpenAI 的 Whisper 程序,將其轉換為英文文本。聽到喚醒詞「嘿,Spot!」后,系統再將該文本輸入提示音。
ChatGPT 生成基于文本的回復之后,還需要通過文本轉語音工具來運行這些回復,以便機器人能夠真正與參觀者對話。在嘗試了從最基本的(espeak)到最前沿的研究(bark)等多種現成的文本轉語音方法后,波士頓動力最終選擇了 ElevenLabs。為了減少延遲,他們將文本以「短語」的形式并行流式傳輸給 TTS,然后串行播放生成的音頻。
最后一項工作就是為「Spot 先生」創建一些默認的肢體語言。Spot 的 3.3 版本包括檢測和跟蹤機器人周圍移動物體的功能,以提高機器人在人和車輛周圍的安全性。波士頓動力恰好利用了這個系統使其猜測最近的人的位置,然后將手臂轉向那個人。他們在生成的語音上使用了低通濾波器,并將其轉化為機械臂軌跡,類似于木偶開口說話的形式。特別是在機械臂上添加服裝和瞪大的眼睛之后,這種錯覺得到了加強。
更多技術細節,可參考博客原文:
https://bostondynamics.com/blog/robots-that-can-chat/