2024 年 DIY 自己的大语言模型玩具的指南
2024 年到了,DIY LLM 玩具?現在完全是一件事了。不需要任何科技魔法,只需要你的好奇心。我冒險嘗試,將一些編碼與大量的樂趣混合在一起,然後「砰」地創建了我自己的會說話的玩具。如果您想輕鬆打造人工智慧夥伴,那麼您來對地方了。讓我們一起揭開科技的神秘面紗,讓您的人工智慧朋友栩栩如生。在科技與日常生活日益交織的世界中,創建自己的 LLM 玩具不僅可以揭開人工智慧的神秘面紗,還可以為您提供通往互動技術奇蹟的個人化大門。
我們先來看看最終的效果。
老實說,這真是太棒了。準備開始?讓我們深入了解一下吧!
它是如何運作的?
共有三個關鍵步驟:
- 錄音:透過 UDP 接收玩具發送的即時錄音數據,並呼叫 STT(Sound-To-Text)API 將聲音轉換為文字。
- 思考:收到前面的文字後,立即呼叫 LLM(Large-Language-Model)API,以串流方式取得 LLM 產生的句子。然後,呼叫 TTS(文字轉聲音)API 將句子轉換為人類語音。
- 播放音訊:玩具將接收 FoloToy Server 產生的 TTS(Text-To-Sound)音訊檔案串流並依照順序播放。
開發前的準備
在開始製作 LLM 玩具之前,了解必要的硬體、軟體和技術知識至關重要。本節將指導您準備所有必需品以確保順利開始。
硬體
Folotoy Core:ChatGPT AI 語音對話核心板作為您專案的大腦,實現與 AI 的語音互動。
玩具組件:麥克風、揚聲器、按鈕、開關和電源等必需品是必需的。我將使用 Alilo Honey Bunny G6 進行即用型設定。
八爪魚 AI 開發套件(其他選擇):非常適合希望用人工智慧功能改造現有玩具的人。
購買時,請提供我的促銷代碼 F-001–9 以獲得折扣。
伺服器
利用您自己的機器(例如 MacBook Pro),確保您的玩具擁有可靠的後端來處理和回應語音互動。或者,Google Cloud Engine (GCE) 等雲端服務可以擴展您的專案以實現更廣泛的應用。
知識
- Docker(必要):了解 Docker 對於在容器中部署軟體、使專案可移植和可擴展至關重要。我用它來啟動 Folo 伺服器。
- Git(必要):版本控制對於管理專案的程式碼庫至關重要。我用它來管理 Folo 伺服器程式碼庫。
- MQTT(可選):如果您的目標是高級定制,熟悉 MQTT(一種輕量級訊息協議)將有利於玩具和伺服器之間的通訊。
- EMQX(選購):適用於 IoT、IIoT 和車聯網的開源 MQTT 代理程式。用於管理您的玩具。
- ollama(可選):如果你想在本地運行大型語言模型,這是一個不錯的選擇。
服務與註冊
為了讓你的玩具變得栩栩如生,你需要存取特定的人工智慧服務。對於這個項目,我選擇使用 OpenAI 的產品:
- TTS(文字轉語音):OpenAI 的 Whisper 服務將 AI 的文字回應轉換為語音,使互動變得自然。
- LLM(大型語言模型):利用 OpenAI 的模型來理解和產生類似人類的文字回應。
- STT(語音轉文本):OpenAI 的 TTS 服務將口語單字轉錄為文本,使 AI 能夠理解語音命令或查詢。
最重要的是,您需要在OpenAI 平台上註冊並建立 key,像sk -...i7TL
。
組裝你的玩具
現在是時候將所有部分組合在一起並製作您自己的 LLM 玩具了。
大致步驟如下,建議先觀看影片教學。
- 檢查 Alilo G6 的錄音和播放是否正常。
- 使用螺絲起子旋下 Alilo G6 背面的 6 顆螺絲。
- 小心地打開 Alilo G6 的外殼,拔掉主機板上的所有插頭,先拔掉電源插頭,插頭上有膠水,可以用美工刀輕輕地切開,一定不要割傷手。
- 旋下主機板上的 4 顆螺絲並將其取下。
- 將原廠的主機板更換為 FoloToy 的主機板,並鎖緊 3 顆螺絲固定。
- 插入麥克風、燈光、擴音器和電源插座,最後插入電源插座。
- 插入所有插座後,請勿關閉外殼或安裝螺絲。首先打開兔子尾巴上的開關,看看新安裝的燈是否能亮起並呈現藍色慢閃。
- 如果沒有問題,安裝外殼並擰緊螺絲即可完成更換過程。
設定伺服器
強大的後端支援是讓您的 LLM 玩具理解並回應語音命令的關鍵。本節將教您如何複製伺服器程式碼庫、配置伺服器以及啟動 Docker 容器,以確保您的玩具擁有穩定的後端支援。
首先從 GitHub 克隆 Folo 伺服器程式碼庫。
git clone [email protected]:FoloToy/folotoy-server-self-hosting.git
然後將檔案docker-compose.yml
中的基本伺服器配置更改為您自己的。
名稱 | 描述 | 範例 |
---|---|---|
OPENAI_OPENAI_KEY | 您的 OpenAI API key。 | sk-...i7TL |
OPENAI_TTS_KEY | 您的 OpenAI API key。 | sk-...i7TL |
OPENAI_WHISPER_KEY | 您的 OpenAI API key。 | sk-...i7TL |
AUDIO_DOWNLOAD_URL | 音訊檔案的 URL。 | http://192.168.xx:8082 |
SPEECH_UDP_SERVER_HOST | 您的伺服器的 IP 位址。 | 192.168.xx |
然後在config/roles.json
檔案中設定你的角色,這裡有一個最小的例子,完整的設定請參考Flotoy 文件。
{
"1": {
"start_text": "你好,需要幫忙嗎?",
"prompt": "You are a helpful assistant."
}
}
然後啟動 Docker 容器。
docker compose up -d
我在自己的機器上運行 Folo 伺服器,如果你想在雲端運行,幾乎是一樣的。需要注意的一點是,您需要將連接埠 1883、8082、8085、18083 和 8083 暴露到公共網路。
有關更多信息,請參閱 Flotoy 文件。
與你的玩具聊天
一切準備就緒後,就可以與您的 LLM 玩具進行互動了。
打開玩具背面的開關即可開機。耳朵裡的藍色閃爍燈表示玩具已進入配對模式。
開啟手機或電腦,選擇「FoloToy-xxxx」無線網路。稍後,您的手機或電腦將自動開啟一個設定頁面,您可以在其中設定要連接的 WiFi 網路(SSID 和密碼),以及伺服器位址(如 192.168.xx)和連接埠號碼(保留預設的 1883)。
配置網路並連接到伺服器後,按中間的大圓形按鈕開始對話。當您停止說話後,FoloToy 會發出一聲蜂鳴聲來指示錄音結束。
周圍的 7 個圓形小按鈕是角色切換按鈕。點擊後,角色切換生效。
調試
無論是伺服器還是玩具,都可能會遇到一些技術問題。本節將提供一些基本的除錯技巧和工具,幫助您診斷和解決可能出現的問題,確保您的 LLM 玩具能夠順利運作。
伺服器調試
若要檢查伺服器日誌,請執行下列命令。
docker compose logs -f
可以在 docker-compose.yml
檔案中設定 LOG_LEVEL 來控制日誌等級。
玩具調試
Folo Toy 提供了一種透過 USB 串口調試玩具的簡單方法。您可以使用Folo Toy Web Tool來調試玩具。
- 使用 USB 線將玩具與電腦連接。
- 開啟 Folo Toy Web Tool,然後按一下「控制台」按鈕連接到玩具。
- 連線後,您應該可以在控制台中看到玩具的即時日誌。
玩具上還有一個 LED,它會亮起不同顏色來指示玩具的狀態。
MQTT 調試
開啟 EMQX Dashboard 查看 MQTT 訊息。預設使用者名稱是 admin,密碼 是 public。不管怎樣,登入後請將密碼更改為安全的密碼。
高級定制
對於想要進一步探索和自訂自己的 LLM 玩具的高級用戶,本節將介紹如何在本地運行大型語言模型、使用 CloudFlare AI Gateway 等工具以及自訂角色的聲音。這將為您打開 DIY LLM 玩具更廣闊的世界。
本地運行 LLM
在本地運行大型語言模型是一件有趣的事。您可以運行 Llama 2、Gemma 以及來自世界各地的各種開源大型模型,甚至是您自己訓練的模型。使用 ollama,你可以輕鬆做到。 先安裝 ollama,然後執行下列指令執行 Llama 2 模型。
ollama run llama2
然後,更改角色配置以使用本機 LLM 模型。
{
"1": {
"start_text": "你好,需要幫忙嗎?",
"prompt": "You are a helpful assistant.",
"llm_type": "ollama",
"llm_config": {
"api_base": "http://host.docker.internal:11434",
"model": "llama2"
}
}
}
api_base 應該是你的 ollama 伺服器位址,並且不要忘記重新啟動 Folo 伺服器以使更改生效。
docker compose restart folotoy
就這樣,將模型更改為 Gemma 或您喜歡的其他模型,然後享受它。
使用 CloudFlare AI 網關
Cloudflare 的 AI 閘道讓您能夠了解並控制您的 AI 應用程式。透過將您的應用程式連接到 AI Gateway,您可以透過分析和日誌記錄來了解人們如何使用您的應用程序,然後透過快取、速率限制以及請求重試、模型回退等功能來控制應用程式的擴展方式。
首先,您需要建立一個新的 AI 網關。
然後編輯docker-compose.yml
檔案將 OPENAI_OPENAI_API_BASE 變更為您的 AI 網關的位址,如下所示:
services:
folotoy:
environment: OPENAI_OPENAI_API_BASE=https://gateway.ai.cloudflare.com/v1/${ACCOUNT_TAG}/${GATEWAY}/openai
然後,您可以透過儀表板查看有關請求、令牌、快取、錯誤和成本的指標。
以及一個日誌記錄頁面,用於查看各個請求,例如提示、回應、提供者、時間戳記以及請求是否成功、快取或是否存在錯誤。
太棒了,不是嗎?
角色語音定制
您可以透過變更角色設定檔中的voice_name
欄位來自訂角色的語音。
{
"1": {
"tts_type": "openai-tts",
"tts_config": {
"voice_name": "alloy"
}
}
}