百度UNIT 的 API使用理解
具体理解如下
- 创建:UNIT API
- UNIT智能对话平台快速搭建智能对话机器人(这里百度智能对话定制与服务平台文档中心有详细的配置视频)。
- 掌握:对话API接口3.0的基本使用
-
Access Token获取”
Access Token获取理解:通过POST请求完成HTTP API调用。就是告诉百度:百度你很荣幸获得我的宠幸,我要使用你的在线API。 -
UNIT API的调用
UNIT API的调用理解:就是JSON文件的封装(他配叫封装吗?)和解析。就是按照百度的要求,上传一个JSON文件(一个请求,如:你好),百度给你返回一个JSON文件(一个应答,如:我听不懂你说什么);上传JSON文件中包含一些是必须的,一些是选填的,但是格式符合百度要求。 -
unity,unity这里没有什么说的,当作组件挂上就行了。
-
如果理解偏差请指正,如果说的不好,别喷就好!
-
过程步骤
创建UNIT
Access Token获取
不想看可以跳过!!!建议看看!!!!
using System;
using System.Collections.Generic;
using System.Net.Http;
namespace com.baidu.ai
{
public static class AccessToken
{
// 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
// 返回token示例
public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";
// 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
private static String clientId = "百度云应用的AK";
// 百度云中开通对应服务应用的 Secret Key
private static String clientSecret = "百度云应用的SK";
public static String getAccessToken() {
String authHost = "https://aip.baidubce.com/oauth/2.0/token";
HttpClient client = new HttpClient();
List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));
HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
String result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
return result;
}
}
}
UNIT API的调用
不想看可以跳过!!!建议看看!!!!
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web.Script.Serialization;
using System.Net.Http;
namespace com.baidu.ai
{
public class Utterance
{
// unit对话接口
public static string unit_utterance()
{
string token = "#####调用鉴权接口获取的token#####";
string host = "https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=" + token;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
request.Method = "post";
request.ContentType = "application/json";
request.KeepAlive = true;
//str 是传入的json文件
string str = "{"version":"3.0","service_id":"S10000","session_id":"","log_id":"7758521","request":{"terminal_id":"88888","query":"你好"}}"; // json格式 s100000是你机器人的ID需要改 你好 是传入的对话
byte[] buffer = Encoding.UTF8.GetBytes(str);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
//result 是返回的json文件
string result = reader.ReadToEnd();
Console.WriteLine("对话接口返回:");
Console.WriteLine(result);
return result;
}
}
}
Unity
如果你Unity 少包:window->Package Manger->Unity Registry(右侧搜索);但是基本上应该不少啊!此不详述。
Unity 挂脚本,不用搭建场景,挂载到相机上就行。
源码
改动API 相关 已经标注!!!
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;
using UnityEngine;
public class baiduai_02 : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//获取认证
// String accessToken = AccessToken.getAccessToken();
//调用接口chart接口
Utterance.unit_utterance();
}
// Update is called once per frame
void Update()
{
}
public static class AccessToken
{
// 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
// 返回token示例
public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";
// 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
private static String clientId = "自己的";
// 百度云中开通对应服务应用的 Secret Key
private static String clientSecret = "自己的";
public static String getAccessToken()
{
String authHost = "https://aip.baidubce.com/oauth/2.0/token";
HttpClient client = new HttpClient();
List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));
HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
String result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
Debug.Log(result);
//TOKEN = result;
return result;
}
}
public class Utterance
{
// unit对话接口
public static string unit_utterance()
{
JObject jo = (JObject)JsonConvert.DeserializeObject(AccessToken.getAccessToken());
string token = jo["access_token"].ToString();
//string message = jo["Message"].ToString();
// string token = AccessToken.getAccessToken();//token已经获取
string host = "https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=" + token;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
request.Method = "post";
request.ContentType = "application/json";
request.KeepAlive = true;
//改成自己的!
string wen = "承德今天天气";
string str = "{\"version\":\"3.0\",\"service_id\":\"S10000\",\"session_id\":\"\",\"log_id\":\"7758521\",\"request\":{\"terminal_id\":\"88888\",\"query\":\""+wen+"\"}}"; // json格式 S10000 需要自己的!
byte[] buffer = Encoding.UTF8.GetBytes(str);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string result = reader.ReadToEnd();
Console.WriteLine("对话接口返回:");
// Debug.Log("________json________result______________________"+result);//看一下json格式
Console.WriteLine(result);
//解析json
/*
1.Json字符串嵌套格式解析
string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string zone = jo["beijing"]["zone"].ToString();
string zone_en = jo["beijing"]["zone_en"].ToString();
2.Json字符串数组格式解析
string jsonArrayText = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]"; //"[{'a':'a1','b':'b1'}]即使只有一个元素,也需要加上[]
string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]"; //上面写法和此写法效果一样
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);//jsonArrayText必须是带[]数组格式字符串
string str = jArray[0]["a"].ToString();
*/
//Json字符串嵌套格式解析
Debug.Log(result);
JObject jresult = (JObject)JsonConvert.DeserializeObject(result);
string sjresult = jresult["result"]["responses"].ToString();
Debug.Log(sjresult);
//Json字符串数组格式解析
JArray jArray = (JArray)JsonConvert.DeserializeObject(sjresult);
string jactions = jArray[0]["actions"].ToString();
Debug.Log(jactions);
//Json字符串数组格式解析
JArray jArray1 = (JArray)JsonConvert.DeserializeObject(jactions);
string jactions1 = jArray1[0]["say"].ToString();
Debug.Log(jactions1);
//咏鹅,唐,骆宾王。鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。
///另外一种解析方式:///
/*
JObject resultObj = (JObject)JsonConvert.DeserializeObject(result);
string actions = resultObj["result"]["responses"].ToString();
JArray sayObj = (JArray)JsonConvert.DeserializeObject(actions);
string responses = sayObj[0].ToString();
//区别处:
JObject actionsObj = (JObject)JsonConvert.DeserializeObject(responses);
string sayobj = actionsObj.GetValue("actions")[0].ToString();
JObject ac = (JObject)JsonConvert.DeserializeObject(sayobj);
string acc = ac.GetValue("say").ToString();
*/
return result;
}
}
}
效果
如图
具体说的不明白的请 自行百度理解,他说的很详细