メインコンテンツまでスキップ

プラグインの使用方法

このガイドでは、ランタイムAPIの全機能について説明します。LLMインスタンスの作成、モデルの読み込み、メッセージの送信、ランタイムでのモデルのダウンロード、状態管理、ユーティリティ関数について解説します。

LLMインスタンスを作成する

まず、Runtime Local LLM オブジェクトを作成します。ブループリントの変数や C++ の UPROPERTY として参照を保持し、早期のガベージコレクションを防ぎます。

Create Runtime Local LLM

モデルをロードする

メッセージを送信する前にモデルを読み込む必要があります。このプラグインは、ワークフローに応じていくつかの読み込み方法を提供しています。

名前で読み込み

エディタ設定パネルからモデルを管理する場合は、Load Model (By Name)を使用してください。

UE 5.4以降では、Load Model (By Name) はディスク上のすべてのモデルのドロップダウンリストを表示します。読み込みたいモデルを選択するだけです。

Load Model By Name UE 5.4+

ファイルパスから読み込む

.gguf ファイルへの絶対ファイルパスから直接モデルを読み込みます:

Load Model From File

URLから読み込む(ダウンロードして読み込む)

URLからモデルをダウンロードし(ディスク上にない場合)、自動的に読み込みます。ファイルが既にローカルに存在する場合は、ダウンロードはスキップされます。

最もシンプルなバリアントはURLのみを受け取ります。メタデータはファイル名から取得されます。

Load Model From URL Simple

また、より豊かなモデル情報を得るために、完全なモデルメタデータを含む Load Model From URL を使用することもできます。

Load Model From URL

非同期ロード(ブループリント)

出力ピンを介してロード完了とエラーを処理し、手動でデリゲートをバインドする代わりに、2つの非同期ノードが利用可能です。

Load Model By Name (Async)Load Model (By Name) をミラーリングします。UE 5.4+ では、ディスク上のすべてのモデルのドロップダウンが表示されます。

Load Model By Name Async UE 5.4+

Load Model From File (Async) は代わりに絶対ファイルパスを受け取ります。

Load Model From File Async

イベントをバインドする

LLMインスタンスのデリゲートにバインドしてコールバックを受信します。すべてのコールバックはゲームスレッド上で発火します。

Bind Events

利用可能なデリゲート:

  • トークン生成時: 出力トークンごとに発生します
  • 生成完了時: 完全な応答の準備ができたときに発生し、所要時間、トークン数、1秒あたりのトークン数を報告します
  • プロンプト処理時: 入力プロンプトが処理された後、生成が開始される前に発生します
  • エラー時: いずれかの操作中にエラーが発生した場合に発生します
  • モデル読み込み完了時: モデルの読み込みが完了したときに発生します
  • モデルアンロード時: モデルがアンロードされたときに発生します
  • ダウンロード進捗時: モデルのダウンロード中に定期的に発生します(進捗率、受信バイト数、総バイト数)
  • モデルダウンロード完了時: ダウンロードのみの操作が完了したときに発生します
  • 会話保存時: 会話がJSONファイルに書き込まれたときに発生します
  • 会話読み込み時: 会話がファイルまたはメモリスナップショットから読み込まれたときに発生します
  • 履歴要約時: 自動要約が古いメッセージを圧縮したときに発生します(メッセージ数、節約されたトークン数、要約を報告します)

メッセージを送信

モデルが読み込まれたら、ユーザーメッセージを送信して応答を生成します。

Send Message

特定のメッセージに対してシステムプロンプトを上書きするには、Send Message With System Prompt を使用します。

Send Message With System Prompt

OnTokenGenerated を通じてトークンが生成されるたびにストリームされます。生成が完了すると、OnGenerationComplete が発火し、完全な応答、所要時間、トークン数、および1秒あたりのトークン数が提供されます。

非同期メッセージ送信(ブループリント)

Send LLM Message (Async) ノードは、トークン、完了、エラー専用の出力ピンを提供します。

Async Send Message

ランタイムでモデルをダウンロードする

上記のダウンロードおよびロードのフローに加えて、モデルをロードせずにディスクにダウンロードすることもできます。これは、ローディング画面や設定メニューでモデルを事前にキャッシュする場合に便利です。

Download Model

URLのみのバリアントも利用可能です:

Download Model From URL

Download LLM Model (Async) ノードと Download LLM Model From URL (Async) ノードは、進捗状況、完了、エラー用の出力ピンを提供します。

Async Download Model

OnDownloadProgress デリゲートはダウンロード中の進捗状況を報告します。OnModelDownloaded はファイルがディスクに保存されたときに発生します。

進行中のダウンロードをキャンセルするには:

Cancel Download

このプラグインは重複ダウンロードを自動的に防止します。同じモデルのダウンロードが既に進行中の場合、後続の呼び出しは無視されます。

生成を停止

生成を中断するには:

Stop Generation

会話コンテキストをリセット

会話履歴をクリアして、新しい会話を開始します。

Reset Context

会話の保存と読み込み

このプラグインは、会話履歴をJSONとしてディスクに保存するか、スナップショットとしてメモリ内に保持することができます。デフォルトでは、システムプロンプトは保存から除外されるため、同じ会話履歴を異なるシステムルールを持つ別のLLMインスタンスに読み込むことができます。これは、各キャラクターが独自のメモリを持ちながらも、システム指示を共有したり異なったりする可能性があるマルチNPCシナリオで有用です。

ファイルに保存

現在の会話をディスク上のJSONファイルに保存します:

Save Conversation To File

Include System Prompt パラメータは、システムメッセージ(存在する場合)をファイルに書き込むかどうかを制御します。デフォルトは false で、NPC間の移植性を確保します。

On Conversation Saved は、ファイルが書き込まれたときに発生します。

ファイルから読み込む

JSONファイルから会話を読み込みます:

Load Conversation From File

Preserve Current System Prompt パラメータ(デフォルトは true)は、現在読み込まれているシステムプロンプトを保持したまま、保存された会話履歴を入れ替えます。これはNPCのメモリ入れ替えに推奨される設定です。

On Conversation Loaded は、読み込まれたスナップショットとともに発火します。

インメモリスナップショット(マルチNPCワークフロー)

ゲームプレイ中に高速でNPCを切り替えるには、現在の会話をディスクに書き込むのではなく、メモリにスナップショットとして保存します。このパターンは、単一の読み込まれたモデルを共有する多数のNPCを管理するための推奨方法です。

典型的なマルチNPCパターンでは、NPCマネージャーやゲームステート上に Map of Name → LLM Conversation Snapshot を使用します。

  1. NPCから切り替える場合: Save Conversation To Memory を呼び出し、On Conversation Loaded(スナップショット配信時にも発火)でスナップショットをNPC名をキーとしてマップに保存します。
  2. 別のNPCに切り替える場合: マップからスナップショットを読み取り、Preserve Current System Prompt を有効にして Load Conversation From Memory を呼び出します。

Multi NPC Pattern

システムプロンプトはスワップ間で読み込まれたままになるため、各NPCの「性格」は、NPCごとのシステムプロンプトにエンコードするか(スワップ後にSend Message With System Promptを1回呼び出して更新)、すべてのNPC間で共有することができます。

ヒント

スナップショットはモデルに依存しません。メッセージを保存するものであり、KVキャッシュの状態を保存するものではありません。同じスナップショットを別のモデルに読み込むことも可能です(ただし、会話のスタイルは変化する可能性があります)。スナップショットの OriginModelFamilyName フィールドを使用すると、互換性を強制したい場合に、どのモデルが生成したかを確認できます。

自動コンテキスト要約

長い会話は、最終的にモデルのコンテキストウィンドウを超えてしまい、通常は履歴が切り詰められるか、エラーが発生します。このプラグインの自動要約機能は、コンテキストの使用状況を監視し、設定されたしきい値を超えた場合、次の応答が生成される前に、古いメッセージを1つの「メモリ」メッセージに要約します。これにより、無制限に長い会話にわたって、トークンコストとレイテンシを安定させることができます。

要約は同じ読み込まれたモデルによって実行されるため、別のモデルやAPI呼び出しは必要ありません。

自動要約を有効にする

Enable Auto Summarization

Get Default Summarization Config を使用して適切なデフォルト設定を取得し、必要に応じて調整してください。

Get Default Summarization Config

有効にすると、必要に応じて各 SendMessage 呼び出しの前に自動的に要約が実行されるため、それ以上の操作は必要ありません。

ヒント

デフォルトでは、新しいメッセージが処理される前に自動要約が実行されます。これは、応答の生成と同時に安全に行うことができないコンテキストの再構築が必要なためです。代わりに、プレイヤーが読み取りや入力をしている間、応答後に自動要約を実行したい場合は、自動要約を無効にして手動で駆動してください。On Generation Completeにバインドし、Get Used Context Lengthをしきい値と照合し、それを超えた場合はSummarize Nowを呼び出します。Summarize Nowは同じバックグラウンドタスクキューにキューイングされるため、応答の完了直後、次のメッセージが処理される前に実行されます。

設定リファレンス

パラメータTypeデフォルト説明
トリガートークンしきい値int321500要約は、使用されるコンテキストトークンがこの値を超えた場合に実行されます。この値はContext Sizeに応じて設定し、目安として60~75%程度が適切です。
最近のメッセージ数を保持int324最新のN件のメッセージは決して要約されず、即時の会話の一貫性が維持されます。
要約する最小メッセージ数int326この数よりも少ない古いメッセージが要約対象となる場合、要約をスキップします(意味のない小さな要約を避けるため)。
最大サマリートークン数int32256生成される要約の最大トークン数
システムプロンプトを保持するbooltrue常にシステムメッセージ(インデックス0)をそのまま保持してください。
要約指示FString(see default)要約を生成するためにモデルに送信された指示
サマリーメッセージプレフィックスFString「[以前の会話の長期記憶サマリー]:」生成されたサマリーがアシスタントロールのメモリメッセージとして会話に挿入されるときに、その先頭に付加されます。

手動トリガーと要約のリスニング

しきい値に関係なく、いつでも手動で要約をトリガーできます。

Summarize Now

On History Summarized にバインドすると、要約パスが完了したときに通知を受け取れます。このイベントは、削除されたメッセージ数、節約されたトークン数、生成された要約テキストを報告するため、チャットUIに控えめなインジケーターを表示するのに役立ちます。

On History Summarized

使用中のコンテキスト長をクエリ中

Get Used Context Lengthを使用して、モデルのコンテキストウィンドウに現在何トークンが占有されているかを確認します。これは、組み込みの自動要約トリガーがTrigger Token Thresholdと照合する値と同じです。

Get Used Context Length

自動要約を無効にする

Disable Auto Summarization

無効化しても、会話に既に適用された要約は元に戻りません。

注記

要約はバックグラウンドスレッドで実行されるため、少し時間がかかります(モデルが要約を生成しています)。この内部生成中はトークンストリームコールバックが抑制されるため、チャットUIには表示されません。On History Summarizedはスプライスが完了した時点で発火します。

モデルをアンロードする

モデルが不要になった際にリソースを解放する方法:

Unload Model

クエリ状態

LLMインスタンスの現在の状態を確認してください:

Query State

  • モデルが読み込まれている: 推論の準備ができているモデルがある場合はTrue
  • 生成中: 生成が進行中の場合はTrue
  • ビジー状態: 何らかの操作(読み込み、生成、ダウンロード)がアクティブな場合はTrue
  • ダウンロード中: モデルのダウンロードが進行中の場合はTrue
  • 読み込まれたモデルのメタデータを取得: 現在のモデルのメタデータを返します
  • 適用された推論パラメータを取得: 読み込み時に適用されたパラメータを返します

モデルライブラリ関数

モデルファイルをディスク上で管理するための静的ユーティリティ関数セットが提供されています。これらは、モデル選択UIの構築や、実行時にモデルの利用可能性を確認するのに役立ちます。

ダウンロードしたモデル名/メタデータを取得

Get Downloaded Model Names

Get All Downloaded Model Metadata

モデルがディスク上にあるか確認する

Is Model On Disk

モデルファイルのパスを取得する

Get Model File Path

モデルファイルを削除する

Delete Model Files

事前定義済みおよび利用可能なモデルを取得する

Get Predefined Models

Get All Available Models

URLからビルドメタデータを生成する

生のURLからモデルのメタデータを構築します(フィールドはファイル名から派生します)。

Make Metadata From URL

ユーティリティ関数

書式設定とエラー表示のためのヘルパー関数セットが提供されています。

バイトを読み取り可能な文字列に変換

バイト数を人間が読みやすい文字列(例:「4.07 GB」)に変換します。UIでモデルサイズを表示するのに便利です。

Bytes to Readable String

フォーマットダウンロードの進行状況

ダウンロード進捗文字列を「1.23 GB / 4.07 GB (30.2%)」のようにフォーマットします。合計サイズが不明な場合は、受信済みの量のみを返します。

Format Download Progress

エラー説明の取得 / エラーコード文字列

Get LLM Error Description はエラーコードに対応する人間が読めるテキストの説明を返します。Get LLM Error Code String は列挙値の名前を文字列として返します(ログ記録に便利です)。

Get Error Description

エラーコードリファレンス

Code説明
不明0未指定のエラー
ModelLoadFailed10GGUFファイルの読み込みに失敗しました(ファイルの破損、互換性のない形式など)。
ContextCreateFailed11推論コンテキストの作成に失敗しました
モデル未読み込み20モデルがロードされていない状態で推論が試行されました。
ChatTemplateFailed21モデルのチャットテンプレートの適用に失敗しました
トークン化失敗22入力テキストをトークン化できませんでした。
ContextOverflow23プロンプトとコンテキストが設定されたコンテキストサイズを超えています。
PromptDecodeFailed24プロンプトトークンのデコードに失敗しました。
ContextTooFullToGenerate25出力を生成するためのコンテキストスペースが不足しています。
GenerationDecodeFailed30生成中にトークンのデコードに失敗しました
GenerationTruncated31生成が停止しました。最大トークン制限に達したためです。
LLMInstanceNull40LLMインスタンスがnullまたは無効です。
ModelNotFoundOnDisk41モデルファイルが期待されるパスに存在しません。
ModelURLEmpty42空のURLでダウンロードがリクエストされました。
モデルダウンロードキャンセル済み43ダウンロードがキャンセルされました。
ModelDownloadEmptyData44ダウンロードは完了しましたが、レスポンスボディが空でした。
モデルダウンロード保存失敗45ダウンロードは完了しましたが、ファイルをディスクに保存できませんでした。