ししかわです。
オープンソースのコミュニケーションロボット「スタックチャン」の製品化プロジェクトを社内研修の一環として進めています。

巷で大流行中の「ChatGPT」とスタックチャンを連携させて「おしゃべりロボット」を作りました。
こちらは後半の記事になります。前半はこちら。

スタックチャン × ChatGPTデモ
スタックチャンとChatGPT APIの連携を実装したデモがこちらです。
ユーザがスタックチャンに話しかけると、スタックチャンがかわいい声で答えてくれます。
ユーザの「自己紹介して」という問いかけに「わたしは スタックチャンというロボットです」と答えています。つまりChatGPTがスタックチャンとして振る舞っています。Web版のChatGPTをお使いの方はご存知だと思いますが、最初に「あなたはスーパーカワイイロボットのスタックチャンです」という設定を与えて会話をスタートすることで、ChatGPTはこの設定を守った応答を考えてくれます。
デモの仕組み
仕組みは次のとおりです。音声認識や音声合成などの重たい処理は外部のPCで行います。
- PCはユーザの音声を認識します(音声認識ライブラリのVOSKを使います)
- PCは認識結果のテキストをスタックチャンに送信します
- スタックチャンはChatGPT APIにユーザの発言内容を送り、AIからの返答を得ます。
- このとき認証用のAPIキーに加えてチャット履歴を送信します。
- チャットのメッセージは、役割(role)と内容(content)を持ちます。roleは、ユーザーやAI、システムのどれかを示し、contentは実際のメッセージ内容を表します。
- システムロールを使って、ChatGPTのキャラクター設定や受け答えの指示を与えることができます。
- AIからの返答を音声データに変換します(音声合成エンジンのVOICEVOXを使います)
- 音声データを再生します。
以上のデモは私が開発するModdable版のファームウェアでお試しいただけます(起動方法はドキュメント参照)。 基本となるモジュールを全てJavaScriptで実装しているため、Arduino(C++)に馴染みの無い方やWebエンジニアの方でも使えます。
今後は環境構築なしでWebブラウザを使ってアプリを書き込めるようにするなど、始めやすく、使いやすく改善する予定です。
応用例
この構成を出発点に色々な改造が可能です。
- ユーザの発話だけではなく、特定の時刻(12時になりました。お昼休みにしましょう!)やセンサの値の変化(二酸化炭素が増えてきたので窓を開けませんか?)、あるいは他のWeb APIをトリガーにしてスタックチャンに喋ってもらう。
- スタックチャンの数を増やす。ユーザとスタックチャンだけでなく、スタックチャン同士で会話してもらう。
- ChatGPTの返答に特別なコマンドを埋め込んで、発話以外のアクションを実行してもらう。外部のAPIと繋いで、スタックチャンにテレビやPCを操作してもらう。
あなたならスタックチャンと一緒に何をしますか?
ChatGPTを使ってみた感想
何よりまず、受け答えがとても自然で驚きました!初めて「ロボットとちゃんと会話できた」と実感しました。
APIの使い方も簡単で、すぐに色々なシステムに組み込んで使えそうです。
一方、ChatGPTはあくまで「テキストによるチャット」を前提としたAIであり、コミュニケーションロボットの「音声による会話」に本格的に組み込むにあたり課題もあります。
- 返答の精度:与えたキャラクター設定が効かなかったり、返答が固い(AIの地が出てしまう?)ときがあります。デモで使ったのはGPT-3.5というモデルですが、この次世代にあたるGPT-4がすでにリリースされており、精度の向上が期待できます。
- 応答速度:返答までに数秒のタイムラグがかかります。処理中であることがユーザに伝わるように、スタックチャンの表情を変えるなどの工夫が必要です。
- 対話管理:ユーザが発話を区切った時にロボットが応答するべきか、もっと聞くべきなのかを判断するなど、スマートスピーカー的な「一問一答」のやりとりから脱却することでより自然な会話が実現できます。
スタックチャンキット化計画
スタックチャンは「机の上にロボットがいる日常」を広めるために生まれてきました。何もしなくてもカワイイスタックチャンですが、ChatGPTとのコラボレーションによって様々な用途が生まれ、さらなる普及への道筋が見えてきました。
この感動をたくさんの人に体験してほしい!
ということで、次の記事ではキットの詳細についてご紹介していきます。