16K Views
June 14, 24
スライド概要
UE Tokyo .dev #3 での発表資料です。
Local LLM を Unreal Engine で動かすためにプラグインを作成しました。会話デモを動かしつつ、「会話」っぽく見せる上で使っている「アンチプロンプト」というテクニックについて説明します。
地域社会の安心に貢献し、暮らしやすい世の中をつくるために、主な事業として空き家専門の工事会社・不動産屋として空き家再生・活用に取り組んでいます。また、演劇教室「劇ゼミ」の運営、VR・AI技術開発も行っています。
ローカルLLMをUE5で動かす 2024/06/14 UE Tokyo .dev #3 株式会社空き家総合研究所 麻場 健司
麻場 健司 (𝕏:@KenjiASABA) • 株式会社空き家総合研究所 • 社員5人 • 全員、関西の学生劇団出身 • 主な事業は3つ • 空き家再生 • 演劇教室 • VR・AI技術開発 • 大阪 ⇔ 東京 ⇔ 茨城 • 毎月出張で関東に来てます
MocapForAll MocapForStreamer UE × AI な製品を作っています WhisperRealtime 3D Gaussians Plugin
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
(ここから本題) Local LLM が流行っている 手元のPC上で オフラインで 動作する (ChatGPT的な) 大規模言語モデル
https://about.fb.com/ja/news/2024/04/meta-ai-assistant-built-with-llama-3/
https://azure.microsoft.com/ en-us/blog/new-modelsadded-to-the-phi-3-familyavailable-on-microsoftazure/
https://x.com/Holy_fox_LLM/status/17885 12162732019888 https://x.com/Holy_fox_LLM/status/178881 1211712454961
https://huggingface.co/Local-Novel-LLM-project
Local LLM を UE5 で動かしたい! • 言語モデルを使った処理 • キャラクターと会話する • キャラクターに意思決定させる •… → これらをオンラインサービスに依存せずに実装できる!
プラグイン作りました! https://www.unrealengine.com/marketplace/product/local-llm-plugin
まずはデモexeを今すぐダウンロード! https://github.com/Akiya-Research-Institute/LocalLLM-Demo-UE5/releases ←ココ!
モデルは別途ダウンロードして! 英語 :https://huggingface.co/QuantFactory/Meta-Llama-3-8B-Instruct-GGUF/... 日本語:https://huggingface.co/mmnga/DataPilot-ArrowPro-7B-RobinHood-gguf/... ↓ココ! ↓ココ!
モデルを所定のパスに配置! ココ!
設定を変更したら「Apply Settings」を押してね を実行!楽しい! https://youtu.be/5B2f8POzytA 「一人との会話デモ」⇔「複数人の会話デモ」の切り替え
内部では llama.cpp を使用 https://github.com/ggerganov/llama.cpp • 言語モデルの推論をCPUとGPUの両方を使って高速に行うライブラリ • 使用するモデルフォーマット(gguf)の可搬性が高い
がんばったところ(意外と大変でした) • (日本語などの)マルチバイト文字対応 • 出力されるトークンごとに文字に変換すると文字化けする • 何バイトの文字なのかを一つ一つ判別して、正しい塊で文字に変換すべし • 非同期実行 • 応答まで時間がかかるのでゲームスレッドをブロックしないように • 応答中に追加の質問を入力できるようにしたりも • 会話履歴のステートセーブ • NPCとの過去の会話の続きから再開できるように • LLMモデルのライフサイクル管理 • メモリ使用大&ロード遅いので、アクタ毎に保持しないように • 複数キャラクタ間での会話デモ • 「反応せずに話を聞く」モードと「反応して話す」モードを、複数アクター間で協調して動作させる • ユーザにも適宜反応を求める
LLMおもしろテクニック アンチプロンプト =出力停止キーワード
(例)初期プロンプト あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:
ユーザ入力 あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん 黒字:初期プロンプト 青字:ユーザ入力
モデル出力 あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力
モデル出力続き… あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? ユーザ: 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力
ここでモデル出力を止めたい! あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? ユーザ: ここでモデル出力を停止して ユーザの入力待ち状態へ移行すべき 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力
それを実現するのがアンチプロンプト あなたは「アシスタント」として「ユーザ」の 質問に応えます。 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? ユーザ: ここでモデル出力を停止して ユーザの入力待ち状態へ移行すべき アンチプロンプト(停止キーワード)として 「ユーザ:」を設定しておけばOK
ユーザ入力続き(会話形式になる!) あなたは「アシスタント」として「ユーザ」の 質問に応えます。 ユーザ:プログラミングの質問があるんだけど アシスタント:どんな質問でしょうか? ユーザ:エラーメッセージが意味わからん アシスタント:どんなメッセージでしょうか? ユーザ:もう消しちゃった 黒字:初期プロンプト 青字:ユーザ入力 赤字:モデル出力
アンチプロンプト設定テンプレート テンプレ 編集も可能
複数キャラクタ間での会話制御 全登場人物名を アンチプロンプトとする アンチプロンプトで 話者をバントタッチ!
複数キャラクタ間での会話制御のBP 詳細はDLして! → https://github.com/Akiya-Research-Institute/LocalLLM-Demo-UE5