数据类
发送的数据
[Serializable]
public class PostData
{
public string model;
public List<PostMessage> messages;
}
[Serializable]
public class PostMessage
{
public string role;
public string content;
public PostMessage() { }
public PostMessage(string role, string content)
{
this.role = role;
this.content = content;
}
}
接收的数据
[Serializable]
public class RespondedData
{
public string id;
public string created;
public string model;
public List<Choice> choices;
}
[Serializable]
public class Choice
{
public RespondedMessage message;
public string finish_reason;
public int index;
}
[Serializable]
public class RespondedMessage
{
public string role;
public string content;
}
role 的可选值:system || user || assistant
system:AI的角色设定,可在初始化时设置
user:用户发送的数据角色
assistant:返回信息的角色
管理类
private string url = "https://api.openai.com/v1/chat/completions";
private string model = "gpt-3.5-turbo";
private string apiKey = "*************";
private List<PostMessage> postMessages = new List<PostMessage>();
public void SendMessage(string message, Action<bool, string> callBack)
{
postMessages.Add(new PostMessage("user", message));
PostData postData = new PostData
{
model = model,
messages = postMessages
};
StartCoroutine(PostDataByJson(postData, callBack));
}
IEnumerator PostDataByJson(PostData postData, Action<bool, string> callBack)
{
UnityWebRequest request = new UnityWebRequest(url, "POST");
string postJson = JsonUtility.ToJson(postData);
byte[] dataBytes = Encoding.UTF8.GetBytes(postJson);
request.uploadHandler = new UploadHandlerRaw(dataBytes);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("Authorization", string.Format("Bearer {0}", apiKey));
yield return request.SendWebRequest();
if (request.responseCode.Equals(200))
{
string responded = request.downloadHandler.text;
Debug.Log(responded);
RespondedData respondedData = JsonUtility.FromJson<RespondedData>(responded);
if (respondedData != null && respondedData.choices.Count > 0)
{
string message = respondedData.choices[0].message.content;
callBack?.Invoke(true, message);
}
else
{
callBack?.Invoke(false, "获取失败");
}
}
else if (request.responseCode.Equals(404))
{
callBack?.Invoke(false, "未找到");
}
else if (request.responseCode.Equals(500))
{
callBack?.Invoke(false, "服务器内部错误");
}
else
{
Debug.Log(request.downloadHandler.text);
callBack?.Invoke(false, "获取失败");
}
}