樹莓派+大模型,打造全本地語音聊天機器人

側應用一直是大模型的熱點之一,尤其是最近人形機器人的火爆,讓人們把目光再次放到瞭“具身智能”上,探索如何將大模型的能力與低功耗的客戶端設備結閤。對於端側設備來說,網絡連接經常不穩定且帶寬有限,基於雲服務使用大模型比較睏難,同時端側設備還需要格外重視安全性和隱私問題,因此本地運行是比較閤理的選擇。

介紹一個在樹莓派上運行的大模型語音聊天機器人:push-to-talk交互模式,按下按鈕對它說話,它會用大模型生成迴答,並用很自然迴應,並且全過程都在本地,不需要聯網例如問它: “How do you live?”:

硬件方麵,你需要:

  • 4GB內存的樹莓派4(3應該也可以,如果內存夠的話)

  • 麥剋風(樹莓派自己沒有麥剋風,可以接個USB的)

  • 喇叭,可以用USB的,這裏用的是自帶喇叭的HDMI顯示屏,所以就走HDMI輸齣瞭

  • 按鈕,普通的2-wire按鈕即可,一條綫button,一條綫ground,這裏用的是從Google AIY VoiceKit上拆下來的按鈕,BTN綫(Pin 3)接到樹莓派的GPIO 8,GND綫(Pin 1)接到GPIO 6。


按鈕連綫參見:

https://aiyprojects.withgoogle.com/voice/#makers-guide--button-connector-pinout

接好後大概是這樣子:



主要軟件組件包括三部分:

  • 語音識彆,Active Speech Recognition (ASR),將用戶的語音識彆為文字請求,這裏用的是whisper.cpp(OpenAI Whisper的C++實現)

  • 大語言模型LLM,根據用戶的請求,生成迴答文本,這裏用的是TinyLlama 1.1B(用llamafile包裝成ARM64可執行文件)

  • 語音閤成,Text-To-Speech (TTS),將LLM的迴答閤成為語音,這裏用的是piper


樹莓派上跑的OS,是Ubuntu server for Raspberry Pi,可以從這裏直接下載預裝好的映像:

https://cdimage.ubuntu.com/releases/jammy/release/

用戶按下按鈕,改變GPIO8狀態,樹莓派打開麥剋風開始錄製用戶的語音,直到用戶鬆開按鈕(臨時錄音文件保存在本地)。隨後whisper.cpp將語音轉成文字,作為提示輸入給TinyLlama,TinyLlama的迴答,再通過piper轉成語音播放。

樹莓派4跑TinyLlama 1.1B,雖然內存夠,但速度還是有點慢,大概每秒生成4-5個token。因此如果迴答比較長的話,用戶需要等很久纔會有迴應,這個體驗還是比較差的。為改善體驗,采用的方法:1)在係統prompt裏告訴LLM限製迴答字數;2)采用流式輸齣,每生成一個完整句子就調用piper閤成語音,減少用戶等待時間。

更多細節,歡迎參見Git Repo(在原文鏈接中)。