Botml هي لغة ترميزية تعريفية وقوية لتصميم روبوتات الدردشة الحديثة (المعروفة أيضًا باسم روبوتات المحادثة).
يمكن لأي شخص (المطورين وغير المطورين) استخدامه لإنشاء الروبوتات وتعليمها كيفية التصرف . حدد سلوك برنامج الدردشة الآلي الخاص بك باستخدام الجزء الصغير المناسب من التنسيق وشارك في المحادثة في لمح البصر. شاهد بنفسك: روبوت آلة حاسبة مكتوب في سطرين فقط.
يستخدم هذا المشروع العقدة وnpm. اذهب للتحقق منها إذا لم تكن مثبتة محليًا.
$ npm i -g botml
سيؤدي هذا إلى تثبيت كل من حزمة عقدة botml
وعميل bot
.
اختياريًا، إذا كنت تستخدم Atom كمحرر، فقد ترغب في تثبيت تمييز بناء الجملة باستخدام حزمة language-botml
.
إما تشغيل CLI:
$ bot
أو استخدمه في الكود الخاص بك:
const Botml = require ( 'botml/lib/botml' )
const bot = new Botml ( 'alice.bot' )
bot . start ( )
أو حتى تحميله بشكل ثابت في متصفحك:
< script src =' https://unpkg.com/botml ' > </ script >
< script >
const bot = new Botml ( )
// either load an URI:
// bot.load('https://raw.githubusercontent.com/codename-co/botml/master/examples/hello.bot')
// or load the script directly:
bot . parse ( '> *n< yes?n' )
bot . start ( )
bot . send ( 'hey' )
</ script >
تنقسم الميزات الحالية إلى نوعين: الميزات الأساسية التي تغطي احتياجات الروبوت الأساسية، والميزات المتقدمة التي تتيح إمكانات محادثة أكثر ثراءً.
الميزات الأساسية:
الميزات المتقدمة:
يهدف التنسيق إلى تحقيق أقصى استفادة باستخدام الأقل. مع مجموعة الأعراف الصحيحة والحد الأدنى، يمكن أن تكون قوية جدًا.
يتبع بناء الجملة العام ثلاث اتفاقيات مهمة :
سيكون ملف .bot
الأساسي هو:
! BOTML 1
> Hello
< Hello human!
هناك حاجة إلى سطر المواصفات لإخبار Botml أنه يمكنه تحميل الملف.
يجب أن يكون هذا هو السطر الأول من أي ملف .bot
.
! BOTML 1
يشير الرقم 1
إلى الإصدار الحالي من التنسيق.
يمكن أن تساعد التعليقات في جعل ملف .bot
الخاص بك أكثر وضوحًا.
ويمكن استخدامها ككتل مستقلة أو يمكن إدراجها ضمن كتل قابلة للتنفيذ.
لا يمكن استخدامها في السطر.
# COMMENT
الحوارات هي المفهوم الأساسي لأي روبوت. فهو يحدد كيفية تفاعل الإنسان والروبوت.
يجب أن يبدأ الحوار بسطر >
، يحدد الجملة (الجمل) التي يمكنها تنشيط الروبوت للرد.
يجب أن يكون هناك سطر <
واحد أو أكثر بعد ذلك لتحديد استجابة (استجابات) الروبوت.
يمكن أن يكون هناك عدة ذهابًا وإيابًا من خلال تكرار هذا التسلسل داخل نفس الكتلة.
> MESSAGE
< MESSAGE
مثال:
> Hi
< Hello there. Who are you?
> *
< Nice to meet you.
الردود العشوائية في الحوارات تجعل الروبوت يشعر بأنه أقل جمودا. عند الرد على أحد الأشخاص، يختار الروبوت بشكل عشوائي مرشحي الرد. يمكن للروبوت اختيار واحد فقط من مرشحي الرد المتعددين.
> MESSAGE
< REPLY CANDIDATE #1
< REPLY CANDIDATE #2
مثال:
> Hello
< Hi there
< Howdy?
تساعد القوائم في تجميع مفاهيم أو بدائل مماثلة.
يجب أن تبدأ القائمة بالخط =
الذي يحدد اسم القائمة.
يجب أن يحتوي على عنصر قائمة واحد على الأقل، ولكن يمكن أن يحتوي على المزيد. يبدأ كل عنصر في القائمة بالرمز -
.
= LIST_NAME
- LIST_ITEM
- LIST_ITEM
يمكن أن يشير عنصر القائمة إلى قائمة أخرى.
= LIST_NAME
- LIST_ITEM
- [ANOTHER_LIST]
يمكن الرجوع إليه في سطر >
للإشارة إلى متغيرات متعددة لنمط الإدخال.
يمكن الإشارة إليه في سطر <
للإشارة بشكل عشوائي إلى أحد عناصر القائمة كرد.
يمكن الرجوع إليها في ?
سطر (مطالبة) للإشارة إلى خيارات متعددة محددة مسبقًا.
تتم الإشارة إلى القائمة عن طريق وضع اسم القائمة بين قوسين: [LIST_NAME]
.
مثال:
= citrus
- oranges
- lemons
- grapefruits
= random_fruit
- apples
- apricots
- bananas
- [citrus]
> I like [random_fruit]
< Oh. I prefer [random_fruit].
# which is the equivalent to:
# > I like apples
# > I like apricots
# > I like bananas
# > I like oranges
# > I like lemons
# > I like grapefruits
# < Oh. I prefer apples
# < Oh. I prefer apricots
# < Oh. I prefer bananas
# < Oh. I prefer oranges
# < Oh. I prefer lemons
# < Oh. I prefer grapefruits
#
# > I like [random_fruit]
# < Oh. I prefer [random_fruit].
يمكن أيضًا استخدام القوائم في المطالبات.
المطالبات عبارة عن ردود سريعة محددة مسبقًا كرد فعل على موقف معين.
ويجب وضعها بعد سطر <
في نهاية الحوار.
يجب عليهم الرجوع إلى قائمة للوصول إلى كافة الردود السريعة.
يجب أن يظل عدد الردود السريعة في حده الأدنى.
= LIST_NAME
- LIST_ITEM
- LIST_ITEM
? [LIST_NAME]
مثال:
= pizza_types
- Peperroni
- Margherita
- Hawaiian
> I need a pizza
< What kind of pizza?
? [pizza_types]
يمكن للخدمات الاستفادة من نقاط نهاية واجهات برمجة التطبيقات الخارجية.
يجب الإعلان عن الخدمة في الكتلة الخاصة بها بدءًا من العلامة @
. يتكون من اسم ونقطة نهاية API بتنسيق JSON (عبر http أو https).
يمكنه (ويجب عليه في معظم الأحيان) قبول معلمة باستخدام علامة $
داخل نقطة النهاية الخاصة به.
@ SERVICE_NAME ENDPOINT
يمكن استهلاكها في الحوار.
عندما تحتوي نقطة النهاية على علامة $
، يجب أن تقبل معلمة ستحل قيمتها محل علامة $
.
يمكن تصفية نتيجة استدعاء الخدمة باستخدام OUTPUT اختياري. إنه محدد تنسيقه هو /(.w)+/
.
@ SERVICE_NAME( PARAMETER )[ OUTPUT ]
مثال:
@ geo_domain http://freegeoip.net/json/$
> Where is *{domain}
@ geo_domain($domain).city
< It is running from $.
يمكن استخدام البرامج النصية لتقييم التعليمات البرمجية.
تعتمد لغة الكود على اللغة المستخدمة للمحلل اللغوي المستخدم. محلل botml
موجود في Javascript، وبالتالي يمكن استخدام كود Javascript.
يجب أن يكون مضمنًا في مربعات الحوار المغلفة بـ ```.
يمكنه الوصول إلى المتغيرات المسماة:
context.variables.get('price')
$price
مثال:
> It will cost you #{price} USD
< `$price / 1000`k USD is a lot!
المتغيرات هي الطريقة لاكتشاف المعلومات ذات المعنى وتنسيقها وتخزينها وإعادة استخدامها.
يمكن التقاط متغير داخل سطر >
(الحوار).
يجب أن تكون إما نصية ( $
) أو رقمية ( #
) أو أبجدية رقمية ( *
).
يمكن استخدامه في <
سطور.
> My name is *{name}
< Nice to meet you, $name
> I am #{age} years old
< Seems that you are $age
تنسيق المتغير هو ${VARIABLE_NAME}
(مع ما يعادله من أرقام وأبجدية رقمية). ولكن لسهولة الاستخدام، يمكن استخدام التنسيق $VARIABLE_NAME
أيضًا للمتغيرات النصية والرقمية.
يشير المتغير $
الخاص دائمًا إلى آخر قيمة مطابقة للحوار أو نتيجة السطر السابق (نتيجة استهلاك الخدمة على سبيل المثال).
يمكن استخدام التعبيرات العادية في >
الأسطر للحصول على مزيد من التحكم في ما يجب اكتشافه.
يجب أن يكون التعبير العادي مغلفًا بـ /
ولا يمكن مزجه مع التعبيرات الأساسية.
> /^I (?:.+s)?(w+) (?:.+s)?(it|this)/
< Cool bro.
في الواقع، يتم استخدام مكتبة XRegExp تحت الغطاء، مما يتيح لك الوصول إلى اللقطات المسماة الرائدة والتعليقات المضمنة ومعدلات الوضع.
تعد مسارات عمل الحوار مجموعة شاملة من الحوارات الكلاسيكية.
يمكن استخدام سير العمل لتحديد التدفق الدقيق للمحادثة.
يجب أن يبدأ بسطر ~
، الذي يحدد اسم القائمة.
يمكن أن يبدأ سير عمل واحد فقط بـ <
حوار. سيتم تنشيط سير العمل هذا واستخدامه افتراضيًا عندما يتصل المستخدم بالروبوت.
# grocery shopping
> I want to buy *{items}
< How many $items?
> #{count} $items
> #{count}
< There you go.
الفروع الشرطية هي تعليمات توجه الروبوت إلى جزء آخر من الحوار بناءً على شروط الاختبار.
الفروع الشرطية تبدأ بـ ---
وتستمع لجميع المعلومات المكتوبة ثم تختبرها مع جميع الحالات. يتم فصل كل حالة بواسطة ---
:
---
> first input case
< first reply
---
> second input case
< second reply
---
> last input case
< last reply
تعمل الفروع الشرطية بشكل رائع مع ميزة أخرى تسمى نقطة التفتيش .
نقطة التفتيش هي علامة ~ CHECKPOINT_NAME
في سير العمل، مما يجعل العودة إليها في مرحلة لاحقة من مربع الحوار الحالي أمرًا سهلاً. يمكن الإشارة إليها بـ ~ [CHECKPOINT_NAME]
، الذي يعيد توجيه التدفق إلى علامة نقطة التفتيش:
~ ask_howdy
< Hello stranger.
~ checkpoint_name
< How are you?
> meh
< So you feel bad huh
~ [checkpoint_name]
# Example of workflow working:
# < Hello stranger.
# < How are you?
# > meh
# < So you feel bad huh
# < How are you?
# > ...
كل من نقاط التفتيش والقوائم تجعل العمل مع الفروع الشرطية أمرًا مثيرًا للاهتمام حقًا:
= mood
- good
- meh
- great
- ok
= exceptions
- fantastic
- better than ever
~ ask_howdy
< hello stranger.
~ listen_howdy
< how are you?
? [mood]
---
> meh
< So you feel bad huh
~ [listen_howdy]
---
> good
< Oh, it is not bad ;)
~ [rechecker]
---
> [exceptions]
< Seems you really cool guy!
---
> ok
< Hmm, just ok? Okay then...
---
> great
< Nice! Let's continue then...
~ rechecker
< Maybe it is more than good?
> excellent
< Much better!
ومن الممكن أيضًا استخدام علامة "غير متساوي" !
في التفرع المشروط :
= mood
- [bad_mood]
- [good_mood]
= bad_mood
- meh
- bad
= good_mood
- great
- ok
~ ask_howdy
< hello stranger.
~ listen_howdy
< how are you?
? [mood]
---
> ![mood]
< I asked you how you are ; please let's start over with another answer?
~ [listen_howdy]
---
> [good_mood]
< Oh, it is awesome ;)
---
> [bad_mood]
< Hmm... bye then...
يعمل التفرع الشرطي أيضًا بشكل جيد مع البرامج النصية طالما تم إرجاع القيمة. إذا أعاد البرنامج النصي القيمة true
، فسيتم تنشيط الفرع المقابل. إذا كانت جميع الاختبارات false
، فسيتم تخطي جميع الفروع والاستمرار في سير العمل الحالي:
~ ask_for_email
> start email workflow
~ listen_email
< Your email please?
> *{email}
---
` !/^.+@.+..+/.test('$email')
< This email $email seems not legit!
~ [listen_email]
---
< Cool. We'll reach you over at $email
المشغلات هي وسيلة لدمج الروبوت مع برنامج آخر.
هناك نوعان من الأحداث: الأحداث القياسية والأحداث المخصصة.
الأحداث القياسية هي كما يلي:
'start'
'patterns:set'
مع معلمتين من السلسلة: اسم النمط وقيمته'match'
مع اثنين من معلمات السلسلة: التسمية والنمط'current-dialogue-start'
بمعلمة سلسلة واحدة: حوارLabel'reply'
بمعلمة سلسلة واحدة: الرسالة'smart-replies'
بمعلمة صفيف واحدة: الردود'current-dialogue-end'
بمعلمة سلسلة واحدة:DilogueLabel'variable:set'
مع معلمتين من السلسلة: اسم المتغير وقيمته'quit'
'*'
كافة الأحداث القياسية والمخصصةيمكن تشغيل الأحداث المخصصة داخل الحوارات.
يجب أن يكون للحدث المخصص اسم.
يمكن أن يكون لها معلمات. يمكن أن تعتمد المعلمات على المتغيرات المسماة.
@ trigger( 'EVENT_NAME' [, PARAMETER] )
مثال:
> hello
< hi
@ trigger('said_hi')
ثم تعامل مع الحدث "said_hi" في الكود الخاص بك وفقًا لاحتياجاتك:
bot . on ( 'said_hi' , ( ) => console . log ( 'The bot said hi' ) ) ;
TokensRegex هو إطار عمل لتحديد الأنماط المتقدمة القائمة على المعالجة المسبقة للغة الطبيعية مثل الكيانات المسماة ووضع علامات على أجزاء الكلام.
> ([ner: PERSON]+) /was|is/ /an?/ []{0,3} /painter|artist/
< An accomplished artist you say.
يتم تمكين هذه الميزة من خلال تكامل التعليمات البرمجية. انظر مثالا.
يمكن تمكين البرمجة اللغوية العصبية (NLP) من خلال تكامل التعليمات البرمجية. انظر مثالا.
انظر examples/
الدليل.
ابدأ اختبارات الوحدة بـ:
npm test
npm run autotest # this is for continuous testing
استخدم واجهة سطر الأوامر (CLI) لتجربة البرامج النصية لـ botml من وحدة التحكم:
node lib/cli.js
node lib/cli.js examples/echo.bot # load script from a local file
debug=true node lib/cli.js # add logging verbosity
في وضع CLI، يمكن أن تساعد بعض الأوامر الخاصة في تصحيح الأخطاء أيضًا:
لا تتردد في الغوص! افتح قضية أو أرسل العلاقات العامة.
Botml مرخص من معهد ماساتشوستس للتكنولوجيا.