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

97 lines
2.4 KiB
C#
Raw Normal View History

2023-11-21 08:57:37 +00:00
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class chatGLM : LLM
{
public chatGLM()
{
url = "http://localhost:8000";
}
/// <summary>
/// 历史对话
/// </summary>
[SerializeField] private List<List<string>> m_History = new List<List<string>>();
/// <summary>
/// 发送消息
/// </summary>
/// <returns></returns>
public override void PostMsg(string _msg, Action<string> _callback)
{
base.PostMsg(_msg, _callback);
}
/// <summary>
/// 发送数据
/// </summary>
/// <param name="_postWord"></param>
/// <param name="_callback"></param>
/// <returns></returns>
public override IEnumerator Request(string _postWord, System.Action<string> _callback)
{
stopwatch.Restart();
string jsonPayload = JsonConvert.SerializeObject(new RequestData
{
prompt = _postWord,
history = m_History
});
using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(jsonPayload);
request.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);
request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.responseCode == 200)
{
string _msg = request.downloadHandler.text;
ResponseData response = JsonConvert.DeserializeObject<ResponseData>(_msg);
//记录历史对话
m_History = response.history;
//添加记录
m_DataList.Add(new SendData("assistant", _msg));
//回调
_callback(response.response);
}
}
stopwatch.Stop();
Debug.Log("chatGLM耗时" + stopwatch.Elapsed.TotalSeconds);
}
#region
[Serializable]
private class RequestData
{
public string prompt;
public List<List<string>> history;
}
[Serializable]
private class ResponseData
{
public string response;
public List<List<string>> history;
public int status;
public string time;
}
#endregion
}