يعد Hubot واحدًا من أشهر إطار عمل إنشاء الروبوتات على الويب، وذلك لأن github جعل عملية الإنشاء سهلة. إذا كان بإمكانك تحديد أوامرك في معلمة RegExp، فيمكنك فعل أي شيء باستخدام Hubot. هذه مساهمة عظيمة في ثقافة ChatOps.
ومن وحي ذلك، أردنا توفير نفس البساطة لمجتمعنا لتطوير روبوتات الدردشة التي يمكنها بالفعل معالجة اللغة الطبيعية وتنفيذ المهام، بنفس سهولة إنشاء روبوتات موجهة لـ RegExp.
لذا، وجدنا مشروعًا ساحرًا حقًا للبدء منه، Digital Ocean's Heartbot، لقطة حب لعميل الدردشة المفضل لديك =)
استنادًا إلى Heartbot، قدمنا بعض قوة البرمجة اللغوية العصبية (NLP) من فريق NaturalNode، وهي مجموعات رائعة من مكتبات معالجة اللغات الطبيعية المصممة للاستخدام في NodeJS.
وهكذا يحدث السحر ..
مرحبًا بك في HubotNatural ، وهو إطار عمل جديد مثير لروبوتات الدردشة يعتمد على Hubot وNaturalNode libs، مع بنية بسيطة وقابلة للتوسيع صممها فريق HeartBot التابع لشركة Digital Ocean، وتم تصميمه بالحب والرعاية بواسطة Rocket.Chat Team.
نأمل أن تستمتع بالمشروع وأن تجد بعض الوقت للمساهمة.
تم تصميم HubotNatural ليكون سهل التدريب والتوسيع. إذن ما عليك أن تفهمه بشكل أساسي هو أنه يحتوي على مجموعة YAML، حيث يمكنك تصميم تفاعلات chatbot الخاصة بك باستخدام تدوين YAML فقط.
يمكن أن تحتوي جميع تفاعلات YAML المصممة في المجموعة على معلماتها الخاصة، والتي ستتم معالجتها بواسطة فئة الحدث.
تمنح فئات الأحداث إمكانية توسيع HubotNatural. من خلال كتابة فصول الأحداث الخاصة بك، يمكنك منح برنامج الدردشة الآلي الخاص بك المهارات اللازمة للتفاعل مع أي خدمات تحتاجها.
يتم تحميل ملف YAML في scripts/index.js
، ويتم تحليله وتمريره إلى chatbot bind، والذي سيتم العثور عليه في scripts/bot/index.js
، وهي قشرة الروبوت، حيث تتم برمجة جميع تدفق المعلومات والتحكم فيها.
توجد مجموعة YAML في training_data/corpus.yml
ويبدو هيكلها الأساسي كما يلي:
trust : .85
interactions :
- name : salutation
expect :
- hi there
- hello everyone
- what's up bot
- good morning
answer :
- - Hello there $user, how are you?
- Glad to be here...
- Hey there, nice to see you!
event : respond
ماذا يعني بناء الجملة هذا:
trust
: الحد الأدنى لمستوى معين يجب أن يُرجعه المُصنف لتشغيل هذا التفاعل. القيمة هي من 0 إلى 1 (0% إلى 100%). إذا قام المصنف بإرجاع قيمة يقين أقل من trust
، فستستجيب الروبوتات بعقدة تفاعل الخطأ.interactions
: متجه يحتوي على الكثير من عقد التفاعل التي سيتم تحليلها. يجب أن يكون كل تفاعل مصمم لبرنامج الدردشة الآلي الخاص بك ضمن بنية كائن Interaction.node.name
: هذا هو الاسم الفريد للتفاعل الذي سيتم التعرف عليه من خلاله. لا تقم بإنشاء أكثر من تفاعل واحد بنفس سمة node.name
.expect
: هذه هي الجمل التي سيتم تقديمها لتدريب الروبوتات. يمكن أن تكون عبارة عن سلاسل أو متجهات كلمات رئيسية، مثل ['consume','use']
.answer
: الرسائل التي سيتم إرسالها للمستخدم إذا تم تصنيف المصنفات فوق مستوى الثقة. سيتم تحليل رسالة node.message
وإرسالها بواسطة فئة الحدث. من أجل استخدام سلاسل متعددة الأسطر داخل YAML، يجب عليك اتباع بناء جملة YAML Multiline Strings. يمكنك تحديد المتغيرات في الرسالة. افتراضيًا، يأتي HubotNatural مع متغيرات $user
و $bot
و $room
.event
: هو اسم فئة CoffeeScript أو JavaScript داخل scripts/events
، بدون امتداد الملف.يمكن كتابة فئات الأحداث لتوسيع مهارات برنامج الدردشة الآلية. يتلقون كائن التفاعل ويحللون الرسالة، مثل هذا:
class respond
constructor : (@interaction) ->
process : (msg) =>
sendMessages(stringElseRandomKey(@interaction.answer), msg)
module.exports = respond
المنشئ الأساسي هو عقدة @interaction
حتى تتمكن من الوصول إلى جميع السمات داخل التفاعل فقط باستخدام @interaction.attribute
. هنا يمكنك تحليل النصوص واستدعاء واجهات برمجة التطبيقات وقراءة الملفات والوصول إلى قواعد البيانات وكل ما تحتاجه.
قد ترغب في استخدام الدالة stringElseRandomKey
للحصول على عنصر عشوائي من القائمة، إذا كانت معلمتها عبارة عن قائمة، واستخدام الدالة sendMessages
لإرسال رسائل إلى مستخدم.
تأتي مكتبة NaturalNode مع نوعين من المصنفات، مصنف Naive Bayes المعروف باسم BayesClassifier
ووظائف LogisticRegressionClassifier
. بشكل افتراضي، يستخدم HubotNatural LogisticRegressionClassifier
. لقد جاء بنتائج أفضل في اختباراتنا.
ويوجد أيضًا أكثر من نوع واحد من الجذعية. يجب عليك ضبط الجذعية لتحديد لغتك. افتراضيًا، نستخدم PorterStemmerPt للغة البرتغالية، ولكن يمكنك العثور على الإنجليزية والروسية والإيطالية والفرنسية والإسبانية وغيرها من اللغات في NaturalNode libs، أو حتى كتابة نصوصك الخاصة بناءً على تلك اللغات.
ما عليك سوى التحقق من داخل node_modules/natural/lib/natural/stemmers/
.
لتغيير لغة Stemers، ما عليك سوى تعيين متغير البيئة HUBOT_LANG
كـ pt
و en
و es
وأي إنهاء لغة آخر يتوافق مع ملف Stemer داخل الدليل أعلاه.
لدينا ملف Dockerfile الذي يبني صورة خفيفة الوزن تعتمد على Linux Alpine مع كل محتوى المستودع حتى تتمكن من تحميل تلك الصورة إلى سجل عامل الإرساء ونشر برنامج الدردشة الآلي الخاص بك من هناك. إنه موجود في مجلد docker
.
يمكنك أيضًا استخدام ملف docker-compose.yml
لتحميل مثيل محلي لخدمات Rocket.Chat وMongoDB وHubotNatural، حيث يمكنك تغيير المعلمات إذا لزم الأمر.
يبدو ملف إنشاء عامل الإرساء كما يلي:
version : ' 2 '
services :
rocketchat :
image : rocketchat/rocket.chat:latest
restart : unless-stopped
volumes :
- ./uploads:/app/uploads
environment :
- PORT=3000
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- MAIL_URL=smtp://smtp.email
# - HTTP_PROXY=http://proxy.domain.com
# - HTTPS_PROXY=http://proxy.domain.com
depends_on :
- mongo
ports :
- 3000:3000
mongo :
image : mongo:3.2
restart : unless-stopped
volumes :
- ./data/db:/data/db
# - ./data/dump:/dump
command : mongod --smallfiles --oplogSize 128 --replSet rs0
mongo-init-replica :
image : mongo:3.2
command : ' mongo mongo/rocketchat --eval "rs.initiate({ _id: '' rs0 '' , members: [ { _id: 0, host: '' localhost:27017 '' } ]})" '
depends_on :
- mongo
hubot-natural :
build : .
restart : unless-stopped
environment :
- HUBOT_ADAPTER=rocketchat
- HUBOT_NAME='Hubot Natural'
- HUBOT_OWNER=RocketChat
- HUBOT_DESCRIPTION='Hubot natural language processing'
- HUBOT_LOG_LEVEL=debug
- HUBOT_CORPUS=corpus.yml
- HUBOT_LANG=pt
- RESPOND_TO_DM=true
- RESPOND_TO_LIVECHAT=true
- RESPOND_TO_EDITED=true
- LISTEN_ON_ALL_PUBLIC=false
- ROCKETCHAT_AUTH=password
- ROCKETCHAT_URL=rocketchat:3000
- ROCKETCHAT_ROOM=GENERAL
- ROCKETCHAT_USER=botnat
- ROCKETCHAT_PASSWORD=botnatpass
- HUBOT_NATURAL_DEBUG_MODE=true
volumes :
- ./scripts:/home/hubotnat/bot/scripts
- ./training_data:/home/hubotnat/bot/training_data
depends_on :
- rocketchat
ports :
- 3001:8080
يمكنك تغيير سمات المتغيرات ووحدات التخزين وفقًا لاحتياجاتك المحددة وتشغيل docker-compose up
في الوحدة الطرفية لبدء خدمة Rocketchat على http://localhost:3000
. تنبيه: يجب أن تتذكر أن hubot يجب أن يكون لديه مستخدم Rocketchat حقيقي تم إنشاؤه لتسجيل الدخول باستخدامه. لذا، في المرة الأولى التي تقوم فيها بتشغيل هذا، يجب عليك أولاً الانتقال إلى Rocketchat وإنشاء مستخدم جديد لـ hubot، وتغيير متغيرات ROCKETCHAT_USER
و ROCKETCHAT_PASSWORD
في ملف docker-compose.yml، ثم إعادة تحميل الخدمات باستخدام docker-compose stop && docker-compose up
لبدء كل شيء من جديد.
إذا كنت تريد تشغيل خدمة hubot-natural فقط لتوصيل مثيل Rocket.Chat قيد التشغيل بالفعل، فأنت تحتاج فقط إلى تذكر تعيين ROCKETCHAT_URL
على القيمة الصحيحة، مثل https://open.rocket.chat
.
من أجل استخدام Hubot Natural بشكل صحيح، بعد تشغيل أمر docker-compose up
، من الضروري القيام ببعض خطوات التكوين. للقيام بذلك، هناك خياران رئيسيان:
الأول هو تنفيذ الخطوات الموضحة في وثائق تكوين الروبوت يدويًا.
الخيار الثاني هو تنفيذ البرنامج النصي bot_config.py
، الموجود في الدليل الجذر للمشروع. سيؤدي ذلك إلى تكوين الروبوت تلقائيًا استنادًا إلى المتغيرات التالية المحددة في البرنامج النصي: admin_name, admin_password, bot_name
و bot_password
. من المهم أن تتذكر ضبط قيم هذه المتغيرات بشكل صحيح وفقًا للسياق. يجب أن تكون القيم المستخدمة في bot_name
و bot_password
هي نفسها المحددة في docker-compose.yml، وفي المتغيرين ROCKETCHAT_USER
و ROCKETCHAT_PASSWORD
على التوالي. والقيم المحددة في متغيرات admin_name
و admin_password
يجب أن تكون بيانات اعتماد مستخدم موجود مسبقًا على Rocketchat، لديه أذونات المسؤول.
لإنشاء مستخدم إداري تلقائيًا، قبل تنفيذ الخدمات، ما عليك سوى تحديد المتغيرين ADMIN_USERNAME
و ADMIN_PASS
لخدمة Rocketchat على docker-compose.yml
.
لنشر HubotNatural، عليك أولاً تثبيت hubot-generator:
npm install -g yo generator-hubot
بعد ذلك سوف تقوم باستنساخ مستودع HubotNatural:
git clone https://github.com/RocketChat/hubot-natural.git mybot
قم بتغيير "mybot" في أمر git clone أعلاه إلى اسم الروبوت الخاص بك، ثم قم بتثبيت ثنائيات hubot، دون تجاوز أي من الملفات الموجودة داخل المجلد:
cd mybot
npm install
yo hubot
_____________________________
/
// | Extracting input for |
//// _____ | self-replication process |
////// /_____ /
======= | [^_/ _ ] | /----------------------------
| | _ | ___@@__ | __
+===+/ /// _
| | _ /// HUBOT/ \
| ___/ / / / \
/ +---+
_ ___/ | |
| // | +===+
/ / | xx |
? Owner Diego < [email protected] >
? Bot name mybot
? Description A simple helpful chatbot for your Company
? Bot adapter rocketchat
create bin/hubot
create bin/hubot.cmd
conflict Procfile
? Overwrite Procfile ? do not overwrite
skip Procfile
conflict README.md
? Overwrite README.md ? do not overwrite
skip README.md
create external-scripts.json
create hubot-scripts.json
conflict .gitignore
? Overwrite .gitignore ? do not overwrite
skip .gitignore
conflict package.json
? Overwrite package.json ? do not overwrite
skip package.json
create scripts/example.coffee
create .editorconfig
الآن، لتشغيل برنامج الدردشة الآلي الخاص بك في Shell، يجب عليك تشغيل:
bin/hubot
انتظر دقيقة حتى تتم عملية التحميل، ومن ثم يمكنك التحدث إلى mybot.
ألقِ نظرة على المحولات لتشغيل الروبوت الخاص بك في منصات أخرى.
من الممكن تكوين Hubot Natural لإعادة توجيه المحادثة إلى شخص حقيقي، في اللحظات التي لا يتمكن فيها الروبوت من مساعدة المستخدمين بالقدر المطلوب. لتنشيط ميزة Live Transfer
وتكوينها، اتبع الخطوات الموضحة في وثائق تكوين النقل المباشر.
في نافذتك الطرفية، قم بتشغيل:
export HUBOT_ADAPTER=rocketchat
export HUBOT_OWNER=RocketChat
export HUBOT_NAME= ' Bot Name '
export HUBOT_DESCRIPTION= ' Description of your bot '
export ROCKETCHAT_URL=https://open.rocket.chat
export ROCKETCHAT_ROOM=GENERAL
export LISTEN_ON_ALL_PUBLIC=false
export RESPOND_TO_DM=true
export RESPOND_TO_LIVECHAT=true
export ROCKETCHAT_USER=catbot
export ROCKETCHAT_PASSWORD= ' bot password '
export ROCKETCHAT_AUTH=password
export HUBOT_LOG_LEVEL=debug
export HUBOT_CORPUS= ' corpus.yml '
export HUBOT_LANG= ' en '
bin/hubot -a rocketchat --name $HUBOT_NAME
يمكنك التحقق من مشروع محول hubot-rocketchat لمزيد من التفاصيل.
كمطورين لـ NodeJS، تعلمنا أن نحب Process Manager PM2، ونحن نشجعك حقًا على استخدامه.
npm install pm2 -g
قم بإنشاء ملف mybot.json
وقم بتعيين محتواه على النحو التالي:
{
"apps" : [{
"name" : " mybot " ,
"interpreter" : " /bin/bash " ,
"watch" : true ,
"ignore_watch" : [ " client/img " ],
"script" : " bin/hubot " ,
"args" : " -a rocketchat " ,
"port" : " 3001 " ,
"env" : {
"ROCKETCHAT_URL" : " https://localhost:3000 " ,
"ROCKETCHAT_ROOM" : " general " ,
"RESPOND_TO_DM" : true ,
"ROCKETCHAT_USER" : " mybot " ,
"ROCKETCHAT_PASSWORD" : " 12345 " ,
"ROCKETCHAT_AUTH" : " password " ,
"HUBOT_LOG_LEVEL" : " debug "
}
}
]
}
يمكنك أيضًا إنشاء أكثر من عملية واحدة باستخدام PM2، إذا كنت تريد على سبيل المثال تشغيل أكثر من مثيل واحد لروبوتك:
{
"apps" : [{
"name" : " mybot.0 " ,
"interpreter" : " /bin/bash " ,
"watch" : true ,
"ignore_watch" : [ " client/img " ],
"script" : " bin/hubot " ,
"args" : " -a rocketchat " ,
"port" : " 3001 " ,
"env" : {
"ROCKETCHAT_URL" : " https://localhost:3000 " ,
"ROCKETCHAT_ROOM" : " general " ,
"RESPOND_TO_DM" : true ,
"ROCKETCHAT_USER" : " mybot " ,
"ROCKETCHAT_PASSWORD" : " 12345 " ,
"ROCKETCHAT_AUTH" : " password " ,
"HUBOT_LOG_LEVEL" : " debug "
}
}, {
"name" : " mybot.1 " ,
"interpreter" : " /bin/bash " ,
"watch" : true ,
"ignore_watch" : [ " client/img " ],
"script" : " bin/hubot " ,
"args" : " -a rocketchat " ,
"port" : " 3002 " ,
"env" : {
"ROCKETCHAT_URL" : " https://mycompany.rocket.chat " ,
"ROCKETCHAT_ROOM" : " general " ,
"RESPOND_TO_DM" : true ,
"ROCKETCHAT_USER" : " mybot " ,
"ROCKETCHAT_PASSWORD" : " 12345 " ,
"ROCKETCHAT_AUTH" : " password " ,
"HUBOT_LOG_LEVEL" : " debug "
}
}
]
}
وبالطبع، يمكنك إجراء إعدادات إعدادات مجنونة لمنصات مختلفة، مثل facebook mensenger أو twitter أو telegram ;P.
يأتي Hubot مزودًا بما لا يقل عن 38 محولًا، بما في ذلك محول Rocket.Chat بالطبع.
للاتصال بمثيل Rocket.Chat الخاص بك، يمكنك تعيين متغيرات env، وملف configpm2 json الخاص بنا.
تحقق من محولات hubot الأخرى لمزيد من المعلومات.
في Rocket.Chat، نحن نحب ما نقوم به لدرجة أننا لا نستطيع أن ننسى شكر كل من جعل ذلك ممكنًا!
شكرًا يا شباب على هذا الإطار المذهل، تعيش hubots في قلب Rocket.Chat، ونوصي الجميع بالخروج من https://hubot.github.com والعثور على المزيد حول hubot!
إلى فريق NaturalNode، نتقدم بخالص الشكر "شكرًا جزيلاً لكم!! لقد أحببنا مشروعكم ونحن متحمسون للمساهمة!".
قم بالخروج https://github.com/NaturalNode/natural ودع عقلك يذهلك!
لا يمكننا أن نشكر Digital Ocean بما فيه الكفاية، ليس فقط على مشروع HeartBot الجميل هذا، ولكن أيضًا على جميع البرامج التعليمية الرائعة وجميع المساهمات في حركة OpenSource.
وأخيرًا وليس آخرًا، شكرًا لمجتمعنا الكبير من المساهمين والمختبرين والمستخدمين والشركاء وكل من يحب Rocket.Chat وجعل كل هذا ممكنًا.