「さわってわかるクラウドAI Microsoft Cognitive Services実践ガイド」という本を購入して、勉強しています。
前回は、とりあえずQnA Serviceを作って遊んでみました。
本に書いてあるとおりにやることで、簡単にできました。
→QnA Serviceを使ってみました。
スポンサーリンク
本では、前回の続きからになっていますが、翌日になってしまったので、
QnA Makerのトップページからスタートして、処理してみます。
https://qnamaker.ai/
「My services」をクリック
前回作成した「Conitive Bussiness FAQ」が表示されるので、右側のエンピツのマークをクリックします。
「Publish」をクリック
「Publish」をクリック
これで、API化できました。
「Sample HTTP request」の欄に以下のような記述があります。
これは、「hi」という質問に対する答えを取得する方法を表しています。
Host: https://westus.api.cognitive.microsoft.com/qnamaker/v2.0
Ocp-Apim-Subscription-Key: <サブスクリプションキー>
Content-Type: application/json
{"question":"hi"}
VB.netで、サンプルコードを書いてみました。
Dim webReq As Net.HttpWebRequest Dim webRes As Net.HttpWebResponse Dim reqStream As System.IO.Stream Dim resStream As System.IO.Stream Dim resStreamReader As System.IO.StreamReader Dim byData As Byte() Dim sエンドポイント As String Dim sJSON As String Dim sOnAServiceごとに異なる値 As String Dim sサブスクリプションキー As String Dim s質問 As String sOnAServiceごとに異なる値 = "<OnA Serviceごとに異なる値>" sサブスクリプションキー = "<サブスクリプションキー>" s質問 = "<質問文>" Try sエンドポイント = "https://westus.api.cognitive.microsoft.com/qnamaker/v2.0" sエンドポイント &= "/knowledgebases/" & sOnAServiceごとに異なる値 & "/generateAnswer" 'UTF-8でバイト配列に変換します byData = System.Text.Encoding.GetEncoding("utf-8").GetBytes("{""question"":""" & s質問 & """}") webReq = DirectCast(System.Net.WebRequest.Create(sエンドポイント), System.Net.HttpWebRequest) webReq.Method = "POST" webReq.ContentType = "application/json" webReq.ContentLength = byData.Length webReq.Headers("Ocp-Apim-Subscription-Key") = sサブスクリプションキー 'RequestStreamを取得 reqStream = webReq.GetRequestStream() reqStream.Write(byData, 0, byData.Length) reqStream.Close() 'RequestStreamを取得 webRes = webReq.GetResponse() resStream = webRes.GetResponseStream() resStreamReader = New System.IO.StreamReader(resStream, System.Text.Encoding.UTF8) 'レスポンスはJSON形式です。 sJSON = resStreamReader.ReadToEnd 'RichTextBox1に結果を表示するようにしました。 RichTextBox1.Text = sJSON Catch ex As Net.WebException 'エラーが発生した場合、こうすると内容がわかります。 If Not ex.Response Is Nothing Then Dim errorResponse As Net.HttpWebResponse errorResponse = ex.Response Dim reader As New IO.StreamReader(errorResponse.GetResponseStream()) Dim sError As String sError = reader.ReadToEnd() MessageBox.Show(sError) End If End Try
「雑誌の代金支払方法は?」という質問をしてみた結果です。
"answers": [
{
"answer": "年間予約購読の場合、購読料のお支払い(一括前払い)のご案内は、雑誌に同封または別便でお送りします。バックナンバー1部のみの購入の場合、クレジットカードか請求書払いでお支払いください。",
"questions": [
"雑誌の代金支払方法は?"
],
"score": 56.818567254638765
}
]
}
次回は、「Conitive Bussiness FAQ」をBot化してみます。
→QnA ServiceをBot化してみました。