Dies ist eine RiveScript-Interpreterbibliothek, die für die Programmiersprache Java geschrieben wurde. RiveScript ist eine Skriptsprache für Chatterbots, die es einfach macht, Trigger-/Antwortpaare zum Aufbau der Intelligenz eines Bots zu schreiben.
RiveScript ist eine Skriptsprache zum Erstellen von Chatbots. Es hat eine sehr einfache Syntax und ist so konzipiert, dass es leicht zu lesen und schnell zu schreiben ist.
Ein einfaches Beispiel dafür, wie RiveScript aussieht:
+ hello bot - Hello human.
Dies entspricht der Nachricht eines Benutzers „Hallo Bot“ und würde mit „Hallo Mensch“ antworten. Oder für ein etwas komplizierteres Beispiel:
+ my name is * * <formal> == <bot name> => <set name=<formal>>Wow, we have the same name! * <get name> != undefined => <set name=<formal>>Did you change your name? - <set name=<formal>>Nice to meet you, <get name>!
Die offizielle Website für RiveScript ist https://www.rivescript.com/
Um RiveScript in Ihrem Webbrowser zu testen, probieren Sie den RiveScript Playground aus.
API-Dokumentation: http://www.javadoc.io/doc/com.rivescript/rivescript-core/
Arbeitsentwurf: http://www.rivescript.com/wd/RiveScript
Schauen Sie sich auch das RiveScript-Community-Wiki an, um gängige Designmuster sowie Tipps und Tricks für RiveScript zu finden.
Fügen Sie Ihrem Projekt die rivescript-core
Abhängigkeit hinzu:
Maven :
<Abhängigkeit> <groupId>com.rivescript</groupId> <artifactId>rivescript-core</artifactId> <version>0.10.0</version> </Abhängigkeit>
Gradle :
Abhängigkeiten { kompiliere „com.rivescript:rivescript-core:0.10.0“}
Wenn Sie RiveScript in einer Spring Boot-Anwendung verwenden möchten, lesen Sie den Abschnitt Spring Boot Starter.
Bei Verwendung als Bibliothek zum Schreiben Ihres eigenen Chatbots sieht die Zusammenfassung wie folgt aus:
import com.rivescript.Config;import com.rivescript.RiveScript;// Erstellen Sie einen neuen Bot mit den Standardeinstellungen.RiveScript bot = new RiveScript();// Um den UTF-8-Modus zu aktivieren, hätten Sie den Bot initialisiert :RiveScript bot = new RiveScript(Config.utf8());// Laden Sie ein Verzeichnis voller RiveScript-Dokumente (.rive-Dateien)bot.loadDirectory("./replies");// Laden Sie eine Person file.bot.LoadFile("./testsuite.rive");// Sortieren Sie die Antworten nach dem Laden!bot.sortReplies();// Erhalten Sie eine Antwort.String Reply = bot.reply("user", "Hallo Bot !");
Die rivescript-core
-Distribution enthält außerdem eine interaktive Shell zum Testen Ihres RiveScript-Bots. Führen Sie es mit dem Pfad zu einem Ordner auf der Festplatte aus, der Ihre RiveScript-Dokumente enthält. Beispiel:
java com.rivescript.cmd.Shell [options] </path/to/documents>
Der com.rivescript.RiveScript
Konstruktor benötigt eine optionale Config
Instanz. Hier ist ein vollständiges Beispiel mit allen unterstützten Optionen. Sie müssen nur Werte für Konfigurationsoptionen angeben, die von den Standardwerten abweichen.
RiveScript bot = neues RiveScript(Config.newBuilder() .throwExceptions(false) // Ob das Auslösen von Ausnahmen aktiviert ist.strict(true) // Ob die strikte Syntaxprüfung aktiviert ist.utf8(false) // Ob der UTF-8-Modus aktiviert ist.unicodePunctuation("[.,!?;: ]") // Das Unicode-Interpunktionsmuster.forceCase(false) // Ob das Erzwingen von Kleinbuchstaben für Trigger aktiviert ist.concat(ConcatMode.NONE) // Das concat mode. Depth(50) // Das Rekursionstiefenlimit .sessionManager(sessionManager) // Der Sitzungsmanager für Benutzervariablen.errorMessages(errors) // Karte benutzerdefinierter Fehlermeldungen.build());
Der Einfachheit halber können Sie Verknüpfungen verwenden:
// Der Standardkonstruktor verwendet eine Grundkonfiguration.RiveScript bot = new RiveScript();// Dies ähnelt:RiveScript bot = new RiveScript(Config.basic());// Um die Grundkonfiguration mit UTF-8-Modus zu verwenden aktivierte Verwendung: RiveScript bot = new RiveScript(Config.utf8());
Die UTF-8-Unterstützung in RiveScript gilt als experimentelle Funktion. Es ist standardmäßig deaktiviert.
Standardmäßig (ohne aktivierten UTF-8-Modus) dürfen Trigger nur einfache ASCII-Zeichen (keine Fremdzeichen) enthalten und die Nachricht des Benutzers enthält alle Zeichen außer Buchstaben, Zahlen und Leerzeichen. Das bedeutet, dass Sie beispielsweise die E-Mail-Adresse eines Benutzers aufgrund der @ und nicht in einer RiveScript-Antwort erfassen können. Charaktere.
Wenn der UTF-8-Modus aktiviert ist, werden diese Einschränkungen aufgehoben. Trigger dürfen nur bestimmte Metazeichen wie den Backslash nicht enthalten, und die Nachricht des Benutzers wird nur von Backslashes und spitzen HTML-Klammern befreit (zum Schutz vor offensichtlichem XSS, wenn Sie RiveScript in einer Webanwendung verwenden). Darüber hinaus werden gängige Satzzeichen entfernt, wobei der Standardsatz [.,!?;:]
ist. Dies kann überschrieben werden, indem der Config.Builder#unicodePunctuation()
Methode eine neue reguläre Ausdruckszeichenfolge bereitgestellt wird. Beispiel:
// Erstellen Sie einen neuen Bot mit aktiviertem UTF-8-Modus und überschreiben Sie die Satzzeichen, die aus der Nachricht des Benutzers entfernt werden.RiveScript bot = new RiveScript(Config.Builder.utf8() .unicodePunctuation("[.,!?;:]") .bauen());
Die <star>
-Tags in RiveScript erfassen die „rohen“ Eingaben des Benutzers, sodass Sie Antworten schreiben können, um die E-Mail-Adresse des Benutzers zu erhalten oder fremde Zeichen in seinem Namen zu speichern.
Fügen Sie die Abhängigkeit rivescript-spring-boot-starter
zu Ihrem Projekt hinzu:
Maven :
<Abhängigkeit> <groupId>com.rivescript</groupId> <artifactId>rivescript-spring-boot-starter</artifactId> <version>0.10.0</version> </Abhängigkeit>
Gradle :
Abhängigkeiten { kompilieren Sie „com.rivescript:rivescript-spring-boot-starter:0.10.0“}
Der Starter fügt Ihrem Projekt automatisch die rivescript-core
Abhängigkeit hinzu und löst die automatische Konfiguration aus, um die RiveScript
Bot-Instanz zu erstellen.
Obwohl die automatische Konfiguration sinnvolle Standardeinstellungen zum Erstellen der Bot-Instanz verwendet, können die folgenden Eigenschaften in Ihrer Datei application.properties
/ application.yml
(oder als Befehlszeilenschalter) angegeben werden, um das Verhalten der automatischen Konfiguration anzupassen:
Rivescript: aktiviert: true # RiveScript für die Anwendung aktivieren. Quellpfad: Klassenpfad:/rivescript/ # Die durch Kommas getrennte Liste der RiveScript-Quelldateien und/oder -Verzeichnisse. Dateierweiterungen: .rive, .rs # Die durch Kommas getrennte Liste der zu ladenden RiveScript-Dateierweiterungen. throw-Exceptions: false # Throw-Ausnahmen aktivieren. strict: true # Strenge Syntaxprüfung aktivieren. utf8: false # UTF-8-Modus aktivieren. unicode-punctuation: [.,!?;:] # Das Unicode-Interpunktionsmuster (wird nur verwendet, wenn der UTF-8-Modus aktiviert ist). force-case: false # Erzwingen der Kleinschreibung von Triggern aktivieren. concat: none # Der Concat-Modus (none|newline|space). Tiefe: 50 # Das Rekursionstiefenlimit. error-messages: # Die benutzerdefinierte Fehlermeldung überschreibt. Zum Beispiel „rivescript.error-messages.deepRecursion=Custom Deep Recursion Detected Message“. Objekthandler: # Die durch Kommas getrennte Liste der zu registrierenden Objekthandlernamen (derzeit unterstützt: „groovy“, „javascript“, „ruby“).
Um benutzerdefinierte Java-Subroutinen und/oder nicht standardmäßig unterstützte Objekthandler automatisch in der erstellten RiveScript
Bot-Instanz zu registrieren, definieren Sie entsprechende Beans in Ihrem Anwendungskontext wie:
@Beanpublic Map<String, Subroutine> subroutines() {// Der Schlüssel ist der Name des zu registrierenden Java-Objektmakros.Map<String, Subroutine> subroutines = new HashMap<>();subroutines.put("subroutine1", new Subroutine1());subroutines.put("subroutine2", new Subroutine2());return subroutines; }@Beanpublic Map<String, ObjectHandler> objectHandlers() {// Der Schlüssel ist der Name der zu registrierenden Programmiersprache.Map<String, ObjectHandler> objectHandlers = new HashMap<>();objectHandlers.put("handler1", new ObjectHandler1());objectHandlers.put("handler2", new ObjectHandler2());return objectHandlers; }
Um alle JARs und Dokumente zu kompilieren, zu testen und zu erstellen, führen Sie Folgendes aus:
./gradlew build
Um alle JAR-Dateien in Ihrem lokalen Maven-Cache zu installieren, führen Sie Folgendes aus:
./gradlew install
Der Ordner /samples
enthält verschiedene Beispiele von Java RiveScript-Bot-Implementierungen.
rsbot
– RSBot.java
ist eine einfache Implementierung unter Verwendung von com.rivescript.cmd.Shell
.
Diese Befehle können an Ihrer Eingabeaufforderung in RSBot verwendet werden:
/quit - Quit the program /dump topics - Dump the internal topic/trigger/reply struct (debugging) /dump sorted - Dump the internal trigger sort buffers (debugging) /last - Print the last trigger you matched.
Um RSBot
auszuführen, um mit der Eliza-basierten Demo zu chatten, führen Sie Folgendes aus:
./gradlew :rivescript-samples-rsbot:runBot --console plain
spring-boot-starter-rsbot
– In diesem Beispiel wird der RiveScript Spring Boot Starter verwendet, um die RiveScript
-Bot-Instanz automatisch zu konfigurieren.
Um mit dem Demo-Bot zu chatten, führen Sie Folgendes aus:
./gradlew :rivescript-samples-spring-boot-starter-rsbot:bootRun --console plain
Noah Petherbridge, https://www.kirsle.net/
Marcel Overdijk, https://twitter.com/marceloverdijk
The MIT License (MIT) Copyright (c) 2016 the original author or authors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.