会社行きたくなかったんです。

自由になりたくて会社辞めました

Azure

QnA ServiceをWeb API化してみました。

投稿日:

さわってわかるクラウド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」という質問に対する答えを取得する方法を表しています。

POST /knowledgebases//generateAnswer
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化してみました。

-Azure

Copyright© 自由になりたくて会社辞めました , 2024 AllRights Reserved Powered by AFFINGER4.