「LLM・LLM活用 Advent Calendar 2024」の22日目です!
はじめに
私は科学部Robotics班でプログラマーとしてロボットサッカーをしている高校二年生です。来年には引退でそれまでに後輩に向けて技術継承をしなければいけません。ちょうどLLMを使った開発をしてみたいを思っていたので、私の世代の技術を持ったAIキャラクター「ノア」を作ってみようと考えました。
ただのツールは愛されない
技術継承AIをツールではなくキャラクターとして作ることには、作っている私が楽しいということ以外にも意味があります。それは「ただのツールは愛されない!!」ということです。せっかくシステムを作っても使ってくれる人がいなければ意味がありません。キャラクター自体をまた次の世代まで残したいと思ってもらい後輩たちによる改良を重ねて技術と共に少しでも長く生き続けてくれたらいいなと考えています。
使用しているもの
- Llama-3-ELYZA-JP-8B
- Gemini2.0flash
- AivisSpeech
- VMagicMirror
- VRoidStudio
現在実装できているもの
実は部活がテレビ番組で取り上げてもらう機会がありそれにあたって急ぎで作ったため仮で組んでいる部分がかなりあります。
1.キャラクターとしての設定を守った会話
単純なプロンプトでのチューニングです。名前や役職に関しては問題ありませんが、口癖の設定が難しく関係のない文脈で暴発してしまうことが多々あります。長期の運用で保持しやすいようにローカルで動かそうと考えていましたが、生成に時間がかかってしまうとテレビ的に見栄えが悪そうだったので今回はGeminiで動かしました。
2.疑似的にRAGみたいな動作をさせること
時間がなかったのでとりあえずGeminiに部活に関する技術や情報を箇条書きでプロンプトとして与え、質問に関する情報だけを抜き出してそのまま出力するようにしました。与えた情報もそこまで多くなかったため問題なく動きましたが、ローカルだけでは処理速度やコンテキストウィンドウが足りなくなってしまうのでローカル移行に向けてRAGに変更する必要があります。
ユーザーの入力に対して関係のある事象思われる情報を以下の情報群の中からそのまま抜き出して出力して。該当するものが複数ある場合複数抜き出して。
もし関係のある事象がなかった場合は「なし」と出力して
※ユーザーの入力が人に尋ねるような文章の場合でも必要な情報だけを箇条書きのように出力してください。
【科学部Robotics班について】
・科学部Robotics班は主にRCJというロボットサッカーの競技を活動の主軸としている。
・科学部Robotics班の中でもteamShoun.AEdtionは2024年の大会において全国大会で2位、オランダでの世界大会で15位を記録している。
・日々の活動としてRCJで上位を目指し、大会のない閑散期には部員の気の向くままに作りたいものを作ったりする(AIキャラクター,金属探知機,音楽プレイヤーなど)
...
3.AivisSpeechを使った音声出力
最近話題になっていたのでこれを機に使ってみました。llama3を使ったときは問題なく動作するのにGeminiを使用するとエラーを吐くという問題がありましたが印字可能な文字だけを取り出す処理を入れると正常に動くようになりました。
returnText = ''.join(c for c in returnText if c.isprintable())
4.VRMで動かすこと
VMagicMirrorを使わせていただいたおかげでそこまで時間もかからずすぐに実装できました。がしかし結局ここが一番難しいところでした。他の部員とビジュアルについての戦争が起きたのです。 最初はテレビに映るしありふれた感じの見た目にしよう派閥が強かったのですが、結局「その派閥側の選んだモデルのキャラクターは絶対科学部に入らない!そんなTHE陽キャ真面目系の子が科学部なわけねえだろ!」という思想が広がり現在のデザインになりました。(一応髪色は大人しくなりました)
これからやりたいこと
-
完全ローカル化
- 現在APIを使用して動かしている部分をllaam-cppなどで軽量化しつつローカルで動くようにしたい。
-
RAG
- 後輩たちにメンテナンスや改良を重ねてもらうことも考えると簡単に情報を追加していけるように作りたい。
-
長期記憶能力
- RAGの応用として実装するであろう機能。
- 単純に知識だけ引き継ぐのにはいらない機能ですが、愛されるキャラクターにするためにはなくてはならない機能だと思っています。
-
一つのアプリとして統合すること
- 現在は見かけがいい感じに動くように様々なツールを使っていますが使いにくいのでなるべく起動するソフトの数は減らしたいと思います。
- 音声合成部分はともかく見た目の部分はそこまで強くないPCで動かすことも考えるとpyxelでいくつかの画像を切り替えるだけでも十分かなと考えています。(超てんちゃんみたいな感じにしたい...)
懺悔
本当は今回の記事とは別でLLMの推論の過程の様子を表現したクリスマスツリーを作りたかったのですが、時間もお金もなかったので断念しました。LLMの推論で動くオブジェつくりたかったなぁ…。