Fügen Sie dem Slack Bot (erstellt von Python) mithilfe der Talk-API von Recruit eine Konversationsfunktion hinzu

Was ist in diesem Artikel zu tun?

Fügen Sie dem Slack Bot Konversationsfunktionen hinzu. Bot ist mit Python3-Serie gemacht Wenn Sie einen Bot normal machen, geben Sie nur ein bestimmtes Wort für ein bestimmtes Wort zurück, aber das ist irgendwie langweilig. Machen Sie es möglich, jedes Mal wie folgt zu sprechen, wenn Sie eine süße machen

スクリーンショット 2017-08-09 23.05.54.png

Wie man einen Bot macht

Im Folgenden erfahren Sie, wie Sie die API ausgeben und sich für Slack registrieren. Erstellen Sie einen Slack-Bot mit Pythons Slackbot-Bibliothek

Wenn Sie nach der Installation von pip slackbot mit der Prozedur fortfahren, finden Sie eine Gruppe von Dateien mit der folgenden Verzeichnisstruktur.

slackbot         #Ein Verzeichnis, das Programme organisiert. Jeder Name ist in Ordnung
├─ run.py        #Starten Sie den Bot, indem Sie dieses Programm ausführen
├─ slackbot_settings.py   #Datei zum Schreiben von Einstellungen für Bot
└─ plugins                #Fügen Sie diesem Verzeichnis Bot-Funktionen hinzu
   ├─ __init__.py         #Eine Datei zur Angabe des Moduls. Leer ist in Ordnung
   └─ my_mention.py       #Eine Datei, die jede Funktion des Bots hinzufügt. Bearbeiten Sie diese Datei dieses Mal

Löschen Sie zunächst den DEFAULT_REPLY-Teil der Datei slackbot_settings.py

[root@localhost slackbot]# more slackbot_settings.py
# coding: utf-8

#Geben Sie das Token für das Bot-Konto an
API_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

#Antwortzeichenfolge, wenn eine an diesen Bot adressierte Nachricht für keine Antwort gilt
#Liste der Unterverzeichnisnamen, in denen sich das Plug-In-Skript befindet
PLUGINS = ['plugins']

#Lösch das!
DEFAULT_REPLY = "Ich weiß nicht, wovon du sprichst"

Bearbeiten Sie als Nächstes my_mention.py

Ich denke, der Ausgangszustand ist wie folgt. Ich werde dies ändern

# coding: utf-8

from slackbot.bot import respond_to     # @botname:Decoder, der mit reagiert
from slackbot.bot import listen_to      #Decoder, der auf kanalinterne Bemerkungen reagiert
from slackbot.bot import default_reply  #Decoder, der reagiert, wenn keine entsprechende Antwort erfolgt

# @respond_to('string')Nachricht an den Bot
#Zeichenfolge kann ein regulärer Ausdruck sein "r'string'」
# @listen_to('string')Andere Beiträge als Bot im Kanal
#                           @botname:Beachten Sie, dass es nicht reagiert
#Reagieren Sie, wenn Sie anderen gegenüber erwähnen
#Kann normal ausgedrückt werden
# @default_reply()          DEFAULT_Gleiche Funktion wie ANTWORT
#Wenn Sie einen regulären Ausdruck angeben, werden andere Decoder nicht getroffen
#Reagieren Sie, wenn Sie einem regulären Ausdruck entsprechen
#... Aber ist es ein Fehler, wenn ich einen regulären Ausdruck angebe?

# message.reply('string')   @Name des Sprechers:Nachricht mit String senden
# message.send('string')Zeichenfolge senden
# message.react('icon_emoji')Reaktion auf die Nachricht des Sprechers(Stempel)Machen
#In der Zeichenfolge':'Ich brauche nicht
@respond_to('Erwähnen')
def mention_func(message):
    message.reply('Was machst du, wenn du mir Erwähnung sagst?') #Erwähnen

@listen_to('Hör mal zu')
def listen_func(message):
    message.send('Jemand scheint mit listen gepostet zu haben')      #Nur ein Beitrag
    message.reply('Du?')                           #Erwähnen

Implementierung der Konversationsfunktion

Für die Implementierung verwenden wir die von Recruit bereitgestellte Talk-API. Ich habe es anhand der folgenden Punkte verglichen, aber es scheint, dass die Genauigkeit der zurückgegebenen Nachricht kostenlos hoch ist. Zusammenfassung der Konversations-APIs, -Bibliotheken und -Dienste, die mit BOT verwendet werden können

Talk API

■Talk API Die Talk-API ist eine API zum Erstellen von Chatbot. Es bietet eine tägliche Konversationsantwortfunktion, indem ein Antwortsatz aus einem Eingabesatz unter Verwendung des Recurrent Neural Network (LSTM) generiert wird. Chatbot, der die Talk-API verwendet, automatisiert die Benutzerinteraktion in verschiedenen Anwendungen und kann jederzeit sofort auf Benutzeranfragen reagieren.

Registrieren Sie sich als Mitglied und erhalten Sie einen API-Schlüssel. Versuchen Sie nach der Registrierung, die API mit Curl wie unten gezeigt zu drücken, und Sie sollten eine Antwort erhalten

root@localhost slackbot]# curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=XXXXXXXXXXXXXXXXXXXX" -F "query=Guten Morgen"

{"status": 0, "message": "ok", "results": [{"perplexity": 0.07743213382788067, "reply": "\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059"}]}

Es ist sehr einfach zu implementieren. Es scheint, dass Python eine Bibliothek namens pya3rt bereitstellt. Verwenden wir sie also Holen Sie sich ** pip install pya3rt **.

Der Code selbst fügt my_mention.py nur den folgenden Teil hinzu

import pya3rt
@default_reply()
def send_message(message):
    apikey = "XXXXXXXXXXXXXXXXXXXXXXX"
    client = pya3rt.TalkClient(apikey)
    reply_message = client.talk(message.body['text'])
#Da json im folgenden Format zurückgegeben wird, nehmen Sie den Antwortteil heraus
# {'status': 0, 'message': 'ok', 'results': [{'perplexity': 1.2802554542585969, 'reply': 'ich bin mir nicht sicher'}]}
    message.reply(reply_message['results'][0]['reply'] + "Pome" )

@default_reply () ist ein Collator, der aufgerufen wird, wenn Sie eine Erwähnung eines Bots überspringen, und der keinem Wort in my_mention.py entspricht. Verwenden Sie pya3rt.TalkClient (apikey), um auf der von Recruit bereitgestellten Talk-API zu posten. Sie können die folgenden Inhalte standardmäßig mit json abrufen.

# {'status': 0, 'message': 'ok', 'results': [{'perplexity': 1.2802554542585969, 'reply': 'ich bin mir nicht sicher'}]}

Da der einzige oben erforderliche Teil der Wert der Antwort ist, scheint es, als würde man ihn mit ['results'] [0] ['reply'] herausnehmen und in der Antwortnachricht des Bots speichern.

Wenn Sie es mit Curl tun, können Sie es auch wie folgt mithilfe der Unterprozessmethode implementieren. Das Ergebnis von check_output wird jedoch nicht von json zurückgegeben, daher ist es erforderlich, eine Antwort mit split oder etwas anderem zu erhalten.

import subprocess
@default_reply()
def send_message(message):
    curl_cmd = 'curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=XXXXXXXXXXXXXXXXXXXXXX" -F "query=message.body['text']"'
    message = subprocess.check_output(curl_cmd, shell=True)

Wenn Sie nach der Implementierung einen Slack-Bot mit Python run.py starten, kann der Bot wie am Anfang sprechen

Recommended Posts

Fügen Sie dem Slack Bot (erstellt von Python) mithilfe der Talk-API von Recruit eine Konversationsfunktion hinzu
Fügen Sie eine Funktion hinzu, um dem Wetter heute mitzuteilen, dass der Bot locker ist (hergestellt von Python).
[Python] Sprechen mit OpenJTalk und Talk API (bis zur Sprachausgabe)
Bitten Sie den Bot, Ihnen das Wetter (Niederschlagsinformationen) mithilfe der Wetterinformations-API (YOLP) mitzuteilen, die von Yahoo ~ Slack Bot Development mit Python ④ ~ bereitgestellt wird
Einfacher Slack API-Client mit Python
Melden Sie sich mit Anforderungen in Python bei Slack an
Funktion zum Speichern von Bildern nach Datum [python3]
Entwicklung eines Slack Bot mit Python mit chat.postMessage
Vorgehensweise zur Verwendung der WEG-API von TeamGant (mit Python)
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
PUSH-Benachrichtigung von Python an Android mithilfe der Google-API
[Frage] Über die API-Konvertierung von Chat-Bot mit Python
[Python] Verwenden der Linien-API [1. Erstellung des Beauty-Bots]
Sprachdateierkennung durch Google Speech API v2 mit Python
So bedienen Sie die Discord API mit Python (Bot-Registrierung)
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
Fügen Sie Heatrapy eine Funktion hinzu, die Wärme + Wärme bei Temperatur übertragen kann
So geben Sie char * in einer Rückruffunktion mit ctypes in Python zurück
Ausgabe von Produktinformationen an csv mithilfe der Rakuten-Produktsuch-API [Python]
Ich habe Chatbot mit LINE Messaging API und Python erstellt