/// <summary> /// 詢問問題的動作 /// </summary> /// <param name="value"></param> /// <param name="code"></param> /// <returns></returns> public KBModel.GenerateAnswerResultModel GenerateAnswer(string strKbId, KBModel.GenerateAnswerModel value, out HttpStatusCode code) { KBModel.GenerateAnswerResultModel result = null; string strUrl = $"/{strKbId}/generateAnswer"; string strResult = Utility.CallQnAMaker(strUrl, "POST", JsonConvert.SerializeObject(value), this.SubscriptionKey, out code); if (code == HttpStatusCode.OK) { result = JsonConvert.DeserializeObject <KBModel.GenerateAnswerResultModel>(strResult); } return(result); }
/// <summary> /// 處理送出 Question 取回 Answer /// </summary> /// <param name="pquestion"></param> private void QNAMakerGenerateAnswer(string pquestion) { KBModel.GenerateAnswerModel objQuery = new KBModel.GenerateAnswerModel() { question = pquestion, top = 1, }; maduka_QnAMakerLibrary.API.QnAMaker QNAMaker = new maduka_QnAMakerLibrary.API.QnAMaker(); QNAMaker.SubscriptionKey = SubscriptionKey; HttpStatusCode code = HttpStatusCode.OK; KBModel.GenerateAnswerResultModel result = QNAMaker.GenerateAnswer(strKbId, objQuery, out code); string remsg = string.Empty; if (code == HttpStatusCode.OK) { // 取出最相似的回覆,並放在文字方塊中==> 以下程式碼取消,因為就算 match 不到,系統也會回覆:No good match found in the KB (Count = 1) //if (result.answers.Count > 0) //{ // remsg = string.Format("{0},{1}({2})", username, result.answers[0].answer, result.answers[0].score); //} //else //{ // remsg = string.Format("{0},{1}", username, "哩哄啥,哇聽某!"); //} // 取出回覆的分數是 >= 50 ==> 改採用分數來判斷,如果不到規定的分數就完全不理會 if (result.answers[0].score >= 50) { //處理回覆內容中是否已含了自己的名稱,如果有,就不再加稱呼, if (result.answers[0].answer.Contains(username)) { remsg = string.Format("{0}(Score={1})", result.answers[0].answer, result.answers[0].score); } else { remsg = string.Format("{0},{1}(Score={2})", username, result.answers[0].answer, result.answers[0].score); } LintBot.ReplyMessage(ReceivedMessage.events[0].replyToken, remsg); } } else { LintBot.ReplyMessage(ReceivedMessage.events[0].replyToken, "Generate Answer Fail:" + code.ToString()); } }
/// <summary> /// 開始進行問答的動作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnQuery_Click(object sender, EventArgs e) { KBModel.GenerateAnswerModel objQuery = new KBModel.GenerateAnswerModel() { question = txtQuery.Text, top = int.Parse(txtTop.Text), }; HttpStatusCode code = HttpStatusCode.OK; string strKbId = base.KBList[cbxKbId.SelectedIndex].kbId; KBModel.GenerateAnswerResultModel result = base.iQnAMaker.GenerateAnswer(strKbId, objQuery, out code); if (code == HttpStatusCode.OK) { this.BindData(result); } else { MessageBox.Show("Generate Answer Fail:" + code.ToString()); } }