《UE5.4.2》WebSocket でLLMと日本語のやり取りを実現する!:新バージョン v0.2.0 リリースノート解説

AI・機械学習

この解説記事では、Unreal Engine 5.4.2 と WebSocket を用いて、C++ と Python 間で日本語を含むメッセージのやり取りを行うサンプルプロジェクトの最新バージョン v0.2.0 のリリースノートについて解説します。

Release UE5.4.2 WebSocket v0.2.0 リリースノート · Sunwood-ai-labs/UE5.4.2_WebSocketTestV2
新機能WebSocketサーバーとlitellmの統合: WebSocketサーバーにlitellmを統合することで、クライアントからのメッセージに対して動的な応答を生成できるようになりました。litellmを使用して、クライアントからのメッセージを理解し、それに応じたテキスト応答を生成します。 (#2)環境変数によ...

はじめに

プロジェクトの概要

このプロジェクトは、Unreal Engine 5.4.2 で C++ と Python を WebSocket を使って通信させるサンプルプロジェクトです。ゲーム内でキャラクターが特定のキーを押すと、WebSocket 経由でメッセージがサーバーに送信され、サーバーはメッセージを受信して応答を返します。これにより、ゲームとサーバー間でリアルタイムなデータのやり取りが可能になります。

動作要件

  • Unreal Engine 5.4.2
  • Python 3.x
  • Python の websockets ライブラリ

新機能

WebSocketサーバーとlitellmの統合

このバージョンでは、WebSocket サーバーに litellm というライブラリを統合しました。litellm は、OpenAI の Gemini や Google の PaLM などの大規模言語モデル(LLM)と連携できる Python ライブラリです。

from litellm import completion

async def generate_response(message):
    response = completion(
        model="gemini/gemini-pro",
        messages=[{"role": "user", "content": message}]
    )
    return response

これにより、サーバーはクライアントから受け取ったメッセージを LLM に渡して解釈し、それに応じたテキストを生成してクライアントに返すことが可能になりました。

UE5.4.2_WebSocketTestV2/WebSocketServer/websocket_server_with_litellm.py at master · Sunwood-ai-labs/UE5.4.2_WebSocketTestV2
Contribute to Sunwood-ai-labs/UE5.4.2_WebSocketTestV2 development by creating an account on GitHub.

環境変数によるAPIキーの管理

litellm を使用する際には、APIキーが必要となります。このバージョンでは、APIキーをコード内に直接記述する代わりに、環境変数 GEMINI_API_KEY を用いて管理する仕組みを導入しました。

from dotenv import load_dotenv
load_dotenv(verbose=True)

# ...

これにより、APIキーをコード内にハードコーディングする必要がなくなり、セキュリティが向上します。

詳細なログ記録

loguru ライブラリを使用することで、サーバーの操作とクライアントの活動の詳細なログを記録できるようになりました。

from loguru import logger

logger.add("websocket_server.log", rotation="1 MB", retention="7 days")

ログファイルには、クライアントの接続・切断、メッセージの送受信などの情報が記録され、問題発生時のデバッグに役立ちます。

新しい入力アクション「Hello」

キャラクターに新しい入力アクション「Hello」を追加しました。このアクションは、キャラクターが特定のキーを押すと、WebSocket で「こんにちは」というメッセージを送信し、サーバーから応答を受け取ります。

// ...
EnhancedInputComponent->BindAction(HelloAction, ETriggerEvent::Started, this, &AWebSocketTestV2Character::StartHelloServer);
EnhancedInputComponent->BindAction(HelloAction, ETriggerEvent::Completed, this, &AWebSocketTestV2Character::EndHelloServer);
// ...

変更

WebSocketのテストメッセージの更新

WebSocket の初期化メッセージを「---日本語のテスト---」に変更しました。これにより、日本語の表示のテストとWebSocket 接続が正常に確立されているかを確認しやすくなりました。

// ...
const char8_t* MessageUtf8 = u8"---日本語のテスト---";
// ...

バイナリファイルの更新

プロジェクトの第三者キャラクターブループリントのバイナリファイルを更新しました。これにより、ゲームのパフォーマンスと安定性が向上しています。

WebSocketTestV2Characterヘッダーへのメンバ変数の追加

WebSocket 通信で日本語のメッセージを送受信するために、WebSocketTestV2Character.h に新たなメンバ変数「MessageUtf8」「MessageUtf16」「MessageUtf8Str」「MessageJpTextLocal」を追加しました。

// ...
const char8_t* MessageUtf8;
const wchar_t* MessageUtf16;
FString MessageUtf8Str;
FString MessageJpTextLocal;
// ...

新しいサーバ通知と挨拶機能の追加

キャラクターに新しい機能「NotifyServer」と「HelloServer」を追加しました。

  • NotifyServer: 特定のキーを押すと、WebSocket でメッセージを送信し、サーバーに通知します。
  • HelloServer: WebSocket で「こんにちは」という日本語のメッセージを送信し、サーバーから応答を受け取ります。

バグ修正

.envファイルを.gitignoreに追加

セキュリティを強化するために、.envファイルを.gitignoreに追加し、機密情報が誤ってリポジトリにコミットされるリスクを減らしました。

開発者向け

WebSocketサーバー機能の拡張

WebSocketサーバー機能を拡張し、以下の機能を追加しました。

  • UUIDによるクライアント識別: 各クライアントにUUIDを用いて一意の接続IDを割り当て、管理を容易にしました。
  • 詳細なログ記録: 接続・切断、メッセージ送受信などの情報をログファイルに記録します。

WebSocketサーバーの進捗表示

tqdmライブラリを使用して、サーバー側処理の進捗状況をクライアントにプログレスバーとして表示します。これにより、サーバー側処理が完了するまで、クライアントは処理状況を視覚的に確認することができます。

Known Issues

  • 現時点では、litellmの利用にはアカウント登録とAPIキーの取得が必要です。
  • サーバーとクライアントが異なるネットワークにある場合、WebSocket接続がうまくいかないことがあります。

まとめ

このリリースノートでは、UE5.4.2 WebSocketの新バージョンv0.2.0の主な変更点について説明しました。litellmの統合や環境変数によるAPIキーの管理など、新しい機能が追加され、さらに使いやすく、安全なプロジェクトになりました。このプロジェクトは、Unreal Engine で WebSocket を使用して日本語のメッセージを送受信し、サーバーとのリアルタイムなやり取りを行うための良い例となります。

リポジトリ

GitHub - Sunwood-ai-labs/UE5.4.2_WebSocketTestV2
Contribute to Sunwood-ai-labs/UE5.4.2_WebSocketTestV2 development by creating an account on GitHub.

参考サイト

【UE5】日本語文字化け【VS2022】|imori
Unreal Editorのログなどに日本語を表示させようとすると文字化けする。VS2022のソースファイルがデフォルトでシフトJISになっているせい。ソースファイルをUTF-8で保存してあげれば直せる。 低レベルかもしれないやり方 VS2022でを実行すると、ファイル保存用のダイアログボックスが表示される。この...
Text Render Componentで日本語を表示する - Happy My Life
Text Render Componentのデフォルト設定ではフォントが日本語対応していないので、TrueTypeな日本語フォントで表示できるようにしてみる。 そのためには日本語を表示させるためにはフォントを変更しなければならない。ということで、その手順を解説する。この方法は日本語に限定せず、単純にフォントを変更したい...
📰エディタ言語について(日本語⇔英語の切り替え方法) [UE5入門 #2-5]

コメント

タイトルとURLをコピーしました