見出し画像

AIキャラと会話できるアプリNeNeAIの開発の裏側

個人プロジェクトで半年ほどコツコツつくっていた、AIと楽しく会話できるNeNeAIを本日リリースしました。

AIとチャットできる系のアプリはChatGPT以後にたくさんでてきているのですが、3Dの動いてしゃべって返事をしてくれるアプリは実はそんなにありません。というか、僕自身は満足いくアプリをまだ知りません。

素のChatGPTはまだまだネット界隈じゃない人たちにとってマイナーなものです。僕の妻も存在は知っているものの使っていませんでした。

それでもChatGPTを日常的に使っている人は多大な恩恵をもらっていて、もはやこれがないと成り立たないくらいになってます。特に未知のことを調べていく際に、検索や書籍と併せて使うとその威力は半端ないです。

そんなことから、一般の人でも楽しくしゃべれて、知識も得ることができるものをつくれたりしないかなーと考えていました。奥にいけばChatGPTですが、側を変えることでもっと親しみやすく使われるものをつくれるんじゃないかなと。

AIチャットくんはLINEで使えるようにしたことで、裾の尾を広げることに成功し、200万人以上という人たちが爆発的に利用しました。

ChatGPTはそのままでは無味乾燥な回答をしますが(それでいいのですが)、楽しく会話しながら知識を得る体験ができるといいなーと思い、アプリで動くキャラと話せると面白そう、ちょっとつくってみよう、というところからはじまりました。

Unity詳しくない問題

スマホアプリでキャラを動かすとなればUnityかUnreal Engineが必要です。Unityは過去に何度か触ったことはあったので、Unityに決めました。

ふだんはWEBの開発がメインなので不安はちょっとあったものの、ChatGPTを使うことでいけるだろうと思っていました。

Unityでの開発

実際開発は大きな問題なく進めることができました。最初こそUnityの仕組みを把握するのに時間がかかりましたが、Unity自体がたくさんの開発者に使われているのでネットでの情報も豊富ですし、ChatGPTも学習しているため、ほとんどやりたいことは実現できています。

基本はオブジェクトをつくり配置する、挙動をInspectorやプログラムで制御する。プログラムはC++で書かれているんですが、これもGPT先生で問題なくカバーできます。

ソースコードが長くなるとGPTにコンテキストを理解させるのに苦労しますが、やりたいことと、できていることを説明すること、これを細かく区切ることで解決していけます。並列でタスクを動かしている時にフラグで制御したりといったパターンが増えた時の動作確認は時間がかかりました。

キャラはBOOTHで購入

BOOTHがあって本当に助かりました。さすがに自分でキャラをつくることまではいくら時間があっても足りないです。UnityにもAssetStoreがあり、いろんなパッケージを購入することでプログラムをショートカットできます。

それでもかわいいキャラやクオリティが高い素材は少ないです。しかし日本にはBOOTHがあります。ハイクオリティな素材がスーパークリエイターによって生み出されており、商用利用のものを選んで購入することができます。この仕組みがあって本当に助かりました。

BOOTHでキャラを探す

BOOTHでキャラを仕入れますが、animationまではついていません。アニメーションは別途assetstoreやBOOTHで購入してキャラとつなぎあわせていきます。

アニメーションを設定する

キャラが棒立ちしているだけだとつまらないので、数秒感覚でなんらかのアクションを行うようにしています。同時にキャラの表情もランダムに変化をするようにしています。

キャラの表情は会話の内容でも変化します。うれしかったり、楽しい時に使われるフレーズがあると笑ったりするようにしています。

また、キャラを回転させたりズームで近寄ったりもできます。なるべく何か触ったり動かした時に反応がある方が楽しいですよね。このあたりは、自分の子どもたちにも使ってもらってアドバイスもらいました。ちなみに何度も回転させるとキャラがしゃべったりします。

5人のキャラを準備

最初はキャラも一人だけだったんですが、いろんな性格のキャラがいたほうがおもしろいだろうということで5人に増やしました。男性キャラもいます。

個性的な5人のキャラを設定

裏側のgptは3.5を使っていますが、systemで指示をいれても、そのままではなかなか敬語がはずれません。試行錯誤していた8月に、OpenAIから3.5 Turboのファインチューニング対応がでてきました。

まず、キャラの設定をつくり、質問例を考えます。次にplaygroundで設定をいれてキャラにgpt4で返答をしてもらいます。

playground

その結果をスプレッドシートに保存。各キャラで100パターンくらいつくりました。

スプレッドシートに保存

gpt3.5だとキャラ設定をしても、なかなかうまく反映されません。特に口調は難しかったです。ですが、gpt4にすると設定をふまえた良質な返答が返ってきます。このデータを学習させることで、3.5のファインチューニングでもgpt4に近い返答のスタイルが返ってくるようになりました。

ファインチューニングの詳細は、我らがnpaka先生の記事が参考になります。

ファインチューニングのおかげでコストを抑えつつ良質な返答が返ってくる基本システムができました。

音声の問題

魅力的なキャラには声も大事です。いくつか検討した中で日本語だとVOICEVOXが最高に良かったのですが、アプリから呼び出すにはAPIをクラウドにおかないといけません。

実際にクラウドでサーバーをたてて設置してみたのですが、レスポンスが返ってくるまでにとても時間がかかり、実用的じゃなかったのであきらめました。ハイスペックなサーバーにすれば解決できるかもしれませんが、月数十万も払うのは無理です。

そこでいろいろ試した結果、最終的にGoogleのText-to-Speech AIにしました。安定性、コストの兼ね合いを考えてです。音声はちょっと理想的ではないんですが、ピッチを早めたりすることでごまかしています(汗)

ここは今後日本語でクラウドで使えるいい感じのAPIがでてくれば乗り換えたいなと思います。(VOICEVIXさんお待ちしてます!)

コストの問題

このアプリではさきほどの音声でのText-to-Speech AIと、OpenAIのgptのAPIを使っています。これは当然ながらユーザーが会話すればするほど、お金がかかります。

というわけでほとんどのAIチャットアプリは回数制限で有料化しているものが多い現状です。それも検討はしたんですが、これ系のアプリで月額課金はちょっと厳しいのではないかなーという感覚から、無料で行くことを決め、かわりにUnityAds(広告)をいれることにしました。

ここは実際に使われた分と広告収益が見合うのかは今後を見てみないとわからないところです・・・が、まずは使われないと意味もないので、後で考えることにします。

もちろんコストを抑える工夫もしています。このアプリはAIからしゃべりかける機能があります。

実際、こどもや妻にアプリを使ってもらうとき、いきなりアプリを開いてもこっちから何をしゃべっていいかわからないんですよね。なので、そんなときはAIから話題を振ってもらえる機能をつくりました。

この内容、リアルタイムにgptを使っているわけじゃなく、あらかじめパターンを用意しているのです。なんとその数、全部で約3,000パターン…

キャラごとの会話例

さらにさらに実はこのアプリ日本語だけじゃなく、英語も対応しています。これをDeepLを使って翻訳しました。

英語に翻訳

まとめ

ということで個人プロジェクトということで仕事の合間にコツコツ進めていたものですが、ようやく世に出すことができて一安心です。無料で遊べますので、ぜひ一度試していただいて、特にchatgptを使ったことがない人がまわりにいましたら紹介していただけるとうれしいです。

次もやりたいテーマがあるので、今日からそっちへ進みます。

気に入っていただけたら、シェアしていただけるとうれしいです。