Health/Assets/_VoiceAssistant/AIChatTookit/Scripts/LLM/chatGPT/chatGPT.cs

121 lines
3.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}