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



画像



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



All Articles