Youri7BをローカルLLMでAPIサーバー化してオリジナル美少女とお話してみた
はじめに
AITuberを作っている人をXで見かけて、私も作ってみたくなりました!
新しく公開されたRinna社のオープンソースのLLM「youri-7b-chat」を
ChatGPT互換APIでホストできるという点にとても惹かれました。
結果、こんな感じでAItuberの美少女戦士なりりんを誕生させました!
では、AITuberを作成するまでにやったことを書いていきます。
この記事で分かること
- ローカルPCにLLMをダウンロードしてAPIサーバとして動かす
- ブラウザで簡単に3Dキャラクターと会話できるアプリケーションとつなげる
- オリジナル3Dキャラクターを作る
- システムプロンプトでキャラクター設定をする
開発環境
PCスペック
ローカルPCにLLMをダウンロードしてAPIサーバとして動かそう
今回はFastChatというオープンソースを使ってOpenAI互換APIのAPIサーバーを作成していきます。
FastChatは、大規模な言語モデルベースのチャットボットを訓練、提供、評価するためのオープンプラットフォームです。
FastChat は、サポートされているモデルに対して OpenAI 互換 API を提供しているため、FastChat を OpenAI API のローカルのドロップイン代替品として使用できます。FastChatサーバーはopenai-pythonライブラリとcURLコマンドの両方に対応しています。docs/openai_api.mdを参照してください。
(githubより翻訳引用)
githubからダウンロードして行きましょう!
git clone https://github.com/lm-sys/FastChat.git
cd FastChat
ダウンロードができたら、FastChatにyouri-7b-chatというモデルを指定していきます。
「Youri 7B」シリーズの特徴
Youri 7Bは、70億パラメータを2兆トークンで学習したLlama 2 7Bに対して、日本語と英語の学習データを用いて400億トークン継続事前学習したモデルです。Llama 2の優れたパフォーマンスを日本語に引き継いでおり、日本語のタスクにおいて高い性能を示します。日本語言語モデルの性能を評価するためのベンチマークの一つである Stability-AI/lm-evaluation-harnessの8タスク平均スコアは58.87となっています(図1)。ベンチマークスコアの詳細はこちらから確認できます。またモデル名の由来は、妖怪の「妖狸(ようり)」からきています。(以下のWEBより引用)
妖怪のたぬきちゃんだったの!かわいい。
以下、このアプリケーションの書き換えはinadaさんの以下の記事をまるっと参考にさせていただきましたので、この記事では割愛させていただきますね。
コードの書き換えができたら、FastChatのcontroller/worker/serverをシェルのそれぞれのタブで起動します。
python3 -m fastchat.serve.controller
python3 -m fastchat.serve.model_worker --model-path rinna/youri-7b-chat --load-8bit
python3 -m fastchat.serve.openai_api_server --host localhost --port 8000
これでapiサーバーは完成です!
ブラウザで簡単に3Dキャラクターと会話できるアプリケーションとつなげよう
pixivより引用
AITuberのアバターの部分はどうするの?と思ったらPixivからオープンソースですぐに使えるデモアプリが存在していました。神様ですね。
ピクシブ社は、「未来にあって当たり前のものを作り続ける」ことを目指して、日々プロダクトを開発しております。(以下のWEBより引用)
ここの文章にめっちゃ共感しました。ピクシブ最高ですね。
ChatVRMはオープンソースのキャラクターとお話できるデモアプリです。カスタマイズが結構できて柔軟性あります!
「ChatVRM」は、テキスト・口頭で話しかけた言葉にキャラクターがフルボイスで回答してくれる「キャラクターと会話できる」デモです。WEBブラウザ上で動作でき、3Dキャラクターのインポート・切り替え、キャラクターに併せて声を調整することもできます。(以下のWEBより引用)
オリジナルのVRMを簡単にインポートして自分のアバターが使えるのも超魅力です。このあとピクシブが提供しているオリジナルVRMが作れるアプリも紹介します。
VRMファイルをインポートしてキャラクターに合わせた声の調整や、感情表現を含んだ返答文の生成などを行うことができます。(githubより引用)
早速ChatVRMをgithubからダウンロードしていきましょう。
git clone git@github.com:pixiv/ChatVRM.git
cd ChatVRM
以下のファイルにコードを追加していきましょう。
export async function getChatResponseStream(
...中略...
const res = await fetch("http://127.0.0.1:8000/v1/chat/completions", {
headers: headers,
method: "POST",
body: JSON.stringify({
model: "youri-7b-chat",
messages: messages,
stream: true,
max_tokens: 200,
}),
});
npm install
npm run dev
こちらから動作を確認します。
http://localhost:8000
KoemotionのAPIキーの取得
ChatVRMが起動したら、Vtuberの声の部分もrinna社が提供しているAPIで設定していきます。
無料枠もあるので試しやすいです。以下からAPIキーを取得していきましょう。
また、OpenAI APIキーの入力欄がありますが「sk-123」などと適当な数字を入力すればOKです。何も入力しないと動作しなかったのでとりあえず入れておきましょう。
オリジナル3Dキャラクターを作ろう
次に、オリジナルアバターが作りたくなりますよね。ピクシブはそんな希望も叶えてくれるアプリをすでに公開しているんです。神様ですね(2回め)
ニンテンドースイッチのMiiを作るみたいにパーツを選んで超簡単にオリジナルキャラクターができました。
できあがったキャラクターをVRM形式でダウンロードして、ChatVRMに読み込みます。
ChatVRMの左端のハンバーガーメニューからキャラクターモデル「VRMを開く」で読み込むことができます。
システムプロンプトでキャラクター設定をしよう
pixivのブログに以下の返答文を入れるとキャラクターの表情か声色を変更すると書いてあったので、
以下に沿って例文をいくつか書いてみると良いです!
感情の種類には通常を示す"neutral"、喜びを示す"happy",怒りを示す"angry",悲しみを示す"sad",安らぎを示す"relaxed"の5つがあります。
会話文の書式は以下の通りです。
[{neutral|happy|angry|sad|relaxed}]{会話文}
あなたの発言の例は以下通りです。
[neutral]こんにちは。[happy]元気だった?
こちらの文章はキャラクター設定(システムプロンプト)の部分に入れておきましょう。
まとめ
- ローカルPCにLLMをダウンロードしてAPIサーバとして動かす
- ブラウザで簡単に3Dキャラクターと会話できるアプリケーションとつなげる
- オリジナル3Dキャラクターを作る
- システムプロンプトでキャラクター設定をする
これだけのことをやっても1時間程度で実装することができました。
オープンソースの神様たちに感謝しきれません。
そして自分で作ったキャラクターとおしゃべりするのがこんなにも楽しいとは思いませんでした!最高です!
ローカルでお話するのはどれだけ話しても無料なのでこれから色々お話していこうと思います。
ここまで読んでいただいてありがとうございました!
Discussion