読者です 読者をやめる 読者になる 読者になる

なかしょの技術日誌

業務でプログラミングをしなくなったのでプライベートで調査した技術情報を書き留めていきます。

Microsoft Bot Framework と docomo Developer Support 雑談対話APIの連携

はじめに

この記事は「Microsoft Cognitive Services & Bot Framework - Qiita」の5日目になります。

概要

Bot Frameworkと連携できるのはCognitive Serviceのみではありません。
本記事ではdocomo Developer Supportで提供されるAPIを使用して、Botアプリケーションを作成することで、チャットボットの可能性を広げて行きたいと考えています。
と大層なことを言っている割に雑談対話APIとの連携のみとなってしまいました。

docomo Developer Supportとは

docomo Developer supportをご存知でしょうか

dev.smt.docomo.ne.jp

サイトには以下のように紹介されています。

docomo Developer supportは、ドコモやパートナー企業が持つ様々なアセットを「API」として汎用化して提供し、開発者へ展開することで、新たな事業の創出を推進する協創プラットフォームです。ドコモは、中期目標に向けた取り組みとして、世の中の様々なパートナーの皆さまとのコラボレーションにより新たな付加価値を創造する「協創」を進めていきます。

どのようなAPIがあるか

| docomo Developer support | NTTドコモ

対話AI向けとして以下を提供しています。

雑談対話APIとの連携

パラメータは以下のページで紹介しています。

dev.smt.docomo.ne.jp

発言したいテキストのみをパラメータに渡しても問題ありませんが、botに話しかけるユーザの属性を付与することで、雑談の内容が変わるようです。

リクエスト

Bot Frameworkを利用したアプリケーションから以下の形式でリクエストを投げるようにしました。

  • リクエストURL

    https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue

  • メソッド : POST
  • 文字コード : UTF-8
  • リクエストヘッダ:Content-Type:application/json
  • リクエストクエリパラメータ
    • APIKEY(ユーザ登録後発行されるキーです)
  • リクエストボディ(JSON形式)

    {
    "utt": "こんばんは",
    "context": "100001",
    "nickname": "なかしょ",
    "nickname_y": "ナカショ",
    "sex": "男",
    "bloodtype": "A",
    "birthdateY": "1978",
    "birthdateM": "12",
    "birthdateD": "6",
    "age": "37",
    "constellations": "射手座",
    "place": "東京",
    "mode": "dialog",
    "t": "20"
    }

utt(発言内容)はBotFrameworkを利用したactivity.Textから取得したものを当てはめています。
contextはレスポンスから取得した値を次の発言時に含めることで意味のある会話を継続できるようです。特にしりとり機能を使用時では必要となります。
今回はuttとcontext以外は固定値を使用しています。

modeは何も選択しなければ「dialog」が適用されて通常の会話になります。「srtr」を指定するとしりとりのモードになります。
tはキャラクタ選択で今回は「20:関西弁キャラ」を選択しています。

レスポンス

以下のようにレスポンスを受け取りました。

{
"utt":"こんありやけど",
"yomi":"こんありやけど",
"mode":"dialog",
"da":"0",
"context":"100001",
}

uttの値を返信テキストとして、ReplyToActivityAsyncに渡してBotから返信させるようにしています。

連携例

エミュレータのキャプチャを以下に示します。

f:id:nakasho_dev:20161204032042p:plain

簡単ですが以上です。

Microsoft Cognitive Servicesでは雑談対話の仕組みはなく、LUISで雑談できるまで学習させるのも大変です。
例えばLUISでintentのscoreが低いものばかりの時は的外れな回答をしてしまう可能性が高いです。そういう場合は条件に該当しないと判断して、この雑談対話APIで返信内容をゲットするのもありかなぁと思っています。
正直雑談対話が成り立っていない時も多々見受けられますが...