今日、思いついたのは、「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つのパラメーターbotとupdateがそこに渡されます。 ボットには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分で完了すると確信していると思います。 教えることと教えることは今だけです。 ちなみに、これは[ トレーニング ]タブで実行できます。 そこには、書き込まれたすべてのメッセージと、ボットがそれらに応答した(または応答しなかった)メッセージが表示されます。 そこで、彼は訓練を受けることができ、ボットに彼が正しく答えた場所とそうでない場所を伝えます。
この記事がお役に立てば幸いです。学習の幸運を祈ります!