นี่คือไลบรารีล่าม RiveScript ที่เขียนขึ้นสำหรับภาษาการเขียนโปรแกรม Java RiveScript เป็นภาษาสคริปต์สำหรับแชทเตอร์บอต ทำให้ง่ายต่อการเขียนคู่ทริกเกอร์/การตอบสนองเพื่อสร้างความฉลาดของบอต
RiveScript เป็นภาษาสคริปต์สำหรับการเขียนแชทบอท มีไวยากรณ์ที่เรียบง่ายและได้รับการออกแบบให้อ่านง่ายและเขียนได้อย่างรวดเร็ว
ตัวอย่างง่ายๆ ของลักษณะของ RiverScript:
+ 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 Community Wiki สำหรับรูปแบบการออกแบบทั่วไป รวมถึงคำแนะนำและเคล็ดลับสำหรับ RiveScript
เพิ่มการพึ่งพา rivescript-core
ให้กับโครงการของคุณ:
มาเวน :
<การพึ่งพา> <groupId>com.rivescript</groupId> <artifactId>rivivescript-core</artifactId> <เวอร์ชัน>0.10.0</เวอร์ชัน> </การพึ่งพา>
เกรด :
การพึ่งพา { คอมไพล์ "com.rivescript:rivescript-core:0.10.0"}
หากคุณต้องการใช้ RiveScript ในแอปพลิเคชัน Spring Boot โปรดดูส่วน 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 ของคุณ เรียกใช้ด้วยเส้นทางไปยังโฟลเดอร์บนดิสก์ที่มีเอกสาร RiverScript ของคุณ ตัวอย่าง:
java com.rivescript.cmd.Shell [options] </path/to/documents>
ตัวสร้าง com.rivescript.RiveScript
ใช้อินสแตนซ์ Config
ที่เป็นทางเลือก นี่คือตัวอย่างแบบเต็มพร้อมตัวเลือกที่รองรับทั้งหมด คุณจะต้องระบุค่าสำหรับตัวเลือกการกำหนดค่าที่แตกต่างจากค่าเริ่มต้นเท่านั้น
บอต RiveScript = RiveScript ใหม่ (Config.newBuilder() .throwExceptions(false) // เปิดใช้งานการโยนข้อยกเว้นหรือไม่เข้มงวด (จริง) // เปิดใช้งานการตรวจสอบไวยากรณ์ที่เข้มงวดหรือไม่ utf8 (false) // เปิดใช้งานโหมด UTF-8 หรือไม่ UnicodePunctuation ("[.,!?;: ]") // รูปแบบเครื่องหมายวรรคตอน Unicode.forceCase(false) // ไม่ว่าจะเปิดใช้งานการบังคับให้ทริกเกอร์เป็นตัวพิมพ์เล็กหรือไม่ concat(ConcatMode.NONE) // Concat mode.ความลึก(50) // ขีดจำกัดความลึกของการเรียกซ้ำ .sessionManager(sessionManager) // ตัวจัดการเซสชันสำหรับตัวแปรผู้ใช้.errorMessages(ข้อผิดพลาด) // แมปของข้อความแสดงข้อผิดพลาดที่กำหนดเอง สร้าง());
เพื่อความสะดวก คุณสามารถใช้ทางลัด:
// ตัวสร้างเริ่มต้นใช้การกำหนดค่าพื้นฐาน RiveScript bot = new RiveScript();// สิ่งนี้คล้ายกับ:RiveScript bot = new RiveScript(Config.basic());// หากต้องการใช้การกำหนดค่าพื้นฐานกับโหมด UTF-8 เปิดใช้งานการใช้งาน: บอต RiveScript = new RiveScript (Config.utf8());
การรองรับ UTF-8 ใน RiveScript ถือเป็นฟีเจอร์ทดลอง มันถูกปิดใช้งานโดยค่าเริ่มต้น
ตามค่าเริ่มต้น (โดยไม่เปิดโหมด UTF-8) ทริกเกอร์อาจมีเฉพาะอักขระ ASCII พื้นฐานเท่านั้น (ไม่มีอักขระต่างประเทศ) และข้อความของผู้ใช้จะถูกตัดออกจากอักขระทั้งหมด ยกเว้นตัวอักษร ตัวเลข และช่องว่าง ซึ่งหมายความว่า คุณไม่สามารถบันทึกที่อยู่อีเมลของผู้ใช้ในการตอบกลับ RiveScript ได้ เนื่องจาก @ และ . ตัวอักษร
เมื่อเปิดใช้งานโหมด UTF-8 ข้อจำกัดเหล่านี้จะถูกยกเลิก ทริกเกอร์ถูกจำกัดไม่ให้มีอักขระเมตาบางตัว เช่น แบ็กสแลช และข้อความของผู้ใช้จะถูกลบออกจากแบ็กสแลชและวงเล็บมุม HTML เท่านั้น (เพื่อป้องกันจาก XSS ที่ชัดเจนหากคุณใช้ RiveScript ในเว็บแอปพลิเคชัน) นอกจากนี้ อักขระเครื่องหมายวรรคตอนทั่วไปจะถูกตัดออก โดยค่าเริ่มต้นคือ [.,!?;:]
ซึ่งสามารถแทนที่ได้โดยการระบุสตริง regexp ใหม่ให้กับเมธอด Config.Builder#unicodePunctuation()
ตัวอย่าง:
// สร้างบอทใหม่โดยเปิดใช้งานโหมด UTF-8 และแทนที่อักขระเครื่องหมายวรรคตอนที่ถูกตัดออกจากข้อความของผู้ใช้ RiveScript bot = new RiveScript(Config.Builder.utf8() .unicodePunctuation("[.,!?;:]") .สร้าง());
แท็ก <star>
ใน RiveScript จะบันทึกอินพุต "ดิบ" ของผู้ใช้ ดังนั้นคุณจึงสามารถเขียนตอบกลับเพื่อรับที่อยู่อีเมลของผู้ใช้หรือจัดเก็บอักขระต่างประเทศไว้ในชื่อของพวกเขาได้
เพิ่มการพึ่งพา 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
ของคุณ (หรือเป็นสวิตช์บรรทัดคำสั่ง) เพื่อปรับแต่งลักษณะการทำงานของการกำหนดค่าอัตโนมัติ:
สคริปต์: เปิดใช้งาน: จริง # เปิดใช้งาน RiveScript สำหรับแอปพลิเคชัน source-path: classpath:/rivescript/ # รายการไฟล์ต้นฉบับ RiveScript และ/หรือไดเร็กทอรีที่คั่นด้วยเครื่องหมายจุลภาค นามสกุลไฟล์: .rive, .rs # รายการนามสกุลไฟล์ RiveScript ที่คั่นด้วยเครื่องหมายจุลภาคที่จะโหลด ข้อยกเว้นการโยน: false # เปิดใช้งานข้อยกเว้นการโยน เข้มงวด: จริง # เปิดใช้งานการตรวจสอบไวยากรณ์ที่เข้มงวด utf8: false # เปิดใช้งานโหมด UTF-8 เครื่องหมายวรรคตอน Unicode: [.,!?;:] # รูปแบบเครื่องหมายวรรคตอน Unicode (ใช้เฉพาะเมื่อเปิดใช้งานโหมด UTF-8 เท่านั้น) กรณีบังคับ: เท็จ # เปิดใช้งานการบังคับให้ทริกเกอร์เป็นตัวพิมพ์เล็ก concat: none # โหมด concat (ไม่มี | ขึ้นบรรทัดใหม่ | เว้นวรรค) ความลึก: 50 # ขีดจำกัดความลึกของการเรียกซ้ำ ข้อความแสดงข้อผิดพลาด: # การแทนที่ข้อความแสดงข้อผิดพลาดที่กำหนดเอง ตัวอย่างเช่น `rivescript.error-messages.deepRecursion=ข้อความที่ตรวจพบการเรียกซ้ำแบบลึกแบบกำหนดเอง` ตัวจัดการวัตถุ: # รายการชื่อตัวจัดการวัตถุที่คั่นด้วยเครื่องหมายจุลภาคที่จะลงทะเบียน (ปัจจุบันรองรับ: `groovy`, `javascript`, `ruby`)
หากต้องการลงทะเบียนรูทีนย่อย Java ที่กำหนดเองและ/หรือตัวจัดการวัตถุที่รองรับที่ไม่ใช่ค่าเริ่มต้นโดยอัตโนมัติในอินสแตนซ์บอท RiveScript
ที่สร้างขึ้น ให้กำหนด bean ที่เหมาะสมในบริบทแอปพลิเคชันของคุณ เช่น:
@Beanpublic Map<String, Subroutine> subroutines() {// คีย์คือชื่อของแมโครอ็อบเจ็กต์ Java ที่จะลงทะเบียน รูทีนย่อย Map<String, Subroutine> = 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", ใหม่ ObjectHandler1()); objectHandlers.put ("handler2", ใหม่ ObjectHandler2 ()); ส่งคืน objectHandlers; -
หากต้องการคอมไพล์ ทดสอบ สร้าง jar และเอกสารทั้งหมดให้รัน:
./gradlew build
หากต้องการติดตั้ง jars ทั้งหมดลงในแคช 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.