🤖
【Unity×AI】UnityとOpenAIで簡単なAI連携システムの構築
今回の記事では、UnityとFastAPIを使って、OpenAI APIを活用する簡単なシステムを構築しています。PythonでFastAPIサーバーをセットアップし、Unityからリクエストを送信してAIの応答を受け取るまでの流れを紹介します。
全体の流れ
- FastAPIでAI用のAPIサーバーを作成
- UnityからHTTPリクエストを送信
- AIの応答をUnityで取得・表示
1. FastAPIでAIサーバーを構築
必要な準備
Pythonをインストールしていない場合は、公式サイトからインストールしてください。また、pip
で必要なライブラリをインストールします。
python -m venv venv
仮想環境を有効化します。
venv\Scripts\activate
pip install fastapi uvicorn openai python-dotenv
FastAPIサーバーのコード
以下のコードをmain.py
として保存してください。
from fastapi import FastAPI, HTTPException, Query
from openai import OpenAI
import os
from dotenv import load_dotenv
# 環境変数からAPIキーをロード
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
if api_key is None:
raise ValueError("APIキーが環境変数から読み取れませんでした。'.env' ファイルを確認してください。")
# OpenAIクライアントの初期化
client = OpenAI(api_key=api_key)
# FastAPIアプリケーションの作成
app = FastAPI()
@app.get("/generate-text")
async def generate_text(prompt: str = Query(..., description="生成するテキストのプロンプト")):
try:
# OpenAI APIを使って補完を作成
completion = client.chat.completions.create(
model="gpt-4",
store=True,
messages=[
{"role": "user", "content": prompt}
],
max_tokens=50 # 最大トークン数を固定
)
# 応答テキストを取得
generated_text = completion.choices[0].message.content
return {"response": generated_text}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
import subprocess
subprocess.run(["uvicorn", "main:app", "--host", "127.0.0.1", "--port", "5000"])
プロジェクトフォルダに.envファイルを作成し、APIキーを設定します:
OPENAI_API_KEY=your_openai_api_key_here
このサーバーは、/generate-text
エンドポイントでリクエストを受け取り、OpenAI APIを使って応答を生成します。
2. Unityでリクエストを送信
次にUnityからFastAPIサーバーにリクエストを送信します。
Unityスクリプト
以下のスクリプトをPythonAPIController.cs
として作成し、適当なGameObjectにアタッチしてください。
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class PythonAPIController : MonoBehaviour
{
private string _serverUrl = "http://127.0.0.1";
private string _serverPort = "5000";
private string _command = "generate-text";
[SerializeField] private string _prompt = "Hello world";
[Header("リクエスト送信")]
[SerializeField] private bool _sendRequest = false;
private string _requestFullUrl;
void Start()
{
// クエリパラメータを含めないURL
_requestFullUrl = $"{_serverUrl}:{_serverPort}/{_command}";
}
void Update()
{
if (_sendRequest)
{
_sendRequest = false;
Debug.Log("SendPrompt: " + _prompt);
SendPrompt(_prompt);
}
}
public void SendPrompt(string prompt)
{
StartCoroutine(SendRequest(prompt));
}
private IEnumerator SendRequest(string prompt)
{
// クエリパラメータを付加した完全なURLを作成
string fullUrlWithParams = $"{_requestFullUrl}?prompt={UnityWebRequest.EscapeURL(prompt)}";
using (UnityWebRequest request = UnityWebRequest.Get(fullUrlWithParams))
{
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log($"Response: {request.downloadHandler.text}");
}
else
{
Debug.LogError($"Error: {request.error}");
}
}
}
}
3. サーバーとUnityの連携を確認
-
FastAPIサーバーの起動:
python main.py
-
Unityからリクエストを送信:
Unityを実行して、_sendRequest
をtrue
に設定。 -
結果:
UnityのコンソールにAIの応答が表示されれば成功です。
まとめ
- Python(FastAPI)でAI応答を生成するサーバーを構築。
- UnityからHTTPリクエストを送信してAIの応答を受け取る。
Discussion