今回はGoogle ColabとPythonプログラムを使って簡単なチャットボットを開発しました。ななみんの参考YouTubeはこちら。

YouTube動画とは違い今回の記事では下記の手順で進めていきます。

基礎編

1.A3RT(AIチャットサービスAPI)への登録

それでは初めにA3RTへの登録を行いAPIキーを取得します。
※A3RTは時折APIキーの発行までに15分程度時間がかかる場合があるため、最初に行います。

下記のリンクにアクセスして、メールアドレスを登録します。

A3RT

メールアドレスの登録が終わると、認証メールが再び送信されるの、もう一度メールの受信トレイを開いて、A3RTからのメールに記載されているリンク先へアクセスすると、メールアドレスが認証されます。

2.A3RTのAPIキーの取得

認証が終わると登録したメールアドレスにAPIキー発行メールが届くので、APIキーをコピー出来るようにしておきましょう。
※この際空白部分などをコピーしないように注意しましょう。

APIキーの取得

3.Google Colabのノートブックの作成

次にリンクからGoogle ColabのWelcomeブックを開きます。

リンク先でノートブックを開いたら、メニューバーのファイルからノートブックを新規作成を選択して新しいノートブックを開きます。

新しいノートブック(Untitled.ipynb)が開けたら右上の接続ボタンを押して、ノートブックをクラウドに接続します。

4.A3RTを使ったチャットボットサービスモックの開発

接続が完了したら、一番上のセルに下記のプログラムをコピー&ペーストします。

最初のプログラム(手順7まで)

import requests
from IPython.display import Image

def talk_api(message):
    apikey = "ここにAPIキーを入れる"  #@param {type:"string",title:"キー入力"}
    talk_url = "https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk"

    payload = {"apikey": apikey, "query": message}
    response = requests.post(talk_url, data=payload)

    try:
        return response.json()["results"][0]["reply"]
    except:
        print(response.json())
        return "ごめんなさい。もう一度教えて下さい。"

def main():
     while(True):
         print("あなた:", end="")
         message = input()
         display(Image('/content/Bot.png'))
         print("BOT:" + talk_api(message))

if __name__ == "__main__":
     main()

手始めにセル左上の実行ボタンを押して、プログラムを実行しましょう。

プログラムを実行するとセル左上のボタンが実行中の回るアニメーションに変わります。また、セルの下に入力フォームが出現するので、入力にフォームに「こんにちは」や「おはよう」など何かのメッセージを入力した後にエンターキーで送信しましょう。

下記のような返答が返ってきたら正常に動作しています。

こちらはtalk_api関数の内部で記述しているtry,except節のエラーハンドリングが実行されている時に発生するレスポンスになります。まだAPIキーを入力していないので、エラーハンドリング部分が実行される訳です。

次は先程メールアドレスに届いたAPIキーを、セル右側の入力フォームに入力して、もう一度プログラムを実行しましょう。

プログラムの実行にはセル左上にあるボタンをクリックして、一度処理を止め、もう一度クリックして実行しましょう。

プログラムが実行されて、先程のようにセル直下に入力フォームが現れたら、先程と同じように「こんにちは」や「おはよう」などのメッセージを送信してみましょう。

上図のように、チャットボットから返答が返って来たら、正常にチャットボットシステムとして動作してます。

以上でチャットボットとしての基礎的な項目は完成です。

アイコン作成編

5.WAIFU LABSを使ったチャットボットアイコンの作成

上図の画像でも分かるようにこのチャットボットシステムのプログラムには画像表示のプログラム組み込まれています。インタープリター画面(セル直下の入力フォーム)ではリンク切れのアイコンとして表示されています。
どの様なアイコンをチャット相手にするかは個人の趣味嗜好によりますが、今回は簡単に深層学習を元に、二次元イラストを生成してくれるWAIFU LABSというサービスを使用してアイコンを作成します。

WAIFU LABSにアクセスしてアイコンを生成しましょう。

WAIFU LABSにアクセスしたら、右下の「MEET YOUR DREAM WAIFU」をクリックして先へ進みます。

次に手順の紹介のポップアップが出てきますが、☓ボタンを表示を消しましょう。

ポップアップを消すとタイル状に並んだイラストが現れます。イラストの中から、クリックして好みにあったイラストを選んでいきます。

4回ほどイラストを選ぶと、最終的に好みのイラストが表示され下記のような画面に変わります。

少々分かりにくいですが、ページ左下にある「Download this girl」という項目をクリックするとwaifu.pngというpngファイルがダウンロードされます。

6.Google Colab上でのチャットボットアイコンの表示

画像のダウンロードが終わったら、Google colabのノートブックに戻り左側のファイルを開いて画像をドラッグ&ドロップしましょう。

ファイルがアップロードされたのを確認したら、プログラムからアクセスできるようにファイル名を変更します。

ファイル名はBot.pngに変更しましょう。

ファイル名の変更が終わったら、再度プログラムを停止させて、もう一度実行します。

正常に実行されると下図のように返答とともにアイコン(イラスト)が表示されるようになります。

これでアイコンが加わって、だいぶ自分のチャットパートナーとしてカスタマイズされてきた感じがすると思います。

7.チャットボット(チャット相手の名前の変更)

最後にチャット相手の名前がBOTでは少し味気ないので、名前の変更を行います。

def main():
     while(True):
         print("あなた:", end="")
         message = input()
         display(Image('/content/Bot.png'))
         print("BOT:" + talk_api(message))

上記のプログラムの中のmain関数の最後で利用されているprint文に記述されている”BOT”という部分を任意の名前に変更します。

def main():
     while(True):
         print("あなた:", end="")
         message = input()
         display(Image('/content/Bot.png'))
         print("あい:" + talk_api(message))

サンプルではAIから”あい”という名前に変更します。

再度プログラムを停止して、もう一度実行します。

上図のように返答時の名前が「あい」に変更されていれば正常にプログラムが動作しています。

以上でアイコン作成編は終了です。

受け答え変更編

8.Pythonプログラムによる言葉の置き換え

A3RTのAPIは性格を変更するためのパラメーターなどは用意されていないため、受け答えをカスタマイズするために、最もシンプルな方法として、場合分けを行います。

入力したAPIキーを消さないために、セルを新規に追加して、下記のコードをコピー&ペーストしましょう。最初のセルの下の縁にカーソルをあわせると「+ コード」のボタンが出てくるので、そのボタンをクリックして、セルを追加します。

import requests
from IPython.display import Image

def change(original):
  before =  "変換前文字列"  #@param {type:"string",title:"変換前の文字列を入力"}
  after =  "変換後文字列"  #@param {type:"string",title:"変換後の文字列を入力"}
  if before in original:
    return original.replace(before , after)
  else:
    return original

def talk_api(message):
    apikey = "ここにAPIキーを入れる"  #@param {type:"string",title:"キー入力"}
    talk_url = "https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk"

    payload = {"apikey": apikey, "query": message}
    response = requests.post(talk_url, data=payload)

    try:
        return response.json()["results"][0]["reply"]
    except:
        print(response.json())
        return "ごめんなさい。もう一度教えて下さい。"

def main():
     while(True):
         print("あなた:", end="")
         message = input()
         display(Image('/content/Bot.png'))
         print("BOT:" + change(talk_api(message)))

if __name__ == "__main__":
     main()

プログラムのコピー&ペーストが終わったら、前のセルの入力フォームに入力したAPIキーをコピーして、新しいセルの入力フォームにAPIキーをペーストしましょう。

APIキーをペーストしたら、前のセルは削除してしまっても大丈夫です。

つぎに一部の文章の置き換えを行う為に「おきかえる文章部分」と「置き換え後の文章」を入力します。
今回のサンプルでは「こんにちは」を「おはこんばんはにちは」に変更します。

そのため下記の様な入力をします。

上記のように入力したら、新しいセルを実行してみましょう。
再びセル直下に入力インターフェースがでてくるので「こんにちは」と入力してみます。

こんにちはに対して、「おはこんばんにちは」と返答されていれば、無事に動作しています。このようにして一部の言葉を置き換えることが可能です。

語尾変更編

9.ワンラインでの語尾の変更

最後に語尾を変更してみましょう。今回はアニメキャラのように語尾を「にゃん」に変更してみます。

main関数内で使われているprint関数の処理内容を変更します。具体的には下記のように変更しましょう。

print("BOT:" + change(talk_api(message)) + "にゃん")

上記の変更を加えて再度実行してみましょう。

このようにシンプルなコード変更ですが、個性のような振る舞いを擬似的にもたせることができます。

以上でGoogle Colabを使ってAIチャットボットをカスタマイズしてみようは終わりです。
A3RTのAPIの仕様に関しては詳しくはこちらをご確認ください。
この記事を参考に皆さんも是非色々実験してみてください。


0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です