「さわってわかるクラウド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化してみました。