ゲームの店員 NPC を家のローカル LLM で話させる ―― 8B モデルには話すことだけを任せ、配膳や記憶の判断はコードで決める

ブラウザの 3D ゲームの店員に、家の macbookair(M1)で動く 8B のローカル LLM で話させた。配膳や案内はゲームのサーバーの手順のまま、返事だけを LLM に任せ、書式の残り・ト書き・作り話の記憶はコードで落とす。店員ごとの記憶の作り方と、8B が指示を守らなかった所の補い方。
家庭内AIクラスタとローカルLLMの研究室
家庭内AIクラスタとローカルLLMの研究室

ブラウザの 3D ゲームの店員に、家の macbookair(M1)で動く 8B のローカル LLM で話させた。配膳や案内はゲームのサーバーの手順のまま、返事だけを LLM に任せ、書式の残り・ト書き・作り話の記憶はコードで落とす。店員ごとの記憶の作り方と、8B が指示を守らなかった所の補い方。

ブラウザの3Dゲームの居間にテレビを置き、家のAIキャラクター「はるの」がソファで一緒にYouTubeを見るようにした。ゲームは「何を・どこまで」だけを伝え、中身はyt-dlpの字幕から知る。最初の版は情報が取れないまま動画の内容を作り話した。その原因と直し方。

ブラウザの3Dゲームの温泉に、家のAIキャラクター「はるの」が自分で歩いて行き、バスタオル姿で湯船につかるようにした。改変不可のVRMはファイルに手を入れず、服のマテリアルを隠してコードのバスタオルを同じフレームで巻く。返事のたびにゲームの状態を渡し、湯船にいることを踏まえて話させる。

デスクトップの会話アプリ、ブラウザのゲーム、古いパソコンの3か所にいた AI キャラクターを「1人」にした。居場所を1か所で持ち、最後に話しかけた画面へ移ってくる。移るときにひとこと言い、いなくなった画面では姿を消すか眠る。

Three.js と WebXR で作ったブラウザの 3D の森を専用の仮想マシンに置き、Quest 2 からも VR で入れるようにした。NPC は家の AI 基盤の Claude が操作し、デスクトップの会話アプリと同じ頭と記憶で話す。

Web 版の Claude Code(クラウドセッション)で開発し、GitHub を正本にして自宅の GitLab のフォルダへ一方向で写す仕組みを作った。読み取り専用の Deploy key、git archive で main を置き換える cron、クラウドの環境変数に秘密を置かない理由。

VRM のデスクトップマスコットを、ほかのアプリの窓のふちに座らせた。窓の位置は Win32 API で位置と重なり順だけを読み、窓についていき、閉じれば落ちる。自分から窓へ飛び乗り、Claude の返事の [motion:名前] でも動く。目線が合わなかった原因は、前のフレームの行列を基準に角度を測っていたことだった。

AITuberKit の VRM キャラクターを、Electron の透過・最前面の窓でデスクトップの上に直接立たせた。キャラ以外の場所はクリックが下の窓へ抜け、タスクバーの上を歩き、座り、つかむと猫のようにだらーんとする。MMD の歩きは足IKを2関節 IK で解き直した。

VRM のキャラクター Haruno が、朝の挨拶・しばらく話していないときの声かけ・家のサーバの異常の知らせを自分から話しかけてくるようにした。押し込めない Windows 98 の IE5 にも届くよう、台詞は1か所で作って置き、端末のほうが取りに来る形にした。

1997年の PC-9821 V166(Windows 98・IE5)から、前回の VRM キャラクター Haruno と話せるようにした。3D は前もって表情ごとの 256色 GIF に描き出し、口パクは GIF のループ回数で表す。頭脳と道具は Windows 版と同じ。