ロールプレイチャットシステムを開発中その4
- Category: 生成AI関係
システムの大幅改修中
画像生成UIがほぼほぼ完成してしまったのでこっちに注力。お盆休みを利用して一気に進めた。まぁ以下の内容はお盆前に終わらせたものとかも混ざってるけど。
UIについて
- UIを刷新してスマホでも利用しやすくなった。
- 手順としてはClaude Designに要件を渡してモックを作ってもらって、それをCodexに渡して実装させた。Codexにいきなり実装させると試行錯誤のトークン数がもったいない。
新規実装・改修した内容
- 今まで全データをJSONファイルで保存していたものについて、セッション情報とか記憶情報なんかはSQLiteに保存するようにした。
- Irodori-TTS-Server を導入してBotの出力後にセリフの読み上げができるようになった。キャラ設定でキャラごとにサンプルボイスを選択できるようにした。実装当初は Irodori-TTS-500M-v3 いつのまにか Irodori-TTS-v4-Small を利用したもののバージョンアップしていたので、再調査のうえ実装しなおす羽目になった。
- 当初はシステムの設定内に記述するプロンプト次第でロマンス要素も含むTRPG的なものも遊べるようにみたいに進めていたけど、構想ベースになってる私が作ったGeminiのGem用に書いてたシステムプロンプトにもとづいてロマンス要素に特化することにした。汎用システムだと開発を進める意味があまりない。Marinara-Engineで良くね?みたいな。
- ステータス処理を本格実装した。システムとLLMでうまく仕事を分担して数値計算する感じ。GeminiのGemでは完全にLLM任せだったところを、LLMに文脈判断だけ ( true または false ) を担当させてシステム側がそのフラグを受け取って更新するイメージ。LLMに数値管理を任せると破綻するので、数字は扱わせない方針。挙動としては、例えば好感度が80になったらユーザーからの告白でキャラクターとの関係が進行する判定が発生する、欲求度が低い時に身体的接触を図ろうとすると拒否られる、とか。毎ターン更新予定。
- シーン情報の導入。今いる場所とかどういった場面なのかとかいう大雑把な情報。こっちは3ターン毎くらい。
- 感度レベルの導入。ロマンス行為でキャラクターが絶頂するたびに経験値が蓄積して、レベルによって高揚度 (100になると次のターンに絶頂) の上昇値に補正がかかる。身体的開発、みたいな。
- 現状は自動更新機能はないのでボタンをクリックして手動更新。自動更新したいところなんだがステータス処理が複雑すぎるせいなのか更新にめちゃくちゃ時間がかかるようになってしまったのでボトルネックになっている箇所を調査中。
- 実装済みだった記憶機能は直近の記憶情報3件とピン止めしていた最大15件をBotの出力用プロンプトに入れるとかいう単純な仕組みだった。これをEmbeddingモデル (Qwen3-Embedding-0.6B) を導入して簡易的なベクトル検索を導入して改善した。はずなんだが、開発作業ばかりでシステムを使い込めていないので、機能しているかどうかがどうもよくわからん。本末転倒感がすごい。
- ComfyUIと連携した画像生成機能は実装済みだった。ただし生成速度が遅くて話にならなかったので、システムで利用するベースモデルを8ステップくらいでまともな画像が出てくるAnima-Turboに変更 *1 。さらに画像生成プロンプトもキャラクターステータスに脱衣状況や今の服装などを導入し、前述のシーン情報も利用することでセッションの進行で生成するたびに服装や場所が毎回変わる現象を減少させた。
- 画像の削除と再生成機能もなかったのでそれも実装。
- ついでなのでキャラクター設定内でも画像生成用のプロンプトをLoRAのトリガーワードを含めた身体的特徴の欄と、初期衣装プロントに分けた。これによってステータスに服装情報がある場合はそれを使って、ない場合は初期衣装タグを使って画像生成という流れにした。
機能改修に関しての全体的な方針
- LLMに何かさせる場合は「特定の形式のJSONを返せ」といった指示を出さないようにしている。ローカルで動く程度のモデルとか、DeepSeek-V4あたりだと返答形式の遵守が厳しめで、システム側でエラーになりやすい。ふわっとした形式のテキストを返してもらってそれをシステム側で利用できる形に整形といった手順にしているつもり。
今後の予定
- 前述したとおり現状ステータス更新処理に時間がかかりすぎるのでそこの改善が再優先。
- NSFW表現の多様化。どうもLLMの文章が単調なのでシステムで語彙力を高められないか検討中。
- ステータスなどの自動更新機能。バックグラウンドのエンドポイントを別途設定できるようにして、軽量・高速LLMでユーザーがキャラクターとやり取りしている裏側で処理させたい。
- スマホでの使い勝手が未だに微妙なところがあるので改善したい。
- ランダムイベントの導入。「キャラクターとデート中に突然雨に降られる」「不倫してて行為中に着信が入る」とかそういうの。
- キャラクター側の短期意図の導入。「ユーザーと恋人になりたい」「今度はデートで水族館に行きたい」とか。現状だとあまりにも展開がユーザーの入力頼みになってしまっていて、遊んでいて私が面白くないのでランダム要素というか、キャラクター主導の要素が欲しいなということで試行錯誤中。
- Irodori-TTS-Serverでの演技指導の導入。caption を利用してどんな話し方なのか指示できるらしいので演技力を向上させたい。とか何とか言ってたらIrodori-TTS本体が Irodori-TTS-v4.1-Small になってたのでまた入れ替え作業が必要そう。今回は前回ほど作業量が多くないと思う。APIとかはそのまま使えるらしいし。
その他
- なんつーか、こういう話してる日本語コミュニティがあんまりない気がする。モデルの性能がどうのとか、そういう技術的な話ばかり。
- 将来的にAnimaベースのモデルであればほかに変えられるようにしてもいいかなとは思った[↩]