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

97 lines
2.4 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 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
}