模型 / 資料集
akdeb/ElatoAI avatar
akdeb/ElatoAI

ElatoAI:把語音對話塞進 ESP32 的三種後端路線

Realtime Voice AI with 100+ Models on Arduino ESP32 with Secure Websockets and Edge Functions for AI Companions, and Devices

2,007 個 Star253 個 ForkTypeScriptNOASSERTION

秒懂

它是什麼?
ElatoAI 是一個以 TypeScript 為主的開源專案,讓 ESP32 這類 MCU 能透過 WebSocket 接上多種即時語音模型。它同時提供 Deno Edge、Cloudflare Workers 與 FastAPI 三種伺服器路徑,選擇不同路徑等於選擇不同的模型供應商與部署成本。
適合誰用?
ElatoAI 適合已經有 ESP32 硬體、想把語音對話接上雲端模型,且願意自己處理 Supabase 與 Deno 部署的人;不適合想要現成託管服務、或不打算碰伺服器端程式碼的團隊。動手前先確認三件事:repository 根目錄的 LICENSE 條款(GitHub 標示為 NOASSERTION,無法從既有資料判定授權範圍)、Deno 伺服器實際需要的環境變數清單,以及你選定的模型供應商是否支援你要的語言。
可以商用嗎?
請先確認。這個儲存庫使用的授權不在我們自動分類的範圍內,商用前請閱讀儲存庫中的 LICENSE 檔案。
還在維護嗎?
有在維護。儲存庫最近一次提交在 14 天前。
用什麼語言寫的?
主要是 TypeScript(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

ESP32 想做語音對話,卡住的是協定而不是模型

ESP32 的資源限制讓它無法在本機跑語音模型,所以做法一定是把音訊往外送。問題在於送出去之後要接什麼。多數語音 API 提供的是 HTTP 端點或瀏覽器用的 WebRTC,兩者對 MCU 都不友善:HTTP 需要反覆建立連線,WebRTC 的實作對記憶體與堆疊要求偏高。ElatoAI 的切入點是把這件事收斂成一條 WebSocket,讓裝置端只需要處理 Opus 壓縮音訊的收送。README 的 feature list 明白寫著裝置端走 WebSocket,而 NextJS webapp 走 WebRTC,兩條路徑共用同一套後端模型。目標讀者是做硬體產品或玩具的人:README 連到一個 Kickstarter 專案,首頁的敘述就是讓玩具用 AI 聲音說話。這也解釋了為什麼 feature list 裡會出現音量控制、出廠重置、captive portal 這類跟語音模型無關,但跟實體產品有關的項目。

三條後端路線,差別在誰幫你管模型與連線

專案沒有單一伺服器,而是三套並行的實作,各自對應不同的取捨。Deno Edge 路線直接串接供應商的 speech-to-speech API,README 列出六個已實作的模型目錄:openai、gemini、grok、elevenlabs、hume,以及單一檔案的 boson.ts。這條路線的延遲取決於供應商,你拿到的就是該供應商原始的行為。Cloudflare Workers 路線則反過來,把 STT、LLM、TTS 拆成三段,由 Workers AI 提供 Deepgram 的 STT 與 TTS,你只需要自備 LLM 的 API key。這是 pipeline 而非 speech-to-speech,中間多了一層文字轉換,換來的是可以自由替換其中一段。FastAPI 路線走的是 Pipecat,README 的 2026 年 4 月 15 日公告說可以啟動超過 100 種 STT、LLM、TTS 的組合。三條路線的差異不在功能多寡,而在故障時你要去哪裡找問題:Deno 路線出錯要找供應商,Cloudflare 路線出錯要判斷是 STT、LLM 還是 TTS 這一段,FastAPI 路線則是自己維護整條鏈。

音訊怎麼走:從 I2S 到 WebSocket 到模型再回來

README 沒有提供完整的時序圖,但從 feature list 可以拼出資料流。裝置端用 Opus 壓縮音訊,透過加密 WebSocket 送到伺服器;伺服器把音訊交給選定的模型,模型回傳語音與逐字稿。伺服器端的 VAD 負責判斷使用者是否講完,文件稱之為 server VAD turn detection,意思是輪次切換的判斷不在裝置上,而在伺服器。這一點對硬體設計有實際影響:裝置不需要跑語音活動偵測,運算負擔因此下降,README 也明確寫著不需要 PSRAM。代價是每一輪對話都得等伺服器判斷,網路品質直接反映在對話節奏上。逐字稿與對話歷史寫入 Supabase,webapp 再從那裡讀取。裝置管理與使用者驗證同樣走 Supabase,webapp 端另外支援 OAuth。架構上,Supabase 是狀態的集中點,WebSocket 伺服器是無狀態的轉接層,這個切分讓多裝置部署變得可行,README 也有一篇專門講多裝置部署的文件。

動手部署:PlatformIO、Arduino IDE 與 Deno 伺服器

硬體端的建置有兩條官方路徑,README 分別連到 PlatformIO 與 Arduino IDE 的文件頁,兩者都指向同一個 ESP32 Arduino Framework 實作。專案同時提供 OTA 更新與 captive portal 的 WiFi 設定,代表裝置出貨後不需要拆機就能換韌體與換網路。伺服器端以 Deno 為主,模型目錄位於 server/deno/models/ 之下,每個供應商一個子目錄。實際的環境變數名稱與部署指令,README 本身沒有列出,只連到 elatoai.com/docs 的 quickstart 與 deploying-globally 兩頁,所以任何具體的 key 名稱都必須回到官方文件確認,不能從 repository 首頁推測。Cloudflare Workers 路線的關鍵在於自備 LLM API key,STT 與 TTS 由 Workers AI 內建提供,這降低了要申請的帳號數量。FastAPI 路線的入口在 server/fastapi,README 建議直接看該目錄的說明。三條路線的共同前置條件是 Supabase,因為逐字稿、裝置註冊與使用者驗證都依賴它。

授權狀態未定與其他必須先確認的事

最需要留意的是授權。GitHub 把這個專案的授權標示為 NOASSERTION,意思是無法從既有資料判定它適用哪一種條款。repository 根目錄的 LICENSE 檔案內容必須自己打開確認,這在打算商業出貨硬體時不是小事:條款會決定你能不能修改、能不能閉源、要不要揭露衍生作品。其次是語言支援範圍。README 的模型清單以供應商為主,沒有提到中文語音或中文辨識的實測結果,而不同供應商對中文的支援落差很大,這部分只能自己用目標語言試。第三是專案沒有檢索到任何 release,最新推送時間為 2026 年 9 月 2 日,代表它是以 main 分支持續推進的狀態,沒有版本標籤可以鎖定。想要可重現的建置,就得自己記錄 commit。最後,README 提到超過 20 分鐘不中斷的對話,但沒有說明連線中斷後的重連行為與音訊緩衝策略,這在實際產品中是使用者最先感受到的問題。

跟 Pipecat 直接拿來用差在哪裡

FastAPI 路線本身就是建在 Pipecat 之上,所以真正的替代方案不是另一個框架,而是直接用 Pipecat 加上自己的 ESP32 韌體。差別在於 ElatoAI 已經幫你決定了幾件事:裝置端用 WebSocket 而非 WebRTC、音訊用 Opus、輪次判斷放在伺服器、狀態存 Supabase、裝置認證與 OTA 都做進去了。自己組的話,這些每一個都是獨立的決策點,彈性更大但工作量也更大。反過來說,如果你要接的模型不在 ElatoAI 已實作的清單裡,Deno 路線就得自己新增一個目錄,而 FastAPI 路線因為走 Pipecat,反而比較容易換模型。另一個方向是 Cloudflare 的 Voice Agents 與 Durable Objects,README 的 2026 年 4 月 17 日公告提到可以用它建立跨裝置的網路,這條路線的價值在於連線狀態由 Durable Objects 管理,適合需要多台裝置互相協調的場景,而不只是單機對話。

誰該用,誰該等

如果你手上已經有 ESP32 的硬體原型,目標是做一個能講話的裝置,而且團隊裡有人能處理 Deno 或 FastAPI 的部署,ElatoAI 省下的是裝置端與伺服器端之間那層協定的設計工作,這部分自己刻通常會踩到音訊格式與輪次判斷的坑。如果你需要的是純軟體的語音代理,不需要實體裝置,這個專案多出來的硬體整合對你沒有價值,直接用供應商的 API 或 Pipecat 更直接。如果你要的是託管服務,這個專案不是,Supabase、Deno 與模型供應商的帳號都得自己申請與付費,README 也沒有提到任何代管方案。最後一個判斷點是中文:在確認所選供應商的語音辨識與合成對中文的實際表現之前,不要把它排進產品時程。

編輯結論

ElatoAI 適合已經有 ESP32 硬體、想把語音對話接上雲端模型,且願意自己處理 Supabase 與 Deno 部署的人;不適合想要現成託管服務、或不打算碰伺服器端程式碼的團隊。動手前先確認三件事:repository 根目錄的 LICENSE 條款(GitHub 標示為 NOASSERTION,無法從既有資料判定授權範圍)、Deno 伺服器實際需要的環境變數清單,以及你選定的模型供應商是否支援你要的語言。這三項都會直接決定你能不能把裝置交到別人手上。

官方來源

  1. akdeb/ElatoAI on GitHub
  2. Issues
  3. Project website
  4. README
社群筆記

社群筆記