💬

Chaplus雑談APIでチャットボット に雑談機能を追加する

2020/12/21に公開

対象読者

  • チャットボットの開発に興味のある方
  • 既存のチャットボット に「雑談」機能を追加したい方

はじめに

こんにちは、maKunugiです。
チャットボットを開発していて、次のようなお悩みはありませんか?

  • 対応している語彙が少なく、ユーザの質問に応答を返せないことが多い
     ex.「すみません、わかりません」と返してしまうことが多く、ユーザ満足度を下げてしまう
  • 挨拶などの慣用表現にも対応したいけど、セリフを入力していくのが面倒臭い

チャットボットを開発していると、少なからず上記のような課題に遭遇することがあるかと思います。
そこで今回は、チャットボットに手軽に「雑談力」を追加し、上記のような課題を解決する方法を紹介します。

Chaplus 雑談APIとは?

Chaplus(Chat + Plusの造語) APIは、チャットボットを始めとする『対話型』サービスに、雑談機能やQ&A自動応答機能を手軽に実装することができるWeb APIです。2020年3月に開発&
Chaplus APIを利用するだけで、幅広い話題についての雑談が可能になるほか、セリフの追加やキャラクターの細かなカスタマイズまで行うことができます。

上記の画像のように、Chaplus APIはユーザの発話を渡すと、「それらしい」応答をScoreと一緒に返してくれます。

気になる方はまずはこちらのデモで話しかけてみてください!
https://www.chaplus.jp/demo

使い方

登録

まずはAPIの利用登録をしましょう。
https://www.chaplus.jp
上記ページ下部にある登録フォームで、メールアドレスと利用用途を入力しましょう。
登録すると、入力したメールアドレス宛に「API KEY」が記載されたメールが届きます。
※ 迷惑メールに振り分けられている可能性があるので、受信箱にメールが見当たらない方はチェックしてみましょう

応答を取得してみる

API KEYが手に入ったら、早速応答を取得してみましょう。
APIの仕様はこちらに記載があるので、詳細な説明は省きます。
https://k-masashi.github.io/chaplus-api-doc/

応答を取得するエンドポイントはこちらです。

https://www.chaplus.jp/v1/chat?apikey=<APIKEY>

API KEYの部分は、取得したAPI KEYに適宜変更してください。
仕様に沿ってリクエストを送ります。リクエストは必要なパラメータをjson形式で記述して行います。

jsonの例

{
    "utterance": "調子はどう?",
    "username": "太郎",
    "agentState":{
        "agentName": "エージェント",
        "tone": "kansai",
        "age": "14歳"
    }
}

utteranceには、ユーザの発話が、usernameにはユーザの名前を入れてあげます。
usernameを指定することで、時折APIの応答にユーザの名前が含まれるようになります。
agentStateには、応答するエージェント(チャットボット自身)の情報を付与することができます。

agentName: 応答するエージェントの名前
tone: 応答の口調(関西弁風など)
age: 応答するエージェントの年齢

それでは、curlでレスポンスを確かめてみましょう。

curl -v -H "Content-Type: application/json" -X POST -d '{"utterance":"仕事終わりのビールは最高","username":"太郎","agentState":{"agentName":"エージェント","tone":"kansai", "age":"20歳"}}' https://www.chaplus.jp/v1/chat\?apikey\=<APIKEY>

レスポンスの例

{
    "utterance": "仕事終わりのビールは最高",
    "bestResponse": {
        "utterance": "適量でね",
        "score": 1,
        "url": ""
    },
    "responses": [
        {
            "utterance": "適量でね",
            "score": 1,
            "url": ""
        },
        {
            "utterance": "今日も1日おつかれさま",
            "score": 1,
            "url": ""
        },
        {
            "utterance": "今日1日太郎はんががんばった証拠やね。",
            "score": 0.7083,
            "url": ""
        },
        {
            "utterance": "カンパーイ!",
            "score": 0.7083,
            "url": ""
        },
        {
            "utterance": "牛乳派です",
            "score": 0.3333,
            "url": ""
        },
        {
            "utterance": "偉い",
            "score": 0.3333,
            "url": ""
        }
    ],
    "tokenized": [
        "名詞,サ変接続,*,*,*,*,仕事,シゴト,シゴト",
        "動詞,自立,*,*,五段・ラ行,連用形,終わる,オワリ,オワリ",
        "助詞,連体化,*,*,*,*,の,ノ,ノ",
        "名詞,一般,*,*,*,*,ビール,ビール,ビール",
        "助詞,係助詞,*,*,*,*,は,ハ,ワ",
        "名詞,一般,*,*,*,*,最高,サイコウ,サイコー"
    ],
    "options": [
        "疲れた",
        "肩凝った",
        "会社の人間関係は家まで持ち込みたくないですね",
        "今日は大変な1日だったなー",
        "明日はいい朝を迎えたいね",
        "ヒーリング音楽流すと安らぎますよね"
    ]
}

各応答文に付与されているScoreの基準は下記の通りです。

Score
1.0 : かなり自然
0.8以上 : 自然
0.6以上 : 自然とは言えないが、的を得ている場合が多い
0.4以上 : 自然ではないが関連性がある程度認められている
0.4未満 : 自然でない (とんちんかんな発話な可能性)

optionsには、次にユーザが話しかけるときに参考になる「発話候補」が返されます。

これだけの作業で、発話に対する応答文を取得することができました!
BestResponseには、一番Scoreが高い応答文が入っています。
BestResponseの応答文を採用すれば基本的にOKですが、同じレスポンスだけでなくある程度の変化を持たせたい場合は、ある一定のScoreの中からランダムに選択するなどしても良いかもしれません。

セリフをカスタマイズしてみる

Chaplus APIは特に何も設定せずに、ユーザの発話に対する応答を取得できます。
ただ、APIに任せっきりではなく、時には指定した応答をして欲しい場合もあります。
そういった場合は、セリフのカスタマイズをしてあげます。

"utterancePairs":[
    {
        "utterance":"おはよう!",
        "response":"今日も1日頑張って!",
	"options":"お布団から出られない,仕事行きたくない"
    },
    {
        "utterance":"調子はどう?",
        "response":"すごくいいよ!",
	"options":"元気?,"
    }
]

リクエストパラメータのadditionに上記のようなjsonを追加すると、セリフをカスタマイズすることができます。
上記のような情報を与えた場合、「おはよう」と話しかけたら「今日も1日頑張って!」と応答するようになります。
また、optionsも付与しているので、応答を返す際にoptionsに指定した発話候補も一緒に返します。

additionに付与した例

{
    "utterance": "調子はどう?",
    "username": "太郎",
    "agentState":{
        "agentName": "エージェント",
        "tone": "kansai",
        "age": "14歳"
    }
    "addition" {
        "utterancePairs" [
            {
                "utterance": "肩凝った",
                "response":"適度に運動しないとね",
                "options":"肩まわしてくる,ジョギングしてくる,マッサージして",
            },
        ]
    }
}

NGワードを設定する

APIが行う応答の中には、チャットボットの応答として不適切な文言が含まれてしまう可能性があります。
その際は、気になる文言をNGワードに登録してあげましょう。

NGワード指定の方法

        "ngwords" [
            "ため息",
            "やめてしまえ"
        ]

上記のようにNGワードは配列で文言を指定するだけでOKです。

additionに付与した例

{
    "utterance": "調子はどう?",
    "username": "太郎",
    "agentState":{
        "agentName": "エージェント",
        "tone": "kansai",
        "age": "14歳"
    }
    "addition" {
        "ngwords" [
            "ため息",
            "やめてしまえ"
        ]
    }
}

まとめ

いかがでしたでしょうか? 以上、簡単にChaplus APIの使い方を紹介しました。
この他にも様々な設定が可能なので、お試しいただく方はぜひこちらのDocをご参照ください。
https://k-masashi.github.io/chaplus-api-doc/
上記のように、簡単に発話に対する応答文を取得することができるので、ぜひチャットボットを作成する際は、お試しください! Web API形式での提供なので、様々な環境からお試しいただけるかと思います。

APIに関するお問い合わせはこちらのTwitterアカウントまでお寄せください!

お読みいただきありがとうございました。

Discussion