using UnityEngine;
using UnityEditor;
using UnityEngine.Networking;
namespace AICode
{
static class OpenAIUtil
{
public static byte[] CreateRequestBody(string prompt)
{
var msg = new OpenAI.RequestMessage();
msg.role = "user";
msg.content = prompt;
var req = new OpenAI.Request();
req.model = "gpt-3.5-turbo";
req.messages = new[] { msg };
return System.Text.Encoding.UTF8.GetBytes(JsonUtility.ToJson(req));
}
public static string InvokeChat(string prompt)
{
var res = "";
using (var post = UnityWebRequest.Put(OpenAI.Api.Url, CreateRequestBody(prompt)))
{
post.method = "POST";
post.SetRequestHeader("Content-Type", "application/json");
post.SetRequestHeader("Authorization", "Bearer " + "你的api key ");
post.certificateHandler = new CertificateWhore();
var req = post.SendWebRequest();
var progress = 0.0f;
while (true)
{
if (req.isDone)
{
res = post.downloadHandler.text;
break;
}
EditorUtility.DisplayProgressBar("AICode", "Generating...", progress);
System.Threading.Thread.Sleep(100);
progress += 0.01f;
}
var json = post.downloadHandler.text;
var data = JsonUtility.FromJson<OpenAI.Response>(json);
res = data.choices[0].message.content;
}
EditorUtility.ClearProgressBar();
return res;
}
}
public class CertificateWhore : CertificateHandler
{
protected override bool ValidateCertificate(byte[] certificateData)
{
return true;
}
}
} // namespace AICode
OpenAI 数据类
namespace AICode.OpenAI
{
public static class Api
{
public const string Url = "https://api.openai.com/v1/chat/completions";
}
[System.Serializable]
public struct ResponseMessage
{
public string role;
public string content;
}
[System.Serializable]
public struct ResponseChoice
{
public int index;
public ResponseMessage message;
}
[System.Serializable]
public struct Response
{
public string id;
public ResponseChoice[] choices;
}
[System.Serializable]
public struct RequestMessage
{
public string role;
public string content;
}
[System.Serializable]
public struct Request
{
public string model;
public RequestMessage[] messages;
}
}