💁‍♀️

チロルチョコサイズのマイコンでクラウドLLMを使う「小智ESP32」

に公開

2024年はウェアラブルAIアシスタントのプチブーム

 2024年は、AIを搭載したという触れ込みのウェアラブルAIアシスタントが数多くリリースされました。いずれも、ウェアラブル機器本体はカメラ、マイク、バッテリ、通信機能程度しか持っておらず、クラウド上のAIと通信することで高機能を実現している製品でした。
 しかし、どの製品もビジネスとしては成功せずに、早々に市場から撤退しています。スマートフォンより簡単に利用できるスマートアシスタントのニーズはあるとは思うのですが、技術的には、まだ早過ぎたのかもしれません。また、具体的な用途開拓が進んでいないのも課題だと思います。

 フェアリーデバイセズで開発・販売しているTHINKLETでも、このようなAIと対話するアプリケーションを組み込んで、マルチモーダルで撮影した映像の内容を説明させたりする試みを行なっています。おかげさまで、『日経トレンディ』2024年12月号で特集された「2025年ヒット予測ベスト30」の第1位にランクインしています。

【日経トレンディ2025年ヒット予測ベスト30】でTHINKLETが1位にランクインしました。
https://prtimes.jp/main/html/rd/p/000000093.000042518.html

 2024年末には、これらの製品と同等の機能を市販のマイコンを使って実現したリアルタイムAIチャットシステムがオープンソースでリリースされています。これらを試してみることによって、比較的安価にウェアラブルAIアシスタントを実体験して、製品としての課題などを感じてみることができます。

Open RealtimeAPI Embedded SDK

 オープンソースのウェアラブルAIアシスタントの中でもOpenAIがリリースした"Open RealtimeAPI Embedded SDK"が有名です。OpenAI社では、AIとのリアルタイム接続にWebRTCとSocket.IOを採用するために、Go言語でのWebRTCライブラリPionの主要開発者や、組み込み用途のWebRTCライブラリであるlibpeerの開発者などを雇用して、この分野に取り組んでいます。
 しかし、残念なことにOpen RealtimeAPI Embedded SDKの開発は継続されていないようです。あまり普及しなかった原因の1つとしては、OpenAIの有料APIを利用することになるので、課金がつらいという点があるようです。

Open RealtimeAPI Embedded SDK
https://github.com/openai/openai-realtime-embedded-sdk

 日本では、OpenAI Voice Assistantを使った実装例が年末年始にかけて開発者の間で盛り上がりを見せていましたが、海外ではあまり注目はされなかったようです。

※ などと書いていましたら、3月末でGithubのコードがバッサリ削除されました。ESP32ブランチは残っています。今後は、espressifのデモコードを参照してほしいということのようです。https://github.com/espressif/esp-webrtc-solution/tree/main/solutions/openai_demo

小智ESP32(xiaozhi-esp32)

 一方、同時期に中国で実装された"小智ESP32"(xiaozhi-esp32)は一定の盛り上がりを見せているようです。現在も開発が継続されています。

 この小智ESP32は、日本ではあまり注目されていないようなので、簡単に使い方を解説してみます。

 まずは、デモを見てください。漢字の表示はイマイチですが、日本語で自然に会話ができているのに驚くと思います。

ニーハオ小智 - YouTube
https://www.youtube.com/watch?v=-FmXnn11-pc

 小智ESP32のソースやドキュメントはこのあたりにあります。

GitHub - 78/xiaozhi-esp32: Build your own AI friend
https://github.com/78/xiaozhi-esp32

Docs
https://ccnphfhqs21z.feishu.cn/wiki/Zpz4wXBtdimBrLk25WdcXzxcnNS

小智 AI 聊天机器人百科全书 - Feishu Docs
https://ccnphfhqs21z.feishu.cn/wiki/F5krwD16viZoF0kKkvDcrZNYnhb

必要な機材

 小智ESP32は、Open RealtimeAPI Embedded SDKと同様に、Espressif社の無線マイコンであるESP32 S3を使用したプラットホームで利用できます。ただし、RAMを8MB以上搭載した製品が必要です。
 対応するハードウエアは、市販品でもたくさんあるのですが、ここでは日本でも比較的入手しやすいM5Stack社の"Atom S3R"を使用します。Atom S3R単体では、マイクとスピーカー、アンプの機能を持たないので、"Atomic Echo Base"を接続して使用します。両方を用意しても、五千円でお釣りが出る程度で遊んでみることができます。

Atom S3R
https://docs.m5stack.com/ja/core/AtomS3R

Atomic Echo Base
https://docs.m5stack.com/ja/atom/Atomic Echo Base

 パッケージを開けて、AtomS3RとAtomic Echo Baseを接続しておきます。

ファームウエアの書き込み

 小智ESP32は、Espressifの組み込み向けの開発環境であるESP-IDFを使用してビルドを行う必要がありますが、試すだけであればM5Stack社がビルド済みのイメージファイルをリリースしているので、それをインストールするだけで使用できます。

 小智ESP32の書き込みには、M5Burnerというツールを使用します。
 以下のサイトの「UIFlow Firmware Burning Tool」の項目から、自分の環境に合ったM5Burnerをダウンロードして起動します。

https://docs.m5stack.com/en/download

 左側のリストからATOMS3を選ぶと、「XiaoZhi Voice Assistant For AtomS3R」が少し下に表示されます。

 XiaoZhi Voice Assistant For AtomS3Rには、バージョンは同じですが、音声で起動を行うウェイクアップワード音声によって4種類のイメージが登録されています。どれでもよいのですが、小智ESP32ではNiHaoXiaoZhi(你好小智)がデフォルトのようなので、ここではこれを選びます。

 Burnボタンを押すと書き込みモードになります。USBケーブルを用意して、M5Burnerを起動したPCとAtom S3Rを接続します。Startボタンで書き込み開始します(Windows環境などでは、デバイスドライバをインストールする必要があるかもしれません)。


無線LANの設定

 書き込みが終わっても、S3Rは自動で再起動はされないので、電源を入れ直します。何か中国語でしゃべって、こんな画面が表示されました。

 S3Rが無線LANのAPモードで動いているので、そこに接続してWiFi設定をするようです。
 PCで指定のAPに接続します。パスフレーズの設定はないので選択するだけで接続されます。

 PCのブラウザで、S3Rの画面で指定されたURLを開くと、無線LANの設定画面が表示されます。

 SSIDとパスフレーズを入力して青いボタンを押します。S3Rは2.4GHzの無線LANにしか対応していませんので注意してください。設定が完了するとこの画面になります。

アップデートの自動実行

 最初は、起動後にバージョン表示をして、最新版ではない場合は自動でOTAされて更新されます。

 OTAが終わると自動で再起動します。無線LANの接続を確認して待機モードになります。


XiaoZhi AI Control Panelの設定

 次に、クラウド側の設定を行います。
 XiaoZhi AI Control Panel(xiaozhi.me)を開いて、ユーザー登録をします。まず、開いたページに表示されるコンソールボタンを押します。

小智 AI 聊天机器人
https://xiaozhi.me/

 登録ははじめてなので、新規登録のリンクを押します。

 国番号(日本は+81)と携帯電話番号を入力します。SMSで認証コードが通知されるので、家電は使えません。入力したら、「確認コードを送信」ボタンを押します。

 SMSで認証コードが送られてきます。コードの有効期限は5分です。先ほどの画面でコードを入力します。

デバイス登録

 XiaoZhi AI Control Panelへのサインインができたので、デバイス登録をします。エージェントのキャラクター単位で管理をするようです。

 デバイスを追加ボタンを押すと、S3R側に6桁のコードが表示されます。おそらく、S3Rが使用しているIPアドレスからペアリングを行うアカウントを特定しているのでしょう。

 確認コードを入力して確認ボタンを押すと、デバイスが登録されます。

 ロールを設定を選んで設定をおこないます。ロールテンプレートから「English Tuter」に設定すると、日本語話者と日本語が選択できるようになりました。

 ロールがEnglish Tuterの状態では、デフォルトでは英語教師のプロンプトが設定されています。名前はLilyになっていますが、ウェイクワードは「你好小智」のままです。
 このままでも、日本語で会話することができます。最初は英語で話し始め英会話の練習を勧められるので、希望するプロンプトに書き換えておくといいでしょう。

 対話に使用するLLMモデルは4つから選択できます。とりあえず、デフォルトのQwenのまま使います。「实时」は即時のことで、リアルタイムという意味です。「Qwen リアルタイム」以外のモデルでは、約1秒の遅延が発生すると書かれています。

 保存すると、デバイスの再起動を要求されたので、S3Rの電源を入れ直しましょう。S3Rはバッテリを内蔵していないので、USBケーブルを抜き差しするのが簡単です。

小智ESP32を使ってみる

 起動したS3Rに「ニーハオシャオチー」と話かけるか、S3Rのパネルがボタンになっているので押すと、対話モードで起動します。
 対話は普通に日本語でできます。応答内容を表示している画面では、日本語が一部トーフ表示になります。これは使用しているフォントが日本語の表示用のデータを一部しか持っていないからでしょう。
 対話はスムースですが、内容はやや単調になりがちです。初期プロンプトの工夫をしてみるといいでしょう。

 S3Rの画面には、アイコンで対話の感情レベルも表示されています。的確に感情レベルの設定ができているのがわかります。

 モデルにQwenを使っていても、応答の対話が長くなると、日本語の発話が停止してしまうことがありました。画面での表示は正常に行われています。おそらく、音声バッファのやりとりに問題がある可能性があります。

 チャットの履歴は保存されていて、会話に活かされるようになっています。また、会話履歴は自動的に要約されて、メモリとして次回からの会話のプロンプトに追加されます。この要約は毎回更新されているようです。間違った内容が書かれている場合は、直接編集して修正できます。

 動画の会話は、プロンプトとメモリに基づいて行われていたことがわかります。

 対話の相手をするLLMモデルで、話題のDeepSeek V3を選ぶこともできます。Qwenはあまり高度な回答はできませんが、DeepSeekはなかなか優秀な回答を返しますので、試してみるといいでしょう。書かれているようにQwenリアルタイムと比べると若干の遅延はありますが、気になることはない程度でした。

 小智EPS32が起動されている間の音声や対話の内容については、常に中国にあるシステムに送信されていますので、運用には注意をしてください。使用しない場合は、電源を切っておくといいでしょう。
 また、いまのところクラウド側のLLMの使用については無料になっていますが、無料で続けるのはなかなか難しいサービスではないかと思われます。サービス内容の変更には注意が必要でしょう。

 さて、AIとの対話はいかがだったでしょうか? 
 近い将来、まわりのあらゆる家電が対話可能なインターフェイスを搭載できるようになるかもしれません。ローカルLLMの発展と合わせて、おしゃべりな機械たちの世界がやってくるのを楽しみにしています。

フェアリーデバイセズ公式

Discussion