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"; } /// /// api key /// [SerializeField] private string api_key; //配置参数 [SerializeField] private PostData m_PostDataSetting; /// /// 发送消息 /// /// public override void PostMsg(string _msg,Action _callback) { //提示词 string message = "当前为角色的人物设定:" + m_Prompt + " 回答的语言:" + lan + " 接下来是我的提问:" + _msg; StartCoroutine(Request(message, _callback)); } /// /// 调用接口返回数据 /// /// /// /// private IEnumerator Request(string _postWord, System.Action _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(_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; } /// /// 返回的信息 /// [System.Serializable] public class TextCallback { public string id; public string created; public string model; public List choices; [System.Serializable] public class TextSample { public string text; public string index; public string finish_reason; } } #endregion }