1.查看官方文档
我选择的是使用HTTP调用接口。
注意:API-Key 需要我们登录阿里云创建项目获得。
完成其前提条件,我们就可以使用接口测试工具(Apifox)辅助 ,填入相关接口信息进行测试。(这步不重要)
2.Unity中编写代码
该代码我使用了多轮对话input.messages去记录我对大数据模型人物的设定,但是我并没有完善我们之后聊天记录联系上下文的设定。
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class QWTurbo : MonoBehaviour
{
[SerializeField] protected string url;
public QWTurbo()
{
url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation";
}
/// <summary>
/// api key
/// </summary>
[SerializeField] private string api_key;
/// <summary>
/// api modle
/// </summary>
[SerializeField] private string modle;
// 发送消息
public void PostMsg(string _msg, Action<string> _callback)
{
StartCoroutine(Request(_msg, _callback));
}
/// <summary>
/// 调用接口
/// </summary>
/// <param name="_postWord"></param>
/// <param name="_callback"></param>
/// <returns></returns>
public IEnumerator Request(string _postWord, System.Action<string> _callback)
{
Debug.Log("输入问题:" + _postWord);
using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
{
MessageData message0 = new MessageData
{
role = "user",
content = "现在我将设定为你是陈医助,一名医务工作者。请根据这个设定回答我接下来所有的问题。"
};
MessageData message1 = new MessageData
{
role = "user",
content = _postWord
};
InputData inputData = new InputData
{
messages = new List<MessageData> { message0, message1 }
};
AllData allData = new AllData
{
model = this.modle,
input = inputData
};
//string _jsonText = JsonUtility.ToJson(allData).Trim();
string _jsonText = JsonConvert.SerializeObject(allData);
Debug.Log(_jsonText);
//AllData data1 = JsonConvert.DeserializeObject<AllData>(_jsonText);
//Debug.Log(data1.input.prompt);
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();
//Debug.Log(request.responseCode);
//成功
if (request.responseCode == 200)
{
string _msgBack = request.downloadHandler.text;
Debug.Log(_msgBack);//输出返回Json
AllMsgBack _backtext = JsonConvert.DeserializeObject<AllMsgBack>(_msgBack);
//Debug.Log(_backtext.output.text);
_callback(_backtext.output.text);
}
else//失败
{
string _msgBack = request.downloadHandler.text;
Debug.LogError(_msgBack);
}
}
}
#region 发送数据包
protected class AllData
{
public string model;
public InputData input { get; set; }
}
protected class InputData
{
public List<MessageData> messages { get; set; }
}
// 消息类
protected class MessageData
{
public string role { get; set; }
public string content { get; set; }
}
#endregion
#region 返回数据包
protected class AllMsgBack
{
public OutputMessage output;
public UsageMessage usage;
public string request_id;
}
protected class OutputMessage
{
public string finish_reason;
public string text;
}
protected class UsageMessage
{
public int total_tokens;
public int output_tokens;
public int input_tokens;
}
#endregion
}