Unity 对接Chat GPT 3.5 续

数据类

[Serializable]
public class ChatData
{
    public int id;
    public List<PostMessage> messages = new List<PostMessage>();
}

工具类

文件读写

public static string ReadAllOrCreate(string path, string nameFile)
{
	string pathFile = path + "/" + nameFile;
	if (File.Exists(pathFile))
	{
		return File.ReadAllText(pathFile);
	}
	if (!Directory.Exists(path))
	{
		Directory.CreateDirectory(path);
	}
	File.CreateText(pathFile).Dispose();
	return null;
}

public static void WriteAllText(string path, string contents)
{
	File.WriteAllText(path, contents, Encoding.UTF8);
}

Json 转换

public static T FromJson<T>(string json)
{
	T t = JsonConvert.DeserializeObject<T>(json);
	if (t != null && typeof(ISerializationCallbackReceiver).IsAssignableFrom(t.GetType()))
	{
		((ISerializationCallbackReceiver)((object)t)).OnAfterDeserialize();
	}
	return t;
}

public static string ToJson(object obj)
{
	if (obj != null && typeof(ISerializationCallbackReceiver).IsAssignableFrom(obj.GetType()))
	{
		((ISerializationCallbackReceiver)obj).OnBeforeSerialize();
	}
	return JsonConvert.SerializeObject(obj);
}

管理类

*读取现存数据

str = UtilFile.ReadAllOrCreate(Application.streamingAssetsPath, "XXXX.json");

if (string.IsNullOrEmpty(str))
{
    datas = new List<ChatData>();
}
else
{
    datas = UtilJson.FromJson<List<ChatData>>(str);
}

*所有操作开始前先读取现存数据

创建新对话

dataCurrent = new ChatData() { id = idCurrent };

继续一个对话

for (int i = 0; i < datas.Count; i++)
{
    ChatData data = datas[i];
    if (data.id.Equals(idCurrent))
    {
        dataCurrent = data;
        return;
    }
}

保存对话

if(!datas.Contains(dataCurrent))
{
    datas.Add(dataCurrent);
}

UtilFile.WriteAllText(Application.streamingAssetsPath + "/XXXX.json", UtilJson.ToJson(datas));

修改消息发送方法

List<PostMessage> postMessages = new List<PostMessage>(dataCurrent.messages);
postMessages.Add(new PostMessage("user", message));

PostData postData = new PostData
{
    model = model,
    messages = postMessages
};

StartCoroutine(PostDataByJson(postData, CallBack));

void CallBack(bool successful, string respondedMessage)
{
    if (successful)
    {
        dataCurrent.messages.Add(new PostMessage("user", message));
        dataCurrent.messages.Add(new PostMessage("assistant", respondedMessage));
    }
    callBack?.Invoke(successful, respondedMessage);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值