นี่คือไลบรารีล่าม RiveScript สำหรับ JavaScript RiveScript เป็นภาษาสคริปต์สำหรับแชทเตอร์บอต ทำให้ง่ายต่อการเขียนคู่ทริกเกอร์/การตอบสนองเพื่อสร้างความฉลาดของบอต
ไลบรารีนี้สามารถใช้ได้ทั้งในเว็บเบราว์เซอร์หรือเป็นโมดูลโหนด ดูตัวอย่างในโฟลเดอร์ eg/
RiveScript v2.0.0 มาพร้อมกับการรีแฟคเตอร์ ขนาดใหญ่ ของโค้ดเบสเพื่อใช้ฟีเจอร์ Async/Await ที่ทันสมัยทั้งหมด ขณะนี้ตัวสร้างใหม่อนุญาตให้ใช้ฟีเจอร์ต่างๆ เช่น "การจัดเก็บตัวแปรผู้ใช้โดยตรงใน Redis" หรือ "การใช้มาโครแบบอะซิงโครนัสในเงื่อนไข"
แต่จำเป็นต้องทำลายความเข้ากันได้แบบย้อนหลังเล็กน้อย! -- โดยการเปลี่ยนฟังก์ชันซิงโครนัสก่อนหน้านี้ เช่น reply()
ให้เป็นฟังก์ชัน Async ที่ส่งคืน Promises เหมือนกับ replyAsync()
ดูเอกสารการอัพเกรด v2 สำหรับข้อมูลเกี่ยวกับการเปลี่ยนแปลงและวิธีแก้ไขโค้ดของคุณสำหรับเวอร์ชันใหม่
สำหรับ nodejs และกลไก JavaScript อื่นๆ ที่คล้ายกัน คุณสามารถติดตั้งโมดูลนี้ในโปรเจ็กต์ของคุณได้จนถึงเวลา npm:
$ npm install rivescript
สำหรับเว็บคุณสามารถใช้ unpkg:
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > </ script >
พื้นที่เก็บข้อมูล git สำหรับโปรเจ็กต์นี้มีซอร์สโค้ด ES2015+ สำหรับ ES5 บิลด์ที่กำหนดเป้าหมายไปที่เบราว์เซอร์และเวอร์ชันโหนดรุ่นเก่า ให้ตรวจสอบแท็บการเผยแพร่ การแจกจ่ายที่คอมไพล์ประกอบด้วยไดเร็กทอรี lib/
ที่มีแหล่งที่มา ES5 เพื่อใช้กับโหนด <= 6 และไดเร็กทอรี dist/
ที่มีสคริปต์ "เบราว์เซอร์" ที่สามารถใช้กับเว็บเพจได้
หากต้องการใช้งานบนเว็บ เพียงโหลด dist/rivescript.min.js
ด้วยแท็ก <script>
เหมือนปกติ
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 รวมถึงเชลล์บรรทัดคำสั่งเชิงโต้ตอบที่เรียกว่า riveshell สำหรับทดสอบบอต RiveScript ของคุณ ใช้เป็นอาร์กิวเมนต์เส้นทาง (สัมพันธ์หรือสัมบูรณ์) ไปยัง "สมอง" - โฟลเดอร์ที่มีเอกสาร RiveScript ของคุณ (ไฟล์ .rive )
npm install rivescript
) คุณสามารถเริ่มเชลล์โดยใช้ npx ในขณะที่อยู่ในโฟลเดอร์โปรเจ็กต์ของคุณ ตัวอย่าง: $ npx riveshell /path/to/brain
npm install -g rivescript
) คุณสามารถเริ่มเชลล์ได้จากทุกที่ ตัวอย่าง: $ riveshell /path/to/brain
shell.js
ที่รูทของโปรเจ็กต์โดยใช้ node ตัวอย่างการใช้สมองเริ่มต้นที่มาใน eg/ โฟลเดอร์ : $ node shell.js /eg/brain
เมื่ออยู่ในเชลล์แล้ว คุณสามารถแชทกับบอทได้โดยใช้ไฟล์ RiveScript ในไดเร็กทอรีนั้น สำหรับการดีบักแบบง่าย คุณสามารถพิมพ์ /eval
เพื่อรันโค้ด JavaScript บรรทัดเดียว ดู /help
เพิ่มเติม
เชลล์ยอมรับพารามิเตอร์บรรทัดคำสั่งสองสามตัว:
--debug
: เปิดใช้งานการบันทึกการดีบักแบบละเอียด--watch
: ดูโฟลเดอร์ตอบกลับสำหรับการเปลี่ยนแปลงและโหลดบอทใหม่โดยอัตโนมัติเมื่อมีการแก้ไขไฟล์--utf8
: เปิดใช้งานโหมด UTF-8--case
: เปิดใช้งานข้อความผู้ใช้ที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ มีการสร้างเอกสาร Markdown และ HTML ของโมดูลในโฟลเดอร์เอกสาร โมดูลหลักอยู่ที่ rivescript
ตรวจสอบ RiveScript Community Wiki สำหรับรูปแบบการออกแบบทั่วไปและเคล็ดลับและลูกเล่นสำหรับ RiveScript
มีตัวอย่างอยู่ในไดเร็กทอรี eg/ ของโปรเจ็กต์นี้บน GitHub ที่แสดงวิธีเชื่อมต่อกับบอต RiveScript ด้วยวิธีต่างๆ เช่น ผ่านเว็บเบราว์เซอร์หรือเซิร์ฟเวอร์เทลเน็ต ตลอดจนข้อมูลโค้ดอื่นๆ และเทคนิคที่เป็นประโยชน์
สำหรับการทดสอบและการแชร์ตัวอย่างข้อมูล RiveScript ที่ใช้งาน JavaScript โปรดดูที่ RiveScript Playground
เป็นเว็บแอปสไตล์ JSFiddle สำหรับเล่นกับ RiveScript ในเว็บเบราว์เซอร์ของคุณ และแชร์โค้ดกับผู้อื่น
https://play.rivescript.com/
เวอร์ชัน 1.0.5 เพิ่มการรองรับ การทดลอง สำหรับ UTF-8 ในเอกสาร RiveScript มันถูกปิดใช้งานโดยค่าเริ่มต้น เปิดใช้งานโดยส่งค่า true
สำหรับตัวเลือก utf8
ในตัวสร้าง
ตามค่าเริ่มต้น (โดยไม่เปิดโหมด UTF-8) ทริกเกอร์อาจมีเฉพาะอักขระ ASCII พื้นฐานเท่านั้น (ไม่มีอักขระต่างประเทศ) และข้อความของผู้ใช้จะถูกตัดออกจากอักขระทั้งหมด ยกเว้นตัวอักษร ตัวเลข และช่องว่าง ซึ่งหมายความว่า คุณไม่สามารถบันทึกที่อยู่อีเมลของผู้ใช้ในการตอบกลับ RiveScript ได้ เนื่องจาก @ และ ตัวอักษร
เมื่อเปิดใช้งานโหมด UTF-8 ข้อจำกัดเหล่านี้จะถูกยกเลิก ทริกเกอร์ถูกจำกัดไม่ให้มีอักขระเมตาบางตัว เช่น แบ็กสแลช และข้อความของผู้ใช้จะถูกลบออกจากแบ็กสแลชและวงเล็บมุม HTML เท่านั้น (เพื่อป้องกันจาก XSS ที่ชัดเจนหากคุณใช้ RiveScript ในเว็บแอปพลิเคชัน) นอกจากนี้ อักขระเครื่องหมายวรรคตอนทั่วไปจะถูกตัดออก โดยค่าเริ่มต้นคือ /[.,!?;:]/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 ) ;
แท็ก <star>
ใน RiveScript จะบันทึกอินพุต "ดิบ" ของผู้ใช้ ดังนั้นคุณจึงสามารถเขียนตอบกลับเพื่อรับที่อยู่อีเมลของผู้ใช้หรือจัดเก็บอักขระต่างประเทศไว้ในชื่อของพวกเขาได้
จนถึงขณะนี้ได้รับการทดสอบเมื่อทำงานภายใต้ Node เท่านั้น เมื่อให้บริการผ่านเว็บเซิร์ฟเวอร์ โปรดใช้ความระมัดระวังเป็นพิเศษว่าเซิร์ฟเวอร์ของคุณส่งการเข้ารหัสเนื้อหาที่ถูกต้องด้วยไฟล์ต้นฉบับ RiveScript ( Content-Type: text/plain; charset=utf-8
)
คำเตือนประการหนึ่งที่ต้องระวังในโหมด UTF-8 คืออักขระเครื่องหมายวรรคตอนจะไม่ถูกลบออกจากข้อความของผู้ใช้ ดังนั้นหากมีเครื่องหมายจุลภาคหรือเครื่องหมายอัศเจรีย์รวมอยู่ด้วย อาจส่งผลต่อความสามารถในการจับคู่ของทริกเกอร์ของคุณ (คุณ ไม่ควรเขียนเครื่องหมายวรรคตอนที่ชัดเจนโดยเด็ดขาด ที่ฝั่งทริกเกอร์ของคุณ ทริกเกอร์ไม่ควรมีสัญลักษณ์เช่น ?
,
แม้ว่าจะเปิดใช้งานโหมด UTF-8 ก็ตาม และแม้ว่าการอัปเดตในอนาคตอาจจะบังคับใช้สิ่งนี้อย่างเข้มงวด)
ฉันใช้สคริปต์รัน npm เพื่อจัดการงานบิลด์ต่างๆ
npm run build
- คอมไพล์ซอร์ส ES2015+ จาก src/
ด้วย Babel และส่งออกไปยัง lib/
npm run test
- สร้างซอร์สด้วย Babel ตามด้านบน สร้างสคริปต์ทดสอบ ES2015+ ใน test/
และส่งออกไปที่ test.babel/
จากนั้นรัน nodeunit
บนสคริปต์npm run dist
- สร้างบิลด์ที่สามารถแจกจ่ายได้เต็มรูปแบบ Source ถูกสร้างขึ้นด้วย Babel จากนั้นส่งต่อไปยัง webpack และ uglify สำหรับ build ของเบราว์เซอร์npm run webpack
- สร้าง dist/rivescript.js
จากแหล่ง ES2015+ โดยตรงจาก src/
(โดยใช้ babel-loader
) คำสั่งนี้ไม่ขึ้นอยู่กับ npm run build
และสามารถรันได้โดยไม่ต้องทิ้งโค้ด ES5 ใดๆ ไว้npm run uglify
- ลดขนาด dist/rivescript.js
เป็น dist/rivescript.min.js
npm run clean
- ล้างไฟล์บิลด์ทั้งหมดหากเวอร์ชันโหนดในเครื่องของคุณคือ >= 7 (รองรับ Async/Await) คุณสามารถเรียกใช้แหล่งที่มา ES2015+ ได้โดยตรงโดยไม่จำเป็นต้องเรียกใช้สคริปต์ npm ใดๆ เพื่อจุดประสงค์นั้น ฉันมี Makefile
make setup
- ตั้งค่าสภาพแวดล้อม dev ติดตั้งการอ้างอิง ฯลฯmake run
- รัน shell.js
ชี้ไปที่สมองตัวอย่าง สคริปต์นี้ทำงานบนซอร์ส ES2015+ โดยไม่ต้องมีขั้นตอนการสร้างmake test
- รัน nodeunit
บนแหล่งทดสอบ ES2015+ โดยตรงโดยไม่ต้องสร้างมันเหมือนกับ npm run test
ฉันพบสิ่งนี้บน 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 publish
เพื่อเผยแพร่โมดูลไปยัง NPMrm -rf .git node_modules
เพื่อลบ cruft ออกจากโฟลเดอร์ใหม่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/