using System;
using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using LitJson;
public class ChatAli : LLM
{
///
/// 配置脚本
///
[SerializeField] private AliSettings m_Settings;
/////
///// 用于连续对话
/////
[SerializeField] private string session_id;
private void Awake()
{
OnInit();
}
///
/// 初始化
///
private void OnInit()
{
m_Settings = this.GetComponent();
}
///
/// 发送消息
///
///
public override void PostMsg(string _msg, Action _callback)
{
base.PostMsg(_msg, _callback);
}
///
/// 发送数据
///
///
///
///
public override IEnumerator Request(string _postWord, System.Action _callback)
{
stopwatch.Restart();
//若没有配置环境变量,可用百炼API Key将下行替换为:apiKey="sk-xxx"。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
string apiKey = m_Settings.m_API_key;
string appId = m_Settings.m_APP_ID; // 替换为实际的应用ID
string url = $"https://dashscope.aliyuncs.com/api/v1/apps/{appId}/completion";
string _jsonData = null;
if (string.IsNullOrEmpty(session_id))
{
StringBuilder str = new StringBuilder();
str.Append("{");
str.Append("\"input\":");
str.Append("{\"prompt\":\"" + _postWord + "\"},");
str.Append("\"parameters\": { },");
str.Append("\"debug\": { }");
str.Append("}");
_jsonData = str.ToString();
}
else
{
StringBuilder str = new StringBuilder();
str.Append("{");
str.Append("\"input\":");
str.Append("{\"prompt\":\"" + _postWord + "\",");
str.Append("\"session_id\":\"" + session_id + "\"},");
str.Append("\"parameters\": { },");
str.Append("\"debug\": { }");
str.Append("}");
_jsonData = str.ToString();
}
Debug.Log(_postWord+ session_id);
using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
{
request.timeout = 15;
request.SetRequestHeader("Authorization", apiKey);
request.SetRequestHeader("Content-Type", "application/json");
byte[] data = System.Text.Encoding.UTF8.GetBytes(_jsonData);
request.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);
request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
yield return request.SendWebRequest();
if (request.responseCode == 200)
{
string _msg = request.downloadHandler.text;
JsonData responseBody = JsonMapper.ToObject(_msg);
Debug.Log(responseBody["output"]["session_id"].ToString() + responseBody["output"]["text"].ToString());
session_id = responseBody["output"]["session_id"].ToString();
//回调
_callback(responseBody["output"]["text"].ToString());
}
else
{
Debug.Log(request.downloadHandler.text + "[error]");
_callback("[error]");
}
}
stopwatch.Stop();
Debug.Log("chat阿里-耗时:" + stopwatch.Elapsed.TotalSeconds);
}
}