ローカルLLMをUE5で動かす

11.1K Views

June 14, 24

スライド概要

UE Tokyo .dev #3 での発表資料です。
Local LLM を Unreal Engine で動かすためにプラグインを作成しました。会話デモを動かしつつ、「会話」っぽく見せる上で使っている「アンチプロンプト」というテクニックについて説明します。

profile-image

地域社会の安心に貢献し、暮らしやすい世の中をつくるために、主な事業として空き家専門の工事会社・不動産屋として空き家再生・活用に取り組んでいます。また、演劇教室「劇ゼミ」の運営、VR・AI技術開発も行っています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ローカルLLMをUE5で動かす 2024/06/14 UE Tokyo .dev #3 株式会社空き家総合研究所 麻場 健司

2.

麻場 健司 (𝕏:@KenjiASABA) • 株式会社空き家総合研究所 • 社員5人 • 全員、関西の学生劇団出身 • 主な事業は3つ • 空き家再生 • 演劇教室 • VR・AI技術開発 • 大阪 ⇔ 東京 ⇔ 茨城 • 毎月出張で関東に来てます

4.

UE × AI な技術支援も (お仕事募集中!) • KSIN • 株式会社ユニキャスト様、 株式会社デジタル・フロンティア様 • UE4.27 ×アバター接客システム • https://www.youtube.com/watch?v=W2fn3rl95QI • Vista Splat Pro • バーチャル・ライン・スタジオ株式会社様、 株式会社デジタル・フロンティア様 • UE5.1 × 3DGS • https://www.youtube.com/watch?v=PWtyqMOHOyg

5.

(ここから本題) Local LLM が流行っている 手元のPC上で オフラインで 動作する (ChatGPT的な) 大規模言語モデル

6.

https://about.fb.com/ja/news/2024/04/meta-ai-assistant-built-with-llama-3/

7.

https://azure.microsoft.com/ en-us/blog/new-modelsadded-to-the-phi-3-familyavailable-on-microsoftazure/

8.

https://x.com/Holy_fox_LLM/status/17885 12162732019888 https://x.com/Holy_fox_LLM/status/178881 1211712454961

9.

https://huggingface.co/Local-Novel-LLM-project

10.

Local LLM を UE5 で動かしたい! • 言語モデルを使った処理 • キャラクターと会話する • キャラクターに意思決定させる •… → これらをオンラインサービスに依存せずに実装できる!

11.

プラグイン作りました! https://www.unrealengine.com/marketplace/product/local-llm-plugin

12.

まずはデモexeを今すぐダウンロード! https://github.com/Akiya-Research-Institute/LocalLLM-Demo-UE5/releases ←ココ!

13.

モデルは別途ダウンロードして! 英語 :https://huggingface.co/QuantFactory/Meta-Llama-3-8B-Instruct-GGUF/... 日本語:https://huggingface.co/mmnga/DataPilot-ArrowPro-7B-RobinHood-gguf/... ↓ココ! ↓ココ!

14.

モデルを所定のパスに配置! ココ!

15.

設定を変更したら「Apply Settings」を押してね を実行!楽しい! https://youtu.be/5B2f8POzytA 「一人との会話デモ」⇔「複数人の会話デモ」の切り替え

16.

内部では llama.cpp を使用 https://github.com/ggerganov/llama.cpp • 言語モデルの推論をCPUとGPUの両方を使って高速に行うライブラリ • 使用するモデルフォーマット(gguf)の可搬性が高い

17.

がんばったところ(意外と大変でした) • (日本語などの)マルチバイト文字対応 • 出力されるトークンごとに文字に変換すると文字化けする • 何バイトの文字なのかを一つ一つ判別して、正しい塊で文字に変換すべし • 非同期実行 • 応答まで時間がかかるのでゲームスレッドをブロックしないように • 応答中に追加の質問を入力できるようにしたりも • 会話履歴のステートセーブ • NPCとの過去の会話の続きから再開できるように • LLMモデルのライフサイクル管理 • メモリ使用大&ロード遅いので、アクタ毎に保持しないように • 複数キャラクタ間での会話デモ • 「反応せずに話を聞く」モードと「反応して話す」モードを、複数アクター間で協調して動作させる • ユーザにも適宜反応を求める

18.

LLMおもしろテクニック アンチプロンプト =出力停止キーワード

19.

(例)初期プロンプト あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:

20.

ユーザ入力 あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん 黒字:初期プロンプト 青字:ユーザ入力

21.

モデル出力 あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力

22.

モデル出力続き… あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? ユーザ: 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力

23.

ここでモデル出力を止めたい! あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? ユーザ: ここでモデル出力を停止して ユーザの入力待ち状態へ移行すべき 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力

24.

それを実現するのがアンチプロンプト あなたは「アシスタント」として「ユーザ」の 質問に応えます。 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? ユーザ: ここでモデル出力を停止して ユーザの入力待ち状態へ移行すべき アンチプロンプト(停止キーワード)として 「ユーザ:」を設定しておけばOK

25.

ユーザ入力続き(会話形式になる!) あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? ユーザ:もう消しちゃった 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力

26.

アンチプロンプト設定テンプレート テンプレ 編集も可能

27.

複数キャラクタ間での会話制御 全登場人物名を アンチプロンプトとする アンチプロンプトで 話者をバントタッチ!

28.

複数キャラクタ間での会話制御のBP 詳細はDLして! → https://github.com/Akiya-Research-Institute/LocalLLM-Demo-UE5