推しアイデア
AI×TRPGで、一人でもTRPGができること
―
AI×TRPGで、一人でもTRPGができること
1人でもTRPGがしたい!
Unityでチャットを再現! テキストの長さによって、背景の画像の長さが動的に変わる。 AIでTRPGを使った
AIのゲームマスターで1人でも遊べるTRPG。
OpenAIのチャット機能を使い、TRPG風のゲームを作成した。
まず、Unityからopenaiのapiの取得して、それを元にして画像を動かしています。 そして、ゲーム中の判断は全てai が判断するため、パラメーターや、ルールなどを設けるのに苦労した
###リクエストするときのコード using System.Collections; using UnityEngine; using UnityEngine.Networking; using Newtonsoft.Json; // Use Newtonsoft.Json using dotenv.net; // Use dotenv.net using System;
public class OpenAIChatGPT : MonoBehaviour { private string apiKey ; private string apiUrl = "https://api.openai.com/v1/chat/completions";
void Awake() { // Load the .env file DotEnv.Load(); // Get the value of the API_KEY from the .env file // APIキーを環境変数から取得 apiKey = Environment.GetEnvironmentVariable("API_KEY"); Debug.Log("API Key: " + apiKey); } public IEnumerator GetChatGPTResponse(string prompt, System.Action<string> callback,string character,string storyLine,string log,string rule, int maxTokens) { // Setting OpenAI API Request Data var jsonData = new { model = "gpt-3.5-turbo", messages = new[] { new { role = "system", content = "You are a TRPG game master. Guide the players through the story." }, new { role = "user", content = prompt }, new {role="user",content=character}, new {role="user",content=rule+storyLine}, new {role="user",content=log} }, max_tokens = maxTokens, }; string jsonString = JsonConvert.SerializeObject(jsonData); // HTTP request settings UnityWebRequest request = new UnityWebRequest(apiUrl, "POST"); byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonString); request.uploadHandler = new UploadHandlerRaw(bodyRaw); request.downloadHandler = new DownloadHandlerBuffer(); request.SetRequestHeader("Content-Type", "application/json"); request.SetRequestHeader("Authorization", "Bearer " + apiKey); Debug.Log(apiKey); Debug.Log(request); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError("Error: " + request.error); } else { var responseText = request.downloadHandler.text; Debug.Log("Response: " + responseText); // Parse the JSON response to extract the required parts var response = JsonConvert.DeserializeObject<OpenAIResponse>(responseText); callback(response.choices[0].message.content.Trim()); } } public class OpenAIResponse { public Choice[] choices { get; set; } } public class Choice { public Message message { get; set; } } public class Message { public string role { get; set; } public string content { get; set; } }
}
Unityを使ったら、自由度が高いため、いろんなことができると思っていた時期が僕にもありました。 実際は値や条件の変更を行わないといけないため、そちらにリソースが裂けてしまって、思い通りの形にならなかった。