akdeb/ElatoAI

基于 Arduino ESP32 和 Secure Websockets,并使用 Deno 边缘函数,通过 OpenAI Realtime API 实现实时 AI 语音,可在全球范围内进行超过 10 分钟的不间断对话,适用于 AI 玩具、AI 伙伴、AI 设备等。 elatoai.com/labs

许可证

MIT license 144 stars 7 forks Branches Tags Activity

akdeb/ElatoAI

文件目录

名称 | 名称 | 最后提交信息 | 最后提交日期 ---|---|---|--- .vscode | .vscode | | firmware-arduino | firmware-arduino | | frontend-nextjs | frontend-nextjs | | server-deno | server-deno | | supabase | supabase | | .DS_Store | .DS_Store | | LICENSE | LICENSE | | README.md | README.md | | pcb-design.png | pcb-design.png | |

🚀 ElatoAI:用于 ESP32 的实时 AI 语音

基于 OpenAI Realtime API、ESP32、Secure WebSockets 和 Deno Edge Functions 的实时 AI 语音,可实现超过 10 分钟的不间断全球对话。

Discord Follow License: MIT Node.js Next.js React

演示视频

Elato.open-source.conversational.AI.device.mp4 Watch Demo on YouTube

⚡️ 硬件设计

Hardware Setup

入门指南

  1. 安装 Supabase CLI 并设置本地 Supabase 后端。 在根目录下运行:
brew install supabase/tap/supabase
supabase start # 使用默认迁移和种子数据启动本地 Supabase 服务器。
  1. 设置你的 NextJS 前端。 (参见 Frontend README) 从 frontend-nextjs 目录中,运行以下命令。 (登录凭据: Email: admin@elatoai.com, Password: admin)
cd frontend-nextjs
npm install
# 设置你的环境变量
cp .env.example .env.local
# NEXT_PUBLIC_SUPABASE_ANON_KEY=<your_supabase_anon_key>
# OPENAI_API_KEY=<your_openai_api_key>
# 运行开发服务器
npm run dev
  1. 将你的 ESP32-S3 设备的 MAC 地址添加到 NextJS 前端的 Settings page 中。 这会将你的设备链接到你的帐户。 要查找 ESP32-S3 设备的 MAC 地址,请使用 PlatformIO 构建并上传 test/print_mac_address_test.cpp
  2. server-deno/.envfrontend-nextjs/.env.local 文件中添加你的 OpenAI API 密钥。
OPENAI_API_KEY=<your_openai_api_key>
  1. 启动 Deno 服务器。 (参见 Deno server README)
# 导航到服务器目录
cd server-deno
# 设置你的环境变量
cp .env.example .env
# NEXT_PUBLIC_SUPABASE_ANON_KEY=<your_supabase_anon_key>
# OPENAI_API_KEY=<your_openai_api_key>
# 在端口 8000 上运行服务器
deno run -A --env-file=.env main.ts
  1. 设置你的 ESP32 Arduino 客户端。 (参见 ESP32 README) 在 PlatformIO 上,首先 Build 项目,然后将项目 Upload 到你的 ESP32。
  2. ESP32 应该打开一个 AP ELATO-DEVICE 以连接到 Wifi。 连接到它并转到 http://192.168.4.1 以配置设备 wifi。
  3. 配置好 Wifi 后,关闭设备然后再打开,它应该连接到你的 Wifi 和 Deno 边缘服务器。
  4. 现在你可以和你的 AI 角色对话了!

项目架构

ElatoAI 由三个主要组件组成:

  1. 前端客户端 (托管在 Vercel 上的 Next.js) - 用于创建和与你的 AI 代理对话,并将其“发送”到你的 ESP32 设备
  2. 边缘服务器函数 (Deno 在 Deno/Supabase Edge 上运行) - 用于处理来自 ESP32 设备的 websocket 连接和 OpenAI API 调用
  3. ESP32 IoT 客户端 (PlatformIO/Arduino) - 通过 Deno 边缘服务器接收来自边缘服务器函数的 websocket 连接,并将音频发送到 OpenAI API。

🌟 特性

  1. 实时语音到语音:由 OpenAI 的 Realtime APIs 提供支持的即时语音转换。
  2. 创建自定义 AI 代理:创建具有不同个性和声音的自定义代理。
  3. 可定制的声音:从各种声音和个性中进行选择。
  4. Secure WebSockets:可靠的加密 WebSocket 通信。
  5. 服务器 VAD 转向检测:智能对话流程处理,实现流畅的交互。
  6. Opus 音频压缩:以最小的带宽实现高质量的音频流。
  7. 全球边缘性能:低延迟 Deno Edge Functions,确保无缝的全球对话。
  8. ESP32 Arduino Framework:优化且易于使用的硬件集成。
  9. 对话历史记录:查看你的对话历史记录。
  10. 设备管理:注册和管理你的设备。
  11. 用户身份验证:安全的用户身份验证和授权。
  12. 通过 WebRTC 和 Websockets 进行对话:使用 NextJS webapp 上的 WebRTC 和 ESP32 上的 websockets 与你的 AI 对话。
  13. 音量控制:从 NextJS webapp 控制 ESP32 扬声器的音量。
  14. 实时转录:你的对话的实时转录存储在 Supabase DB 中。

🛠 技术栈

组件 | 使用的技术 ---|--- 前端 | Next.js, Vercel 后端 | Supabase DB 边缘函数 | Deno Edge Functions on Deno/Supabase IoT 客户端 | PlatformIO, Arduino Framework, ESP32-S3 音频编解码器 | Opus 通信 | Secure WebSockets 库 | ArduinoJson, WebSockets, AsyncWebServer, ESP32_Button, Arduino Audio Tools, ArduinoLibOpus

🗺️ 高级流程

flowchart TD
 User[用户语音] --> ESP32
 ESP32[ESP32 设备] -->|WebSocket| Edge[Deno Edge Function]
 Edge -->|OpenAI API| OpenAI[OpenAI Realtime API]
 OpenAI --> Edge
 Edge -->|WebSocket| ESP32
 ESP32 --> User[AI 生成的语音]

项目结构

graph TD
 repo[ElatoAI]
 repo --> frontend[Frontend Vercel NextJS]
 repo --> deno[Deno Edge Function]
 repo --> esp32[ESP32 Arduino Client]
 deno --> supabase[Supabase DB]
 frontend --> supabase
 esp32 --> websockets[Secure WebSockets]
 esp32 --> opus[Opus Codec]
 esp32 --> audio_tools[arduino-audio-tools]
 esp32 --> libopus[arduino-libopus]
 esp32 --> ESPAsyncWebServer[ESPAsyncWebServer]

⚙️ PlatformIO 配置

[env:esp32-s3-devkitc-1]
platform = espressif32 @ 6.10.0
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
lib_deps =
  bblanchon/ArduinoJson@^7.1.0
  links2004/WebSockets@^2.4.1
  ESP32Async/ESPAsyncWebServer@^3.7.6
  https://github.com/esp-arduino-libs/ESP32_Button.git#v0.0.1
  https://github.com/pschatzmann/arduino-audio-tools.git#v1.0.1
  https://github.com/pschatzmann/arduino-libopus.git#a1.1.0

📊 重要统计数据

🛡 安全性

🚫 限制

🤝 贡献

  1. 在 ESP32 上寻找语音中断检测
  2. 添加 Arduino IDE 支持
  3. 在 Deno Edge 上添加工具调用支持

欢迎贡献

许可证

本项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅 LICENSE 文件。

如果您发现这个项目有趣或有用,请给一个 GitHub ⭐️。 这有很大帮助!

关于

基于 Arduino ESP32 和 Secure Websockets,并使用 Deno 边缘函数,通过 OpenAI Realtime API 实现实时 AI 语音,可在全球范围内进行超过 10 分钟的不间断对话,适用于 AI 玩具、AI 伙伴、AI 设备等。 elatoai.com/labs

主题

arduino ai hardware esp32 realtime openai deno realtime-api speech-to-speech supabase

资源

Readme

许可证

MIT license

Activity

Stars

144 stars

Watchers

4 watching

Forks

7 forks