이것은 Java 프로그래밍 언어용으로 작성된 RiveScript 인터프리터 라이브러리입니다. RiveScript는 Chatterbot용 스크립팅 언어로, 봇의 지능을 구축하기 위한 트리거/응답 쌍을 쉽게 작성할 수 있습니다.
RiveScript는 챗봇 작성을 위한 스크립팅 언어입니다. 매우 간단한 구문을 가지며 읽기 쉽고 빠르게 작성할 수 있도록 설계되었습니다.
RiveScript의 간단한 예는 다음과 같습니다.
+ hello bot - Hello human.
이는 사용자의 "hello bot" 메시지와 일치하며 "Hello human"이라고 응답합니다. 또는 약간 더 복잡한 예를 들면 다음과 같습니다.
+ 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>!
RiveScript의 공식 웹사이트는 https://www.rivescript.com/입니다.
웹 브라우저에서 RiveScript를 테스트하려면 RiveScript Playground를 사용해 보세요.
API 문서: http://www.javadoc.io/doc/com.rivescript/rivescript-core/
작업 초안: http://www.rivescript.com/wd/RiveScript
또한 RiveScript에 대한 일반적인 디자인 패턴과 팁과 요령을 보려면 RiveScript 커뮤니티 Wiki 를 확인하세요.
프로젝트에 rivescript-core
종속성을 추가합니다.
메이븐 :
<의존성> <groupId>com.rivescript</groupId> <artifactId>rivescript-core</artifactId> <버전>0.10.0</버전> </의존성>
그래들 :
의존성 { "com.rivescript:rivescript-core:0.10.0"} 컴파일
Spring Boot 애플리케이션에서 RiveScript를 사용하려면 Spring Boot Starter 섹션을 참조하세요.
자신만의 챗봇을 작성하기 위한 라이브러리로 사용하는 경우 개요는 다음과 같습니다.
import com.rivescript.Config;import com.rivescript.RiveScript;// 기본 설정으로 새 봇을 만듭니다.RiveScript bot = new RiveScript();// UTF-8 모드를 활성화하려면 다음과 같이 봇을 초기화해야 합니다. :RiveScript bot = new RiveScript(Config.utf8());// RiveScript 문서로 가득 찬 디렉터리 로드(.rive files)bot.loadDirectory("./replies");// 개별 파일을 로드합니다.bot.LoadFile("./testsuite.rive");// 로드한 후 응답을 정렬합니다!bot.sortReplies();// 답장 받기.String reply = bot.reply("user", "Hello bot!");
rivescript-core
배포판에는 RiveScript 봇을 테스트하기 위한 대화형 셸도 포함되어 있습니다. RiveScript 문서가 포함된 디스크의 폴더 경로를 사용하여 실행하세요. 예:
java com.rivescript.cmd.Shell [options] </path/to/documents>
com.rivescript.RiveScript
생성자는 선택적 Config
인스턴스를 사용합니다. 다음은 지원되는 모든 옵션이 포함된 전체 예입니다. 기본값과 다른 구성 옵션에 대한 값만 제공하면 됩니다.
RiveScript 봇 = 새로운 RiveScript(Config.newBuilder() .throwExceptions(false) // 예외 던지기 활성화 여부.strict(true) // 엄격한 구문 검사 활성화 여부.utf8(false) // UTF-8 모드 활성화 여부.unicodePunctuation("[.,!?;: ]") // 유니코드 구두점 패턴.forceCase(false) // 트리거를 소문자로 강제 적용할지 여부.concat(ConcatMode.NONE) // 연결 모드.깊이(50) // 재귀 깊이 제한 .sessionManager(sessionManager) // 사용자 변수에 대한 세션 관리자.errorMessages(errors) // 사용자 정의 오류 메시지 맵.build());
편의를 위해 다음과 같은 단축키를 사용할 수 있습니다.
// 기본 생성자는 기본 구성을 사용합니다.RiveScript bot = new RiveScript();// 이는 다음과 유사합니다:RiveScript bot = new RiveScript(Config.basic());// UTF-8 모드로 기본 구성을 사용하려면 활성화된 사용: RiveScript bot = new RiveScript(Config.utf8());
RiveScript의 UTF-8 지원은 실험적인 기능으로 간주됩니다. 기본적으로 비활성화되어 있습니다.
기본적으로(UTF-8 모드가 설정되지 않은 경우) 트리거에는 기본 ASCII 문자만 포함될 수 있으며(외부 문자는 포함되지 않음) 사용자 메시지에서 문자, 숫자 및 공백을 제외한 모든 문자가 제거됩니다. 이는 예를 들어 @ 및 로 인해 RiveScript 응답에서 사용자의 이메일 주소를 캡처할 수 없음을 의미합니다. 문자.
UTF-8 모드가 활성화되면 이러한 제한이 해제됩니다. 트리거는 백슬래시와 같은 특정 메타 문자를 포함하지 않도록 제한되며 사용자 메시지는 백슬래시와 HTML 꺾쇠 괄호만 제거합니다(웹 애플리케이션에서 RiveScript를 사용하는 경우 명백한 XSS로부터 보호하기 위해). 또한 일반적인 구두점 문자는 제거되며 기본 설정은 [.,!?;:]
입니다. 이는 Config.Builder#unicodePunctuation()
메서드에 새 정규식 문자열을 제공하여 재정의할 수 있습니다. 예:
// UTF-8 모드가 활성화된 새 봇을 만들고 사용자의 메시지에서 제거되는 구두점 문자를 재정의합니다.RiveScript bot = new RiveScript(Config.Builder.utf8() .unicodePunctuation("[.,!?;:]") .짓다());
RiveScript의 <star>
태그는 사용자의 "원시" 입력을 캡처하므로 응답을 작성하여 사용자의 이메일 주소를 얻거나 이름에 외국 문자를 저장할 수 있습니다.
프로젝트에 rivescript-spring-boot-starter
종속성을 추가합니다.
메이븐 :
<의존성> <groupId>com.rivescript</groupId> <artifactId>rivescript-spring-boot-starter</artifactId> <버전>0.10.0</버전> </의존성>
그래들 :
의존성 { "com.rivescript:rivescript-spring-boot-starter:0.10.0"} 컴파일
스타터는 프로젝트에 rivescript-core
종속성을 자동으로 추가하고 자동 구성을 트리거하여 RiveScript
봇 인스턴스를 생성합니다.
자동 구성은 적절한 기본값을 사용하여 봇 인스턴스를 생성하지만, 다음 속성을 application.properties
/ application.yml
파일 내에서 지정하거나 명령줄 스위치로 지정하여 자동 구성 동작을 사용자 지정할 수 있습니다.
스크립트: 활성화: true # 응용 프로그램에 대해 RiveScript를 활성화합니다. source-path: classpath:/rivescript/ # RiveScript 소스 파일 및/또는 디렉터리의 쉼표로 구분된 목록입니다. file-extensions: .rive, .rs # 로드할 RiveScript 파일 확장자의 쉼표로 구분된 목록입니다. throw-Exceptions: false # 예외 발생을 활성화합니다. strict: true # 엄격한 구문 검사를 활성화합니다. utf8: false # UTF-8 모드를 활성화합니다. unicode-Punction: [.,!?;:] # 유니코드 구두점 패턴(UTF-8 모드가 활성화된 경우에만 사용됨). force-case: false # 트리거를 소문자로 강제하는 것을 활성화합니다. concat: none # 연결 모드(none|newline|space). 깊이: 50 # 재귀 깊이 제한. error-messages: # 사용자 정의 오류 메시지가 무시됩니다. 예를 들어 `rivescript.error-messages.deepRecursion=사용자 정의 심층 재귀 감지 메시지` object-handlers: # 등록할 객체 핸들러 이름을 쉼표로 구분한 목록입니다(현재 지원됨: `groovy`, `javascript`, `ruby`).
생성된 RiveScript
봇 인스턴스에 사용자 정의 Java 서브루틴 및/또는 기본이 아닌 지원 객체 핸들러를 자동으로 등록하려면 다음과 같이 애플리케이션 컨텍스트에서 적절한 Bean을 정의하십시오.
@Beanpublic Map<String, Subroutine> subroutines() {// 키는 등록할 Java 객체 매크로의 이름입니다.Map<String, Subroutine> subroutines = new HashMap<>();subroutines.put("subroutine1", new Subroutine1());subroutines.put("subroutine2", new Subroutine2());return 서브루틴; }@Beanpublic Map<String, ObjectHandler> objectHandlers() {// 키는 등록할 프로그래밍 언어의 이름입니다.Map<String, ObjectHandler> objectHandlers = new HashMap<>();objectHandlers.put("handler1", new ObjectHandler1());objectHandlers.put("handler2", new ObjectHandler2());return objectHandlers; }
모든 jar 및 문서를 컴파일, 테스트, 빌드하려면 다음을 실행하십시오.
./gradlew build
모든 jar를 로컬 Maven 캐시에 설치하려면 다음을 실행하세요.
./gradlew install
/samples
폴더에는 Java RiveScript 봇 구현의 다양한 샘플이 포함되어 있습니다.
rsbot
- RSBot.java
는 com.rivescript.cmd.Shell
을 사용하는 간단한 구현입니다.
RSBot의 입력 프롬프트에서 다음 명령을 사용할 수 있습니다.
/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.
RSBot
실행하여 데모 Eliza 기반 실행으로 채팅을 시작하려면:
./gradlew :rivescript-samples-rsbot:runBot --console plain
spring-boot-starter-rsbot
- 이 예제에서는 RiveScript Spring Boot Starter를 사용하여 RiveScript
봇 인스턴스를 자동 구성합니다.
데모 봇과 채팅을 시작하려면 다음을 실행하세요.
./gradlew :rivescript-samples-spring-boot-starter-rsbot:bootRun --console plain
노아 페더브리지, https://www.kirsle.net/
마르셀 오버다이크, 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.