이것은 JavaScript용 RiveScript 인터프리터 라이브러리입니다. RiveScript는 Chatterbot용 스크립팅 언어로, 봇의 지능을 구축하기 위한 트리거/응답 쌍을 쉽게 작성할 수 있습니다.
이 라이브러리는 웹 브라우저 또는 노드 모듈로 사용할 수 있습니다. 예제는 eg/
폴더를 참조하세요.
RiveScript v2.0.0에는 최신 Async/Await 기능을 전체적으로 구현하기 위한 대규모 코드베이스 리팩터링이 포함되어 있습니다. 이제 리팩터링을 통해 "Redis에 직접 사용자 변수 저장" 또는 "조건부에서 비동기 매크로 사용"과 같은 기능을 사용할 수 있습니다.
하지만 필연적으로 일부 이전 버전과의 호환성이 깨져야 했습니다. -- 약간! -- 이전에 reply()
와 같은 동기 함수를 replyAsync()
와 같은 Promise를 반환하는 비동기 함수로 전환합니다.
변경 사항 및 새 버전에 대한 코드 수정 방법에 대한 자세한 내용은 Upgrading-v2 문서를 참조하세요.
nodejs 및 기타 유사한 JavaScript 엔진의 경우 npm을 통해 프로젝트에 이 모듈을 설치할 수 있습니다.
$ npm install rivescript
웹의 경우 unpkg를 사용할 수 있습니다.
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > script >
이 프로젝트의 git 저장소에는 ES2015+ 소스 코드가 포함되어 있습니다. 이전 브라우저 및 Node 버전을 대상으로 하는 ES5 빌드의 경우 릴리스 탭을 확인하세요. 컴파일된 배포판에는 노드 <= 6과 함께 사용할 ES5 소스가 있는 lib/
디렉터리와 웹 페이지에서 사용할 수 있는 "브라우저화된" 스크립트가 포함된 dist/
디렉터리가 포함되어 있습니다.
웹에서 사용하려면 평소처럼 태그를 사용하여
dist/rivescript.min.js
로드하면 됩니다.
var bot = new RiveScript ( ) ;
// Load a directory full of RiveScript documents (.rive files). This is for
// Node.JS only: it doesn't work on the web!
bot . loadDirectory ( "brain" ) . then ( loading_done ) . catch ( loading_error ) ;
// Load an individual file.
bot . loadFile ( "brain/testsuite.rive" ) . then ( loading_done ) . catch ( loading_error ) ;
// Load a list of files all at once (the best alternative to loadDirectory
// for the web!)
bot . loadFile ( [
"brain/begin.rive" ,
"brain/admin.rive" ,
"brain/clients.rive"
] ) . then ( loading_done ) . catch ( loading_error ) ;
// All file loading operations are asynchronous, so you need handlers
// to catch when they've finished. If you use loadDirectory (or loadFile
// with multiple file names), the success function is called only when ALL
// the files have finished loading.
function loading_done ( ) {
console . log ( "Bot has finished loading!" ) ;
// Now the replies must be sorted!
bot . sortReplies ( ) ;
// And now we're free to get a reply from the brain!
// RiveScript remembers user data by their username and can tell
// multiple users apart.
let username = "local-user" ;
// NOTE: the API has changed in v2.0.0 and returns a Promise now.
bot . reply ( username , "Hello, bot!" ) . then ( function ( reply ) {
console . log ( "The bot says: " + reply ) ;
} ) ;
}
// It's good to catch errors too!
function loading_error ( error , filename , lineno ) {
console . log ( "Error when loading files: " + error ) ;
}
RiveScript.js 배포에는 RiveScript 봇을 테스트하기 위한 riveshell 이라는 대화형 명령줄 셸이 포함되어 있습니다. RiveScript 문서( .rive 파일)가 포함된 폴더인 "brain"에 대한 경로(상대 또는 절대)를 인수로 사용합니다.
npm install rivescript
사용) 프로젝트 폴더에 있는 동안 npx를 사용하여 셸을 시작할 수 있습니다. 예: $ npx riveshell /path/to/brain
npm install -g rivescript
사용) 어디서든 셸을 시작할 수 있습니다. 예: $ riveshell /path/to/brain
shell.js
에서 직접 셸을 시작할 수 있습니다. eg/ 폴더에 있는 기본 두뇌를 사용하는 예: $ node shell.js /eg/brain
셸 내부에서는 해당 디렉터리에 있는 RiveScript 파일을 사용하여 봇과 채팅할 수 있습니다. 간단한 디버깅을 위해 /eval
입력하여 JavaScript 코드 한 줄을 실행할 수 있습니다. 자세한 내용은 /help
참조하세요.
셸은 몇 가지 명령줄 매개변수를 허용합니다.
--debug
: 자세한 디버그 로깅을 활성화합니다.--watch
: 응답 폴더에서 변경 사항을 확인하고 파일이 수정되면 자동으로 봇을 다시 로드합니다.--utf8
: UTF-8 모드를 활성화합니다.--case
: 대소문자를 구분하는 사용자 메시지를 활성화합니다. docs 폴더에는 모듈에 대한 Markdown 및 HTML 문서가 생성되어 있습니다. 기본 모듈은 livescript에 있습니다.
또한 RiveScript에 대한 일반적인 디자인 패턴과 팁과 요령을 보려면 RiveScript 커뮤니티 Wiki 를 확인하세요.
GitHub에 있는 이 프로젝트의 eg/ 디렉터리에는 웹 브라우저나 텔넷 서버 등 다양한 방법으로 RiveScript 봇과 인터페이스하는 방법과 기타 코드 조각 및 유용한 트릭을 보여주는 예제가 있습니다.
JavaScript 구현을 사용하는 RiveScript 스니펫을 테스트하고 공유하려면 RiveScript Playground를 확인하세요.
웹 브라우저에서 RiveScript를 사용하고 다른 사람들과 코드를 공유하기 위한 JSFiddle 스타일 웹 앱입니다.
https://play.rivescript.com/
버전 1.0.5에는 RiveScript 문서에 UTF-8에 대한 실험적 지원이 추가되었습니다. 기본적으로 비활성화되어 있습니다. 생성자에서 utf8
옵션에 true
을 전달하여 활성화합니다.
기본적으로(UTF-8 모드가 설정되지 않은 경우) 트리거에는 기본 ASCII 문자만 포함될 수 있으며(외부 문자는 포함되지 않음) 사용자 메시지에서 문자, 숫자 및 공백을 제외한 모든 문자가 제거됩니다. 이는 예를 들어 @ 및 로 인해 RiveScript 응답에서 사용자의 이메일 주소를 캡처할 수 없음을 의미합니다. 문자.
UTF-8 모드가 활성화되면 이러한 제한이 해제됩니다. 트리거는 백슬래시와 같은 특정 메타 문자를 포함하지 않도록 제한되며 사용자 메시지는 백슬래시와 HTML 꺾쇠 괄호만 제거합니다(웹 애플리케이션에서 RiveScript를 사용하는 경우 명백한 XSS로부터 보호하기 위해). 또한 일반적인 구두점 문자는 제거되며 기본 설정은 /[.,!?;:]/g
입니다. 이는 새로운 RegExp
객체를 rs.unicodePunctuation
속성으로 제공하여 무시할 수 있습니다. 예:
// Make a new bot with UTF-8 mode enabled.
var bot = new RiveScript ( { utf8 : true } ) ;
// Override the punctuation characters that get stripped from the
// user's message.
bot . unicodePunctuation = new RegExp ( / [.,!?;:] / g ) ;
RiveScript의
태그는 사용자의 "원시" 입력을 캡처하므로 응답을 작성하여 사용자의 이메일 주소를 얻거나 이름에 외국 문자를 저장할 수 있습니다.
이것은 지금까지 Node.js에서 실행될 때만 테스트되었습니다. 웹 서버를 통해 제공되는 경우 서버가 RiveScript 소스 파일( Content-Type: text/plain; charset=utf-8
)과 함께 올바른 콘텐츠 인코딩을 보내는지 각별히 주의하세요.
UTF-8 모드에서 주의해야 할 한 가지 주의 사항은 구두점 문자가 사용자의 메시지에서 제거되지 않는다는 것입니다. 따라서 여기에 쉼표나 느낌표가 포함되어 있으면 트리거의 일치 기능에 영향을 미칠 수 있습니다( 절대 명시적인 구두점을 작성해서는 안 됩니다 ) 트리거 측에서는 UTF-8 모드가 활성화된 경우에도 트리거에 ?
,
와 같은 기호가 포함되어서는 안 되며, 현재로서는 작동할 수 있지만 향후 업데이트에서는 이를 엄격하게 적용할 것입니다.
저는 npm 실행 스크립트를 사용하여 다양한 빌드 작업을 처리합니다.
npm run build
- src/
에서 Babel을 사용하여 ES2015+ 소스를 컴파일하고 lib/
로 출력합니다.npm run test
- 위의 Babel을 사용하여 소스를 빌드하고, test/
에 ES2015+ 테스트 스크립트를 빌드하고, 이를 test.babel/
에 출력한 후 nodeunit
실행합니다.npm run dist
- 전체 배포 가능한 빌드를 생성합니다. 소스는 Babel로 빌드된 다음 webpack으로 전달되고 브라우저 빌드를 위해 uglify됩니다.npm run webpack
- src/
에서 직접 ES2015+ 소스의 dist/rivescript.js
생성합니다( babel-loader
사용). 이 명령은 npm run build
와 독립적이며 ES5 코드를 그대로 두지 않고도 실행할 수 있습니다.npm run uglify
- dist/rivescript.js
dist/rivescript.min.js
로 축소합니다.npm run clean
- 모든 빌드 파일을 정리합니다.로컬 노드 버전이 7보다 크면(Async/Await 지원) npm 스크립트를 실행할 필요 없이 ES2015+ 소스를 직접 실행할 수 있습니다. 이를 위해 Makefile이 있습니다.
make setup
- 개발 환경 설정, 종속성 설치 등make run
- 예제 두뇌를 가리키는 shell.js
실행합니다. 이 스크립트는 기본적으로 ES2015+ 소스에서 실행되며 빌드 단계가 필요하지 않습니다.make test
- npm run test
처럼 빌드하지 않고 ES2015+ 테스트 소스에서 nodeunit
직접 실행합니다.저는 Fedora 37/node 18.7.0에서 이 문제를 만났습니다. webpack/webpack#14532의 답변은 다음과 같습니다.
export NODE_OPTIONS=--openssl-legacy-provider
이 모듈의 npm 관리자를 위한 단계:
package.json
및 src/rivescript.js
의 버전 번호를 높입니다.Changes.md
에 변경 로그 알림 추가npm run dist
실행하여 ES5 소스를 빌드하고 단위 테스트를 실행하세요.npm install ../rivescript-js
)npm login
하고, NPM에 모듈을 게시하려면 npm publish
.rm -rf .git node_modules
새 폴더에서 잔해물을 제거합니다.zip -r rivescript-js-VERSION.zip rivescript-js
tar -czvf rivescript-js-VERSION.tar.gz rivescript-js
The MIT License (MIT)
Copyright (c) 2020 Noah Petherbridge
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.
RiveScript 공식 웹사이트, http://www.rivescript.com/