Ich konnte das De-facto-Standard-Chatbot-Framework für Python nicht finden, also habe ich eines erstellt.
Minette for Python https://github.com/uezo/minette-python
Sie können es mit dem Befehl pip installieren, nur wenige Codezeilen schreiben und der Bot funktioniert ohne Datenbank- oder Anwendungsservereinstellungen.
Enthält Adapter für LINE und Clova. Sie können LINE BOT- und Clova-Fähigkeiten sofort entwickeln, indem Sie Initialisierungscode hinzufügen. Da der vom Benutzer implementierte Teil nicht von den unterschiedlichen Kanälen betroffen ist, kann die Entwicklung für beide nach demselben Verfahren erfolgen.
Sitzungen (Kontexte) können kommentarübergreifend verwendet werden, um kontextsensitive Dialogszenarien zu realisieren. Darüber hinaus werden Benutzerinformationen automatisch erfasst und gespeichert, ohne dass der Entwickler davon Kenntnis hat. Da es über einen Taskplaner zur Automatisierung der regulären Verarbeitung verfügt, kann es außerdem mit den Ressourcen der BOT-Anwendung abgeschlossen werden, ohne cron oder ähnliches festzulegen.
Wenn die Umgebung MeCab enthält, kann die Sprache des Benutzers automatisch morphologisch analysiert und das Ergebnis empfangen werden. Es unterstützt auch Pure Python Janome und Cloud-Dienste wie Google Cloud Platform, indem es selbst erweitert wird, sodass Sie mithilfe der Analyse natürlicher Sprache in jeder Umgebung einen erweiterten Dialog realisieren können. Ich werde.
Wir entwickeln und betreiben einen LINE BOT namens Ito BOT, der über mehr als 10 Arten von Fähigkeiten (Funktionen) verfügt. Das hier gepflegte Know-how spiegelt sich in der Architektur wider.
$ pip install minette
Dies ist mit einem Schuss in Ordnung. Die neueste Version in der Entwicklung kann wie folgt installiert werden.
$ pip install git+https://github.com/uezo/minette-python
Nachdem Sie den Chatbot selbst gestartet haben, werfen Sie die Rede des Benutzers und eine Antwort wird zurückgegeben.
echo.py
from minette import Minette, EchoDialogService
#Starten Sie Minette mit dem Umu-Return-Dialogteil (EchoDialogService).
bot = Minette(default_dialog_service=EchoDialogService)
#Dialog starten
while True:
req = input("user> ")
res = bot.chat(req)
for message in res.messages:
print("minette> " + message.text)
$ python echo.py
user>Hallo
minette> You said:Hallo
user>Funktioniert es?
minette> You said:Funktioniert es?
Sehr leicht.
Das nächste Mal werde ich als benutzerdefinierte Fertigkeit einen BOT erstellen, der zwei Würfel wirft, egal was passiert.
dice.py
import random
from minette import Minette, DialogService
#Benutzerdefinierte interaktive Teile
class DiceDialogService(DialogService):
#Verarbeiten Sie die Logik und speichern Sie die Ergebnisse im Kontext
def process_request(self, request, context, connection):
context.data = {
"dice1": random.randint(1, 6),
"dice2": random.randint(1, 6)
}
#Stellen Sie Antwortdaten mithilfe von Kontextinformationen zusammen
def compose_response(self, request, context, connection):
return "Dice1:{} / Dice2:{}".format(
str(context.data["dice1"]), str(context.data["dice2"]))
if __name__ == "__main__":
#Starten Sie BOT
bot = Minette(default_dialog_service=DiceDialogService)
#Dialog starten
while True:
req = input("user> ")
res = bot.chat(req)
for message in res.messages:
print("minette> " + message.text)
Ausführungsergebnis
$ python dice.py
user> test
minette> Dice1:3 / Dice2:5
user> d
minette> Dice1:4 / Dice2:3
Kurz gesagt, process_request
findet zwei Zufallszahlen von 1 bis 6 und speichert sie in context.data mit den Schlüsseln dice1
bzw. dice2
. compose_response
extrahiert diese Werte und erstellt eine Antwortanweisung.
Ich möchte die gesamte Verarbeitung dieses Levels in "compose_response" einfügen, aber durch die Trennung von Fähigkeit (Funktion) und Charakter (Persönlichkeit) ist es möglich, die Wartbarkeit auch in einem komplizierten Dialogszenario aufrechtzuerhalten. Wir empfehlen, dass Sie sie getrennt aufbewahren.
Durch Übergeben von "DiceDialogService" als Argument "default_dialog_service" im BOT-Generierungsprozess ("Minette") wird der Prozess bei der Ausführung von BOT an den diesmal implementierten Teil übergeben.
In der README-Datei auf Github finden Sie ein Codebeispiel für den übersetzten BOT. https://github.com/uezo/minette-python
Überprüfen Sie für die BOT-Entwicklung mit Minette das allgemeine Architekturdiagramm, um festzustellen, was der Entwickler speziell tun sollte.
Grundsätzlich besteht der Kern der Entwicklungsarbeit darin, die folgenden vier Methoden zu implementieren.
--register_intents ()
Legt den Dialogteil (DialogService) fest, der entsprechend der Sprechabsicht (Absicht) aufgerufen werden soll.
--extract_intent ()
Extrahiert Absichten und Entitäten aus dem Sprachinhalt
--process_request ()
Anwendungslogikverarbeitung
--compose_response ()
Stellen Sie die Antwortnachricht zusammen
Recommended Posts