Je n'ai pas pu trouver le framework de chatbot standard de facto pour Python, alors j'en ai créé un.
Minette for Python https://github.com/uezo/minette-python
Vous pouvez l'installer avec la commande pip, écrire juste quelques lignes de code et le bot de retour fonctionnera sans aucun paramètre de base de données ou de serveur d'applications.
Comprend des adaptateurs pour LINE et Clova. Vous pouvez développer immédiatement les compétences LINE BOT et Clova en ajoutant un code d'initialisation. De plus, la partie implémentée par l'utilisateur n'est pas affectée par la différence de canaux, de sorte que le développement peut se dérouler dans la même procédure pour les deux.
Les sessions (contextes) peuvent être utilisées à travers des remarques pour réaliser des scénarios de dialogue contextuels. De plus, les informations utilisateur sont automatiquement acquises et enregistrées sans que le développeur en soit conscient. De plus, comme il dispose d'un planificateur de tâches pour automatiser le traitement régulier, il peut être complété avec les ressources de l'application BOT sans paramétrer cron ou autre.
Si l'environnement comprend MeCab, la parole de l'utilisateur peut être automatiquement analysée morphologiquement et le résultat peut être reçu. Il prend également en charge Pure Python Janome, et il peut également prendre en charge des services cloud tels que Google Cloud Platform en l'étendant par lui-même, afin que vous puissiez réaliser un dialogue avancé à l'aide de l'analyse du langage naturel dans n'importe quel environnement. Je vais.
Nous développons et exploitons LINE BOT avec plus de 10 types de compétences (fonctions) appelées Ito BOT, et le savoir-faire cultivé ici se reflète dans l'architecture.
$ pip install minette
C'est OK avec un seul coup. La dernière version en cours de développement peut être installée à partir de ce qui suit.
$ pip install git+https://github.com/uezo/minette-python
Après avoir démarré le chatbot lui-même, lancez le discours de l'utilisateur et une réponse sera renvoyée.
echo.py
from minette import Minette, EchoDialogService
#Démarrez Minette à l'aide de la partie dialogue Umu-return (EchoDialogService)
bot = Minette(default_dialog_service=EchoDialogService)
#Démarrer le dialogue
while True:
req = input("user> ")
res = bot.chat(req)
for message in res.messages:
print("minette> " + message.text)
$ python echo.py
user>Bonjour
minette> You said:Bonjour
user>Est-ce que ça marche?
minette> You said:Est-ce que ça marche?
Très facile.
La prochaine fois, en tant que compétence personnalisée, je créerai un BOT qui lancera deux dés quoi qu'il arrive.
dice.py
import random
from minette import Minette, DialogService
#Pièces interactives personnalisées
class DiceDialogService(DialogService):
#Processus logique et stockage des résultats dans leur contexte
def process_request(self, request, context, connection):
context.data = {
"dice1": random.randint(1, 6),
"dice2": random.randint(1, 6)
}
#Assembler les données de réponse à l'aide d'informations contextuelles
def compose_response(self, request, context, connection):
return "Dice1:{} / Dice2:{}".format(
str(context.data["dice1"]), str(context.data["dice2"]))
if __name__ == "__main__":
#Démarrer BOT
bot = Minette(default_dialog_service=DiceDialogService)
#Démarrer le dialogue
while True:
req = input("user> ")
res = bot.chat(req)
for message in res.messages:
print("minette> " + message.text)
Résultat d'exécution
$ python dice.py
user> test
minette> Dice1:3 / Dice2:5
user> d
minette> Dice1:4 / Dice2:3
En bref, «process_request» trouve deux nombres aléatoires de 1 à 6 et les stocke dans des données contextuelles avec les clés «dice1» et «dice2», respectivement. compose_response
extrait ces valeurs et crée une instruction de réponse.
Je voudrais mettre tout le traitement de ce niveau dans compose_response
, mais en séparant la compétence (fonction) et le personnage (personnalité), il est possible de maintenir la maintenabilité même dans un scénario de dialogue compliqué. Nous vous recommandons de les garder séparés.
De plus, en passant DiceDialogService
comme argument default_dialog_service
dans le processus de génération BOT ( Minette
), lorsque BOT est exécuté, le processus sera passé à la partie implémentée cette fois.
Veuillez consulter le README sur Github pour un exemple de code du BOT traduit. https://github.com/uezo/minette-python
Pour le développement BOT à l'aide de Minette, vérifions le diagramme d'architecture global pour voir ce que le développeur doit faire spécifiquement.
Fondamentalement, le cœur du travail de développement consiste à mettre en œuvre les quatre méthodes suivantes.
--register_intents ()
Définit la partie dialogue (DialogService) à appeler en fonction de l'intention de parler (intention)
--ʻExtract_intent () ʻExtraire les intentions et les entités du contenu vocal
--process_request ()
Traitement logique de l'application
--` compose_response () ʻAssemble le message de réponse
Recommended Posts