Tech blog Produced by FOURIER

誰でも簡単にできる!?Raspberry Pi で作るAI会話ロボット

Uhara Uhara 2024.05.20

※今回は弊社の業務とはちょっと外れた、完全に筆者の趣味の内容です。

今日も一人でリモートワーク。ぶつくさ独り言をつぶやきながら仕事しています。

あぁ、しゃべる相手が欲しいな

なんかリアクション欲しいな

そうだ、AI会話ロボットを作ろう

シュバババ!

graph TD
  マイク --> B["音声認識<br>(Speech Recognition)"] --> P["プロンプト生成"] --> C["ChatGPT API"] --> D["音声読み上げソフト<br>(aquestalk)"] --> スピーカー 

用意したもの

  • Raspberry Pi 3(以下、ラズパイと呼びます)
  • USBマイク
  • USBスピーカー
  • USB micro - TypeA ケーブル
  • SSH接続用PC
  • OpenAIアカウント

  • 依代 (よりしろ)

ざっくり解説

音声認識

PythonでSpeechRecognitionを使用してUSBマイクからとりこんだ音声をテキストに変換します。現状はこのライブラリの一強のようです。簡単なギミックとして、”話聞いて”というキーワードで会話モードに入る、”黙って”というキーワードでスタンバイモードになるようにしました。

ChatGPT API

開発中はコストを抑えるためGhatGPT-3.5、最終的にはGhatGPT-4oで遊んでいました。執筆時はこれがベストな感じでしたが、世代交代が早そうな箇所ではあります。

プロンプト生成

出力された言葉からプロンプトを生成してChatGPTのAPIに投げます。ここはアイデア次第でいろいろできそうな部分ですが、今回はroleとして”関西のお笑い芸人”、質問には「”音声認識で取得した文字列”に対して50文字以内で回答して」という感じのシンプルなプロンプトにしています。

音声読み上げ

会社に転がっていたちょっと世代の古いラズパイ3で動くものという制約もあり、その中でも比較的後発のaquestalkに決めました。

  • GoogleTextToSpeechAPI → API型で開発は便利そうだが音声データをダウンロードするので転送のラグ等があるかなと思い見送り
  • Voicepeak / Voicevox → 後発のライブラリなので発声具合はとても魅力なのだが動かすラズパイのスペック的に問題がありそうで見送り。いずれ最新のラズパイでこの辺を使ってみたい。
  • Open JTalk → やや発声具合に難あるが導入には問題なさそう
  • aquestalk10 →こちらも動作的にも問題なく、「ゆっくり」な感じは万人に受けそう→選定!

依代

神霊が依り憑く(よりつく)対象物のことで、神体などを指すほか、神域を指すこともある。(ウィキペディアより

ここではラズパイを内部に入れるための人形を指します。今回お題をAI会話アプリケーションではなくAI会話ロボットとしたのは、誰が喋るかというのを重要視したためです。PCの画面越しに2次元画と会話するより、身近な人形/ロボットが喋ることでより”相棒な感じ”に近づけるかなと考えます。某有名ブロガーでもおなじみのミミクリーペットがちょうど中身を入れ替えるのに都合がよい感じでしたので”ガワ”を一時的にお借りしました。特に深い意味はありません。

こんな感じになりました

おわりに

目に見える改善の余地は以下のようにいろいろありますが、

  • ChatGPTでは情報がやや古く、直近の時事ネタなどが通用しない。(とはいえこれは現在次々と出てくるAIがリアルタイム情報まで拾うことができるようになりそうなので、時間の問題?)
  • 会話に前後の脈略を持たせること。使う側の日頃の発言を学習させて...そうすると自分でLLM側をいじらないと…?となるとちょっとハードル高くなってきますね。
  • ラズパイだと電源ケーブルが必用になるので、マイコンに落とし込んでさらなる小型化を目指したくなる
  • Wifiの設定をスマホからしたい。
  • 元のミミクリー同様に動かしたい。

とはいえソースコードも100行程度で簡単にAI会話ロボットが作れてしまいました。同種の製品として有名なR〇〇〇がそこそこな金額しますし、それなら自分で作っちゃえと。それが(そこそこ)実現できる時代が現実的になってきていますね。

Uhara

Uhara / engineer

SEです。AWSやGCPなどサーバやクラウド周りはお任せください。趣味はギターとカフェ巡り。