30行のPythonコードを使用した電信トレーニングAIチャットボット

画像

今日、思いついたのは、「AIを使ってTelegramチャットボットを作成し、それをトレーニングできるのはなぜですか?」


これが非常に簡単になったので、考え直すことなくコードを書き始めました。
言語としてPythonを選んだのは、 この種のアプリケーションを使用するのが最も簡単です。

したがって、AIでTelegramチャットボットを作成するには、次のものが必要です。

1. Telegram API。 ラッパーとして、実績のあるpython-telegram-botライブラリを取りました

2. AI API。 Googleの製品、つまりDialogflowを選択しました。 非常に優れた無料のAPIを提供します。 Dialogflow Wrapper for Python

ステップ1. Telegramでボットを作成する


ボットの名前を考え出し、@botfatherを作成します 。 ボットを作成した後、どこかに保存したいAPIトークンを受け取ります。 将来的には必要になります。

画像

ステップ2.ボットの基礎を作成する


Botフォルダーを作成し、その中にbot.pyファイルを作成します。 ボットのコードは次のとおりです。
コンソールを開き、ファイルがあるディレクトリに移動して、 python-telegram-botをインストールします。

pip install python-telegram-bot --upgrade 

インストール後、「フレームワーク」をすでに作成できます。これは、今のところ、同じタイプのメッセージで単純に応答します。 必要なモジュールをインポートし、APIトークンを処方します。

設定とインポートコード
 #  from telegram.ext import Updater, CommandHandler, MessageHandler, Filters updater = Updater(token=' API ') #  API  Telegram dispatcher = updater.dispatcher 


次に、2つのコマンドハンドラを記述します。 これらは、更新の受信時に呼び出されるコールバック関数です。 / startコマンドと通常のテキストメッセージに対して、このような関数を2つ作成します。 引数として、2つのパラメーターbotupdateがそこに渡されます。 ボットにはAPIとの対話に必要なメソッドが含まれ、 更新には到着したメッセージに関するデータが含まれます。

コールバックコード
 #   def startCommand(bot, update): bot.send_message(chat_id=update.message.chat_id, text=',  ?') def textMessage(bot, update): response = '  : ' + update.message.text bot.send_message(chat_id=update.message.chat_id, text=response) 


現在、これらのハンドラーを通知に割り当て、更新の検索を開始するだけです。
これは非常に簡単に行われます:

ハンドラーコード
 #  start_command_handler = CommandHandler('start', startCommand) text_message_handler = MessageHandler(Filters.text, textMessage) #     dispatcher.add_handler(start_command_handler) dispatcher.add_handler(text_message_handler) #    updater.start_polling(clean=True) #  ,    Ctrl + C updater.idle() 


合計、完全なスクリプトベースは次のようになります。

完全なボットコード
 #  from telegram.ext import Updater, CommandHandler, MessageHandler, Filters updater = Updater(token=' API ') #  API  Telegram dispatcher = updater.dispatcher #   def startCommand(bot, update): bot.send_message(chat_id=update.message.chat_id, text=',  ?') def textMessage(bot, update): response = '  : ' + update.message.text bot.send_message(chat_id=update.message.chat_id, text=response) #  start_command_handler = CommandHandler('start', startCommand) text_message_handler = MessageHandler(Filters.text, textMessage) #     dispatcher.add_handler(start_command_handler) dispatcher.add_handler(text_message_handler) #    updater.start_polling(clean=True) #  ,    Ctrl + C updater.idle() 


これで、新しいボットのパフォーマンスを確認できます。 2行目にAPIトークンを挿入し、変更を保存し、コンソールに転送してボットを起動します。

 python bot.py 

開始後、私たちは彼に手紙を書きます。 すべてが正しく構成されている場合、次のように表示されます。

画像

ボットのベースが作成されました。次のステップに進んでください!
Psはボットをオフにすることを忘れないでください。コンソールに戻ってCtrl + Cを押し、数秒待ってください。ボットは正常に作業を完了します。

ステップ3. AIを構成する


まず、Dialogflowにアクセスして登録します(Googleアカウントを使用してログインするだけです)。 承認後すぐに、コントロールパネルにアクセスします。

画像

[ エージェント作成 ]ボタンをクリックして、自由裁量でフィールドに入力します(これは何の役割も果たしません。これは次のアクションにのみ必要です)。

画像

[ 作成]をクリックすると、次の図が表示されます

画像

先ほど作成したエージェントが何の役割も果たさないのかを説明します。 [インテント ]タブには、ボットが機能する「コマンド」があります。 現在、彼は「Hello」などのフレーズにのみ応答でき、理解できない場合は「私はあなたを理解できませんでした」と答えます。 あまり印象的ではありません。
空のエージェントを作成した後、他のタブがたくさんありました。 Prebuilt Agents (これらは多くのチームを持つ特別に訓練されたエージェント)をクリックし、リスト全体からSmall Talkを選択する必要があります。

画像

それをポイントし、 インポートをクリックします。 さらに、何も変更せずに[ OK ]をクリックします。 エージェントがインポートされ、構成できるようになりました。 これを行うには、左上隅にあるSmall-Talkの近くにある歯車をクリックして、設定ページに移動します。 これで、必要に応じてエージェントの名前を変更できます(そのままにします)。 タイムゾーンを変更し、[ 言語 ]タブでロシア語がインストールされていることを確認します(インストールされていない場合は設定します)。

画像
画像

[ 全般 ]タブに戻り、少し下に移動して、 クライアントアクセストークンをコピーします。

画像

これでAIは完全に構成され、ボットに戻ることができます。

ステップ4.すべてをまとめる


AIの準備が整い、ボットのベースの準備が整いました。次は何ですか? 次に、Python用のDialogflowからラッパーAPIをダウンロードする必要があります。

 pip install apiai 

インストール済みですか? ボットに戻ります。 apiaiおよびjsonモジュールのインポートをセクション「設定」に追加します(将来、dialogflowからjsonの回答を解析する必要があります)。 これは次のようになります。

更新された設定コード
 #  from telegram.ext import Updater, CommandHandler, MessageHandler, Filters import apiai, json updater = Updater(token=' API ') #  API  Telegram dispatcher = updater.dispatcher 


textMessage関数(テキストメッセージの受信を担当)に移動し、受信したメッセージをDialogflowサーバーに送信します。

Dialogflowメッセージ送信コード
 def textMessage(bot, update): request = apiai.ApiAI(' API ').text_request() #  API  Dialogflow request.lang = 'ru' #       request.session_id = 'BatlabAIBot' # ID   (,    ) request.query = update.message.text #         


このコードはDialogflowにリクエストを送信しますが、レスポンスも抽出する必要があります。 数行追加するので、 textMessageは次のようになります。

全文メッセージ機能コード
 def textMessage(bot, update): request = apiai.ApiAI(' API ').text_request() #  API  Dialogflow request.lang = 'ru' #       request.session_id = 'BatlabAIBot' # ID   (,    ) request.query = update.message.text #         responseJson = json.loads(request.getresponse().read().decode('utf-8')) response = responseJson['result']['fulfillment']['speech'] #  JSON    #      -  ,   -     if response: bot.send_message(chat_id=update.message.chat_id, text=response) else: bot.send_message(chat_id=update.message.chat_id, text='    !') 


少し説明。 を使用して

 request.getresponse().read() 

サーバーからの応答はバイト単位でエンコードされます。 デコードするには、メソッドを使用します

 decode('utf-8') 

その後、すべてを「ラップ」します

 json.loads() 

JSON応答を解析します。

回答がない場合(より正確には、jsonは常に到着しますが、アレイ自体に常にAI応答があるわけではありません)、これはSmall-Talkがユーザーを理解しなかったことを意味します(後でトレーニングを行うことができます)。 したがって、「答え」がない場合、ユーザーに「私はあなたをよく理解していません!」と書き込みます。
合計すると、完全なAIボットコードは次のようになります。

フルAIボットコード
 #  from telegram.ext import Updater, CommandHandler, MessageHandler, Filters import apiai, json updater = Updater(token=' API ') #  API  Telegram dispatcher = updater.dispatcher #   def startCommand(bot, update): bot.send_message(chat_id=update.message.chat_id, text=',  ?') def textMessage(bot, update): request = apiai.ApiAI(' API ').text_request() #  API  Dialogflow request.lang = 'ru' #       request.session_id = 'BatlabAIBot' # ID   (,    ) request.query = update.message.text #         responseJson = json.loads(request.getresponse().read().decode('utf-8')) response = responseJson['result']['fulfillment']['speech'] #  JSON    #      -  ,   -     if response: bot.send_message(chat_id=update.message.chat_id, text=response) else: bot.send_message(chat_id=update.message.chat_id, text='    !') #  start_command_handler = CommandHandler('start', startCommand) text_message_handler = MessageHandler(Filters.text, textMessage) #     dispatcher.add_handler(start_command_handler) dispatcher.add_handler(text_message_handler) #    updater.start_polling(clean=True) #  ,    Ctrl + C updater.idle() 


変更を保存し、ボットを起動して確認します:

画像

以上です! AIを使用した30行のボットが記述されています!

ステップ5.最終パート


AIを使用したボットの作成は10分で完了すると確信していると思います。 教えることと教えることは今だけです。 ちなみに、これは[ トレーニング ]タブで実行できます。 そこには、書き込まれたすべてのメッセージと、ボットがそれらに応答した(または応答しなかった)メッセージが表示されます。 そこで、彼は訓練を受けることができ、ボットに彼が正しく答えた場所とそうでない場所を伝えます。

画像

この記事がお役に立てば幸いです。学習の幸運を祈ります!

Source: https://habr.com/ru/post/J346606/


All Articles