以下是类内的静态变量。用于管理状态及TOKEN信息,SESSION信息。
// 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
// 返回token示例
public static readonly String TOKEN = getAccessToken();
public static bool IsFinishedThisUnit;
private static string sessionId="";
private static bool first=true;
下面是一段 c#调用百度API接口,获取临时token值。
public static string getAccessToken()
{
String clientId = 【这里填入APPID】;
String clientSecret = 【这里填入APPSECRET】;
String authHost = "https://aip.baidubce.com/oauth/2.0/token";
HttpClient client = new HttpClient();
List> paraList = new List>();
paraList.Add(new KeyValuePair("grant_type", "client_credentials"));
paraList.Add(new KeyValuePair("client_id", clientId));
paraList.Add(new KeyValuePair("client_secret", clientSecret));
HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
String result = response.Content.ReadAsStringAsync().Result;
//Console.WriteLine(result);
JObject res = JObject.Parse(result);
return res["access_token"].ToString();
}
再根据TOKEN调用UNIT通用API接口获取返回json字符串并分析字符串指向的方法
public static JObject Unit_Send(string Content)
{
IsFinishedThisUnit = false;
string host = "https://aip.baidubce.com/rpc/2.0/solution/v1/unit_utterance?access_token=" + TOKEN;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
request.Method = "post";
request.ContentType = "application/json";
request.KeepAlive = true;
string str = "{\"scene_id\":【这里填入UNIT场景ID】,\"query\":\"" + Content + "\", \"session_id\":\"" + sessionId + "\"}"; // json格式
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);
JObject res = JObject.Parse(reader.ReadToEnd());
if (res["error_code"] == null)
{
sessionId = res["result"]["session_id"].ToString();
if (res["result"]["action_list"][0]["action_type"]["act_type"].ToString() == "satisfy")
{
//意图完成
IsFinishedThisUnit = true;
return res;
}
else if (res["result"]["action_list"][0]["action_type"]["act_type"].ToString() == "clarify")
{
//意图未完成
Console.Write(res["result"]["action_list"][0]["say"].ToString());
return null;
}
else
{
//未知意图 可加本地日志记录逻辑 以后期扩充样本集
Console.Write("你到底想干嘛?");
return null;
}
}
else
{
return null;
}
}
}
TOP
切换版块
有个人可以问真好.
欢迎跟帖提问
...IT小哥哥...(☄⊙ω⊙)☄.这帖子要收藏起来.我马上就要用了.
额,看来你不喜欢呀
听了一遍就关了。。。
有没有被洗脑呀~
听过
可以去听听,这首歌还不错
= =害怕
好吧~之前参加百度校园【IT小哥哥】神曲活动被洗脑了……
别这么娘。。。。
我就是男的呀~
。。。。。你不是男的吗
那好吧,IT小哥哥~
。。。。你说别的都行。。。
不要谦虚嘛~不然我要说些什么呢~
- -。。。。。你别夸我了。我好慎得慌
好哒~说的不错~
15L那里讲错一句话。
使用sessionID的好处是可以获取上一轮及之前 *意图* 填充的词槽情况(词槽继承、复用词槽)。如果开了新会话就都没了。
2个不同的sessionID会话之间的词槽情况是完全隔离的,没有任何关系。
谢谢大神解惑