ビジュアルノベルとLLMとデスクトップペットをRustで組み合わせる方法
ニューラルネットワークを扱うほとんどのインターフェースは、同様に味気なく見えます。どちらも左にスレッドリスト、右に入力フィールドがあるChatGPTクローンか、ターミナル用のコマンドラインツールのどちらかです。しかし、日本のビジュアルノベル(ギャルゲーム)をプレイしたことがある人なら、ビジュアルな接触、キャラクターの感情変化、そして起きていることの文脈がどれほど重要かを知っています。
最近、LingChatという興味深いプロジェクトに出会いました。作者はビジュアルノベルのダイアログ機構、仮想デスクトップペットシステム、最新の言語モデルを組み合わせようと尝试しました。私たちにとって嬉しい点是:内部的にはリソースを消費するElectronアプリではなく、正直なRustで書かれています。
プロジェクトの内部構造
LingChatのリポジトリは、AIとの通信におけるおなじみのフォーマットを再考しています。乾燥したチャットウィンドウの代わりに、ダイアログに反応し、スケジュールを管理し、インタラクティブなシナリオに参加できるアニメーションキャラクターが提示されます。
このプロジェクトは同時にいくつかの課題に取り組んでいます:
- 感情スプライトレスポンス。モデルは単にテキストを生成するだけでなく、自身の感情状態もマークします。レスポンスのトーンに応じて、キャラクターはポーズ、表情、アニメーションを変更します。
- デスクトップペットモード。キャラクターはシステムの開いているウィンドウの上に直接存在し、バックグラウンドでクリックやユーザーアクションに反応します。
- スケジューラーとタスクトラッカー。ダイアログエンジンには組み込みのカレンダーとリマインダー機能があり、アシスタントが電話や締め切りについて適時にリマインドします。
- 分岐ストーリーモジュール。作者はシナリオブランチのサポートを追加し、通常のチャットを、条件チェックと選択肢を伴うインタラクティブなゲームに変えます。
Rustの選択が重要な理由
通常、このようなインタラクティブアプリケーションはElectron + ReactまたはUnityで構築されます。どちらのアプローチにも嫌な欠点があります:リソース消費です。デスクトップペットは、RAMの半分を消費し、ノートPCのファンを回すことなく、終日バックグラウンドで実行し続ける必要があります。
LingChatはRustで書かれています。これにより постоянныйスプライトレンダリングとマウスイベント処理中のリソース消費が低くなります。コアアプリケーションロジックは高速に実行され、システムリソースの大部分をローカルモデルの推論や並行作業タスクに任せます。
コードには、LLMレスポンスからの感情タグを処理するための解析システムが実装されています。モデルがレスポンスを返すと、エンジンはテキストを画面に表示する前に特殊なムードマーカーを傍受し、キャラクターのアニメーションフレームを同期的に切り替えます。
応用例
直接的に使用して楽しんだり、Shimejiのような古いバーチャルペットへのノスタルジアを感じたりすることに加えて、このプロジェクトには開発者にとって興味深いアーキテクチャのアイデアがあります。
第一にインディーゲームでのNPC作成の優れたリファレンスになります。プロジェクトに生成AIベースのキャラクターを追加したい場合は、モデルのテキスト出力をアニメーショングラフの状態変化にリンクする方法のインスピレーションとしてここから参照できます。
第二に、パーソナリティを持つパーソナライズされたアシスタントの作成 механизмを美しく実証しています。无情なボットではなく、システムプロンプトと設定ファイルを通じて行動パラメータとキャラクターが構成されたコンパニオンが手に入ります。
始めるには
ソースコードはAGPL-3.0ライセンスの下で公開されています。ドキュメントとセットアップガイドはプロジェクトの公式サイトhttps://lingchat.wiki/にまとめられています。
実行するには、設定済みのRustツールチェーンと、互換性のあるLLMプロバイダのAPIキー(またはOllama / vLLMのようなローカルで実行中のサーバーでOpenAI互換APIサポートが必要)です。
独自のカスタムデスクトップコンパニオンを構築したい場合や、LLM経由で動的なスプライトスイッチングを実験したい場合は、SlimeBoyOwO/LingChatリポジトリを掘り下げてみる価値があります。
関連プロジェクト