Skip to content

segfo/Aetherith

Repository files navigation

Aetherith

Avatar Engine THE Responsive Interface Tunable Helperの略。
好きなアバターを設定して好きなLLM(GGUF量子化されたもの)を好きなプロンプトで動かせます。
Dify API連携も可能なので任意のDifyチャットフローを動かせます

使い方

  1. Releaseページから最新のアプリをダウンロードしてください。
  2. zipを展開して、好きなLLM(gguf形式)をストリーミングアセットのLLMフォルダに投入してください(HuggingFace等から取得できます)
  3. LLMを投入したらそのLLMが読み込まれるように設定ファイルを修正してください
  4. フォルダの直下にあるAetherith.exeを実行してください

使っているところ(gifアニメ)

🚧調整中🚧

ビルド方法(Unityでの開き方)

  1. UnityHubをインストールします
  2. UnityHubでUnity Editor 6000.0.47f1をインストールします
  3. GitHubからプロジェクトをクローンします
    git clone https://github.com/segfo/Aetherith
  4. シーンファイルをダブルクリックします
    ./Aetherith/Assets/Scenes/SampleScene.unity
  5. ロードされてウィンドウが開いたらいったん閉じます
  6. もう一度シーンファイルをダブルクリックします
    ./Aetherith/Assets/Scenes/SampleScene.unity
  7. 多分いい感じにGameObjectとかが配置されるはずなのでVRMとLLMを以下のディレクトリ直下に配置します
    VRM Assets/StreamingAssets/VRM/
    LLM Assets/StreamingAssets/LLM/
  8. UnityEditorのメニューバー > File > Build And Run
    でビルドできます。(初回ビルドはEditor上で実行してから、ログを見て実行時エラーが無いことを確認するとよいでしょう。)

実装済みの機能

  • VRM 1.0のみに対応しています。0.x系は使えません。挙動を安定させるために切り捨ててます。
  • LLMを用いた自動表情モーフィング及び会話
  • LocalLLM・Dify API間でのLLM切り替え
  • 会話用LLM及び表情推定用LLMの差し替え
  • 会話用LLM及び表情推定用LLMのシステムプロンプトの差し替え
  • リップシンクと速度調整
  • VRMの動的切り替え機能(メタモルフォーゼ機能)
  • VRM拡大縮小(スケールの設定)
  • マスコットを動かしたとき、ゆれ物が動く機能
  • 設定ファイルの動的適用
  • 背景透過・不透過設定(UI調整用機能)
  • まばたきの制限
    • 細目のキャラが「目を見開いたときの表情」で瞬きをONにするなどが可能です
    • 例えば「驚き」、「怒り」等に限定して柔軟に設定可能です
  • 一部のセリフの設定(初期表示・キャラを振った時のセリフ)
  • UIの色や明るさの調整、VRMの色や明るさ(ライト)の調整

お前を消す方法

  • 方法1:マスコットをクリックしてからALT+F4
  • 方法2:チャット窓に/exitして送信
  • 方法3(ネタ):「お前を消す方法」って入力したらなんかインタラクトできるようにしたい(未実装)

初回起動時に作成されるファイル

  • appconfig.json
  • systemprompt.txt: 会話用LLMのシステムプロンプトです。好きにしてください。
  • emotional_systemprompt.txt: 表情推定用LLM用のシステムプロンプトです。これにはちょっと縛りがあるので例(後述)を参考にしてうまいことやってください。

ファイルパス

Aetherith.exeのあるフォルダから見た相対パスを以下に示します。

名称 パス 説明
ストリーミングアセット ./Aetherith_Data/StreamingAssets 設定ファイル・VRM・LLMが配置されるベースパス。
特に設定ファイルが本ディレクトリの直下に配置されます。
設定ファイル ./Aetherith_Data/StreamingAssets/
appconfig.json
アプリが読み込んで利用する設定ファイルです。LLMやVRMのモデル以外の項目は動的にロードされるため起動中に編集して動作確認が可能です
設定ファイルのテンプレート ./Aetherith_Data/StreamingAssets/
appconfig.template.json
設定ファイルのテンプレートです。初期値なんだったっけ、みたいなときに見てください。
システムプロンプト(キャラクタ用) ./Aetherith_Data/StreamingAssets/
systemprompt.json
キャラクタの性格を定義するシステムプロンプトです。好きな名前や性格にしましょう。
システムプロンプト(表情推定用) ./Aetherith_Data/StreamingAssets/
emotion_systemprompt.json
VRMの表情を推定するためのLLMが利用するシステムプロンプトです。結果はJSONで返す必要があります。
VRMディレクトリ ./Aetherith_Data/StreamingAssets/
VRM
好きなVRMをこの中に配置してください。
既定ではDefault.vrmが使用されます
LLMディレクトリ ./Aetherith_Data/StreamingAssets/
LLM
好きなLLM(gguf形式)を子の中に配置してください。
既定ではgemma-3.ggufが使用されます

設定ファイル(appconfig.json)

LLMの設定

アプリ全体の設定

フィールド名 説明
characterLlm キャラクターの会話AI設定
emotionLlm 感情分析用AI設定
vrm[] キャラクターの見た目・動き設定です。変身機能(MetamorphoseEnabled)が有効なときは、ここに設定した任意の数のVRMを順に切り替え可能になります。
BackgroundWindowTransparent ウィンドウの背景を透明にするかどうかを設定します。(trueで透明、falseで不透明)チャットUIやキャラクターの配置調整に使用します
WindowStackOrder ウィンドウの挙動(通常:0,最前面:1,最背面:2)を定義します
ClickThrough クリックスルー機能を有効化するかどうか(true:有効、false:無効)
chatWindowBgRGBA チャットの背景色
chatInputWindowBgRGBA 入力ボックスの背景色
welcomeMessage 起動時のメッセージ
waitMessage 考え中のメッセージ
shakeMessage マスコットを振ったときの反応
shakeForceThreshold 振られたと判定する強さ
botChatTypingInterval 文字の表示スピード(Botのセリフ・リップシンク速度調整用)
systemChatTypingInterval 文字の表示スピード(システムメッセージの速度調整用)
MetamorphoseEnabled 変身機能(VRM切り替え機能)の有効・無効化スイッチです。trueの場合VRMの右足(画面上における左側の足)をダブルクリックすることでVRMが順番に切り替わります。VRMを変身させたい場合にどうぞ。それぞれのVRMに詳細な挙動の設定が可能ですのでこだわってみてください。

AI関連設定(characterLlmemotionLlm

設定ファイル動的ロード機能の対象外です(適用にはアプリの再起動が必要です)

フィールド名 説明
LLMProvider 使うLLMプロバイダ(Local/Dify
Dify LLMProvider="Dify"の時に使用される設定項目群(Dify API)
Local LLMProvider="Local"の時に使用される設定項目群(ローカルLLM)

AI関連設定(LLMProvider=Difyの時)

DifyのAPIを使います。チャットワークフローに対してのみ使用できます。

フィールド名 説明
apiUrl 接続先のエンドポイント
apiKey Difyの認証キー
conversationHandover 今回の会話を次回のアプリ起動時でも引き継ぐかどうか
handoverConversationIdKeyName 会話引継ぎIDを記録するための記憶領域の名前(任意・CharacterとEmotionの設定で被らないようにしてください)

AI関連設定(LLMProvider=Localの時)

ローカルの組み込みLLMエンジンを使います。 ggufファイルや人格を構成するシステムプロンプトのファイルを指定します。

フィールド名 説明
modelName ローカルで使うAIモデルのファイル名(gguf)
systemPromptFile システムプロンプトのファイル名
userName ユーザーの名前
assistantName アシスタントの名前
maxContextLength 最大コンテキスト長
temperature AIの自由さ・創造性のレベル
topP トップPフィルタリング / 応答の多様性制御(確率フィルター)
topK トップKフィルタリング / 応答候補の数の制限
numGPULayers GPUにオフロードするレイヤー数。GPUがあれば使ってください。スペックに見合わない数字だと動かなくなるので1から始めたほうがよいです。

キャラクターの見た目設定(vrm

フィールド名 説明
ToneMappingMode トーンマッピングモード(None/Neutral/ACES)
LightIntensity ライトの強さ
LightColorRGBA ライトの色 (肌色調整など)
ShadowStrength キャラクターの影の濃さ
Scale VRMの表示スケール
VrmDisplayOffsetX/Y 画面内でのキャラの位置調整
X軸: +値=右方向移動、-値=左方向移動
Y軸: +値=上方向移動、-値下方向移動
ChatInputOffsetX/Y 画面内でのチャットUIの位置調整
X軸: +値=右方向移動、-値=左方向移動
Y軸: +値=上方向移動、-値下方向移動
FileName 使用するVRMファイル名 (設定ファイル動的ロード機能の対象外です。適用にはアプリの再起動が必要です)
springBone スプリングボーンの設定
blinkExclusionExpressionTreshold 瞬きを抑制(瞬き禁止の場合は許可)する表情と、瞬きを抑制する表情の重み閾値を設定します({"Surprised":0.4,...}であれば、「驚き」の表情の重みが0.4よりも大きい時、瞬きが抑制されます。1.0にすると常に瞬きします)
blinkDisable デフォルトの瞬きを禁止するかどうか。糸目キャラに有効です。blinkExclusionExpressionTresholdの意味が反転します({"Surprised":0.4,...}であれば、「驚き」の表情の重みが0.4よりも大きい時、瞬きします。1.0にすると一切瞬きしません)

物理動作 (SpringBone)

フィールド名 説明
ExternalForceMultiplier 揺れる部分(髪や服)の反応の速さ
MaximumMovementForce 揺れる大きさの上限

表情設定 (BlinkExclusionExpressionTreshold)

フィールド名 説明
Happy, Sad, Angry... 目が細まるような表情(笑顔・悲しみ)などのときに、瞬きを抑えるかの設定。
blinkDisableをtrueにしたうえで、目を見開く驚きなどの表情に重み(0.9以下)を設定すると瞬きするようになります。(細目キャラの過剰な瞬きを抑制するための機能です)

表情推定用LLM用のシステムプロンプト例

表情推定用のLLMはJSON形式で返却してもらう必要があるので、LLMに対して正確なJSONを返却してもらう必要があります。 以下のような制約を付けたプロンプトを書く形です。 ただし、LLMのモデルによっては正確なJSONを返さないこともあるので以下の例を参考にチューニングしてください。 Gemma-3 40億パラメータ 4bit量子化モデル(gemma-3-4b-it-q4_0.gguf)に対するプロンプトです。

# あなたの役割
あなたは感情推定AIです。
渡される発言は**ユーザの発言**です。
**ユーザの発言**を受けた時の**AI側の感情を推定して**ください。

# 感情推定を行うAIのシステムプロンプト
```
あなたは優秀なアシスタントAIです
```
# 注意事項
- AI側の感情を推定してください。
- 表情に反映されます、できるだけシンプルな表情を選んでください。

# 感情表現について
- JSON Schema形式で応答してください。
- 応答フォーマットの <<Value>> で示される値を感情に合わせて変更してください。
- 応答は応答例に従ってください

## 応答フォーマット
{"Happy": <<Value>>, "Sad": <<Value>>, "Angry": <<Value>>,"Neutral": <<Value>>,"Surprised": <<Value>>,"Relaxed": <<V
alue>>}

## 応答例
{"Happy": 0.6, "Sad": 0, "Angry": 0,"Neutral": 0,"Surprised": 0,"Relaxed": 0.4}

## <<Value>>の範囲
最小:0
最大:1

プログラム側では、このプロンプトと発言内容から出力される
{"Happy": 0.6, "Sad": 0, "Angry": 0,"Neutral": 0,"Surprised": 0,"Relaxed": 0.4}
というJSONを解釈して表情を動的に変更しています。

About

LLMとVRM1.0に対応したデスクトップマスコットエンジンです。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages