هذه مكتبة مترجم RiveScript مكتوبة للغة البرمجة Go. RiveScript هي لغة برمجة نصية لروبوتات الدردشة، مما يجعل من السهل كتابة أزواج التشغيل/الاستجابة لبناء ذكاء الروبوت.
هذا المشروع حاليًا في حالة تجريبية. يجب أن تكون واجهة برمجة التطبيقات (API) مستقرة في الغالب ولكن قد تتغير الأمور عليك.
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.
راجع أيضًا RiveScript Community Wiki للتعرف على أنماط التصميم الشائعة والنصائح والحيل الخاصة بـ RiveScript.
بالنسبة لمكتبة التطوير:
go get github.com/aichaos/rivescript-go
بالنسبة إلى برنامج rivescript
الثنائي المستقل لاختبار الروبوت:
go get github.com/aichaos/rivescript-go/cmd/rivescript
يتضمن توزيع RiveScript غلافًا تفاعليًا لاختبار روبوت RiveScript الخاص بك. قم بتشغيله باستخدام المسار إلى مجلد على القرص يحتوي على مستندات RiveScript الخاصة بك. مثال:
# (Linux)
$ rivescript eg/brain
# (Windows)
> rivescript.exe eg/brain
راجع rivescript -help
للتعرف على الخيارات التي يقبلها، بما في ذلك وضع التصحيح ووضع UTF-8.
عند استخدامها كمكتبة لكتابة برنامج الدردشة الآلي الخاص بك، يكون الملخص كما يلي:
package main
import (
"fmt"
"github.com/aichaos/rivescript-go"
)
func main () {
// Create a new bot with the default settings.
bot := rivescript . New ( nil )
// To enable UTF-8 mode, you'd have initialized the bot like:
bot = rivescript . New ( rivescript . WithUTF8 ())
// Load a directory full of RiveScript documents (.rive files)
err := bot . LoadDirectory ( "eg/brain" )
if err != nil {
fmt . Printf ( "Error loading from directory: %s" , err )
}
// Load an individual file.
err = bot . LoadFile ( "./testsuite.rive" )
if err != nil {
fmt . Printf ( "Error loading from file: %s" , err )
}
// Sort the replies after loading them!
bot . SortReplies ()
// Get a reply.
reply , err := bot . Reply ( "local-user" , "Hello, bot!" )
if err != nil {
fmt . Printf ( "Error: %s n " , err )
} else {
fmt . Printf ( "The bot says: %s" , reply )
}
}
يأخذ المُنشئ بنية Config
اختيارية. فيما يلي مثال كامل بجميع الخيارات المدعومة. ما عليك سوى توفير مفاتيح مختلفة عن الإعدادات الافتراضية.
bot := rivescript . New ( & rivescript. Config {
Debug : false , // Debug mode, off by default
Strict : false , // No strict syntax checking
UTF8 : false , // No UTF-8 support enabled by default
Depth : 50 , // Becomes default 50 if Depth is <= 0
Seed : time . Now (). UnixNano (), // Random number seed (default is == 0)
SessionManager : memory . New (), // Default in-memory session manager
})
للراحة، يمكنك استخدام الاختصار:
// A nil config uses all the defaults.
bot = rivescript . New ( nil )
// WithUTF8 enables UTF-8 mode (other settings left as default).
bot = rivescript . New ( rivescript . WithUTF8 ())
إحدى الميزات الشائعة في العديد من تطبيقات RiveScript هي كائن الماكرو، الذي يمكّنك من كتابة كود البرنامج الديناميكي (بلغة البرمجة المفضلة لديك) لإضافة إمكانات إضافية إلى الروبوت الخاص بك. على سبيل المثال، يمكن أن يجيب الروبوت الخاص بك على سؤال "كيف يبدو الطقس في $location " عن طريق تشغيل بعض التعليمات البرمجية للبحث عن إجابته عبر واجهة برمجة تطبيقات الويب.
يحتوي إصدار Go من RiveScript على دعم لوحدات ماكرو الكائنات المكتوبة بلغة Go (في وقت ترجمة التطبيق الخاص بك). كما أن لديها دعمًا اختياريًا لوحدات ماكرو كائنات JavaScript باستخدام مكتبة goja.
فيما يلي كيفية تحديد ماكرو كائن Go:
bot . SetSubroutine ( func ( rs * rivescript. RiveScript , args [] string ) string {
return "Hello world!"
})
فيما يلي مثال عن كيفية إتاحة وحدات ماكرو كائنات JavaScript عبر وحدة goja:
package main
import (
"fmt"
"github.com/aichaos/rivescript-go"
"github.com/aichaos/rivescript-go/lang/javascript"
)
func main () {
// Initialize RiveScript first.
bot := rivescript . New ( rivescript . WithUTF8 ())
// Add the JavaScript object macro handler.
js := javascript . New ( bot )
bot . SetHandler ( "javascript" , js )
// You can access the goja VM and set your own global
// variable or function bindings to be called from your
// object macros.
js . VM . Set ( "helloFunc" , func ( name string ) string {
return fmt . Sprintf ( "Hello, %s!" , name )
})
// Load some RiveScript code. This example just tests the
// JavaScript object macro support.
err := bot . Stream ( `
> object add javascript
let a = args[0];
let b = args[1];
return parseInt(a) + parseInt(b);
< object
> object fn javascript
let result = helloFunc(args[0])
return result
< object
+ add # and #
- <star1> + <star2> = <call>add <star1> <star2></call>
+ say hello *
- <call>fn <star></call>
` )
if err != nil {
fmt . Printf ( "Error loading RiveScript document: %s" , err )
}
// Sort the replies after loading them!
bot . SortReplies ()
// Get some replies!
inputs := [] string { "add 5 and 12" , "say hello goja" }
for _ , message := range inputs {
fmt . Printf ( "You said: %s n " , message )
reply , err := bot . Reply ( "local-user" , message )
if err != nil {
fmt . Printf ( "Error: %s n " , err )
} else {
fmt . Printf ( "The bot says: %s n " , reply )
}
}
}
يعتبر دعم UTF-8 في RiveScript ميزة تجريبية. يتم تعطيله بشكل افتراضي.
افتراضيًا (بدون تشغيل وضع UTF-8)، قد تحتوي المشغلات فقط على أحرف ASCII الأساسية (بدون أحرف أجنبية)، ويتم تجريد رسالة المستخدم من جميع الأحرف باستثناء الأحرف والأرقام والمسافات. وهذا يعني أنه، على سبيل المثال، لا يمكنك التقاط عنوان البريد الإلكتروني للمستخدم في رد RiveScript، بسبب @ و. الشخصيات.
عند تمكين وضع UTF-8، يتم رفع هذه القيود. تقتصر المشغلات فقط على عدم احتوائها على أحرف أولية معينة مثل الشرطة المائلة العكسية، ويتم تجريد رسالة المستخدم فقط من الخطوط المائلة العكسية وأقواس HTML الزاوية (للحماية من XSS الواضح إذا كنت تستخدم RiveScript في تطبيق ويب). بالإضافة إلى ذلك، يتم إزالة أحرف الترقيم الشائعة، وتكون المجموعة الافتراضية هي /[.,!?;:]/g
. يمكن تجاوز ذلك عن طريق توفير سلسلة regexp حرفية جديدة لوظيفة RiveScript.SetUnicodePunctuation
. مثال:
// Make a new bot with UTF-8 mode enabled.
bot := rivescript . New ( rivescript . WithUTF8 ())
// Override the punctuation characters that get stripped
// from the user's message.
bot . SetUnicodePunctuation ( `[.,!?;:]` );
ستلتقط علامات <star>
في RiveScript الإدخال "الخام" للمستخدم، بحيث يمكنك كتابة ردود للحصول على عنوان البريد الإلكتروني للمستخدم أو تخزين أحرف أجنبية في اسمه.
أستخدم GNU Makefile لتسهيل إنشاء هذه الوحدة وتشغيلها. الأوامر ذات الصلة هي:
make setup
- قم بتشغيل هذا بعد استنساخ هذا الريبو حديثًا. يقوم بتشغيل أوامر git submodule
لسحب التبعيات الموردة.make build
- سيؤدي هذا إلى إنشاء أمر الواجهة الأمامية من cmd/rivescript
ووضع الملف الثنائي في الدليل bin/
. إنه ينشئ ملفًا ثنائيًا مرتبطًا بنظامك الحالي، لذا في نظام التشغيل Linux سيؤدي هذا إلى إنشاء ملف ثنائي لنظام التشغيل Linux. يوصى أيضًا بتشغيل هذا البرنامج مرة واحدة على الأقل، لأنه سيقوم بتخزين الحزم التابعة مؤقتًا وتسريع عمليات الإنشاء والتشغيل اللاحقة.make run
- يقوم بتشغيل أمر الواجهة الأمامية ويوجهه إلى المجلد eg/brain
كمصدر RiveScript الخاص به.make fmt
- يقوم بتشغيل gofmt -w
على كافة الملفات المصدر.make test
- تشغيل اختبارات الوحدة.make clean
- ينظف مجلدات .gopath
و bin
و dist
. يقوم الريبو Rivescript-go بوحدات فرعية لمشروع RiveScript Test Suite (rsts). إذا لم تقم بإجراء git clone --recursive
for rivescript-go، فيمكنك سحب الوحدة الفرعية عبر الأوامر التالية:
git submodule init
git submodule update
ثم make test
(أو go test
) يجب أن يُظهر نتائج الاختبارات التي تم تنفيذها من المجلد rsts/.
يمكنك إنشاء إصدار لمنصة فردية عن طريق تشغيل أمر مثل make linux/amd64
. أهداف البناء الصالحة حاليًا هي كما يلي:
linux/386
و linux/amd64
windows/386
وويندوز windows/amd64
darwin/amd64
قم بتشغيل make release
لإنشاء الإصدارات تلقائيًا لجميع الأنظمة الأساسية المدعومة.
يتم إنشاء دليل للإصدار في dist/rivescript-$VERSION-$OS-$ARCH/
الذي يحتوي على الملف الثنائي المدمج، README.md، Changes.md والأمثلة. يمكنك فحص هذا الدليل بعد ذلك؛ يتم تشفير محتوياته تلقائيًا (الرمز البريدي لنظام التشغيل Windows) ووضعها في جذر git repo.
إذا كنت تقوم بالتجميع المتبادل لنظام مختلف، فقد تحتاج إلى العبث بالأذونات حتى يتمكن Go من تنزيل المكتبة القياسية للهدف الجديد. مثال:
% sudo mkdir /usr/lib/golang/pkg/windows_386
% chown your_user:your_user /usr/lib/golang/pkg/windows_386
NullStore
للاختبار. مديرو الجلسة الرسمية الآخرون (مثل Redis) موجودون هنا أيضًا. The MIT License (MIT)
Copyright (c) 2017 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/