121 lines
3.5 KiB
C#
121 lines
3.5 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Text.RegularExpressions;
|
||
using UnityEngine;
|
||
using UnityEngine.Networking;
|
||
|
||
public class chatGPT : LLM
|
||
{
|
||
public chatGPT() {
|
||
url = "https://api.openai.com/v1/completions";
|
||
}
|
||
|
||
/// <summary>
|
||
/// api key
|
||
/// </summary>
|
||
[SerializeField] private string api_key;
|
||
//配置参数
|
||
[SerializeField] private PostData m_PostDataSetting;
|
||
/// <summary>
|
||
/// 发送消息
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public override void PostMsg(string _msg,Action<string> _callback)
|
||
{
|
||
//提示词
|
||
string message = "当前为角色的人物设定:" + m_Prompt +
|
||
" 回答的语言:" + lan +
|
||
" 接下来是我的提问:" + _msg;
|
||
|
||
|
||
StartCoroutine(Request(message, _callback));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 调用接口返回数据
|
||
/// </summary>
|
||
/// <param name="_postWord"></param>
|
||
/// <param name="_callback"></param>
|
||
/// <returns></returns>
|
||
private IEnumerator Request(string _postWord, System.Action<string> _callback)
|
||
{
|
||
using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
|
||
{
|
||
PostData _postData = new PostData
|
||
{
|
||
model = m_PostDataSetting.model,
|
||
prompt = _postWord,
|
||
max_tokens = m_PostDataSetting.max_tokens,
|
||
temperature = m_PostDataSetting.temperature,
|
||
top_p = m_PostDataSetting.top_p,
|
||
frequency_penalty = m_PostDataSetting.frequency_penalty,
|
||
presence_penalty = m_PostDataSetting.presence_penalty,
|
||
stop = m_PostDataSetting.stop
|
||
};
|
||
|
||
string _jsonText = JsonUtility.ToJson(_postData);
|
||
byte[] data = System.Text.Encoding.UTF8.GetBytes(_jsonText);
|
||
request.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);
|
||
request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
|
||
|
||
request.SetRequestHeader("Content-Type", "application/json");
|
||
request.SetRequestHeader("Authorization", string.Format("Bearer {0}", api_key));
|
||
|
||
yield return request.SendWebRequest();
|
||
|
||
if (request.responseCode == 200)
|
||
{
|
||
string _msg = request.downloadHandler.text;
|
||
TextCallback _textback = JsonUtility.FromJson<TextCallback>(_msg);
|
||
if (_textback != null && _textback.choices.Count > 0)
|
||
{
|
||
|
||
string _backMsg = Regex.Replace(_textback.choices[0].text, @"[\r\n]", "").Replace("?", "");
|
||
_callback(_backMsg);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
#region 数据定义
|
||
|
||
[System.Serializable]
|
||
public class PostData
|
||
{
|
||
public string model;
|
||
public string prompt;
|
||
public int max_tokens=1024;
|
||
public float temperature=0.9f;
|
||
public int top_p;
|
||
public float frequency_penalty;
|
||
public float presence_penalty;
|
||
public string stop;
|
||
}
|
||
/// <summary>
|
||
/// 返回的信息
|
||
/// </summary>
|
||
[System.Serializable]
|
||
public class TextCallback
|
||
{
|
||
public string id;
|
||
public string created;
|
||
public string model;
|
||
public List<TextSample> choices;
|
||
|
||
[System.Serializable]
|
||
public class TextSample
|
||
{
|
||
public string text;
|
||
public string index;
|
||
public string finish_reason;
|
||
}
|
||
|
||
}
|
||
|
||
#endregion
|
||
}
|