إطار عمل chatbot بسيط مكتوب بلغة Go، مع تكوينات بلغة YAML. الهدف من هذا المشروع هو إنشاء روبوتات دردشة بسيطة تعتمد على النصوص باستخدام عدد قليل من ملفات التكوين.
مصدر الإلهام لهذا المشروع جاء في الأصل من Flottbot وتجربتي في استخدام Rasa.
تثبيت
التوثيق
الروبوت الأول الخاص بك
الملف clf.yml
الملف fsm.yml
قم بتشغيل الروبوت الخاص بك
التفاعل مع الروبوت الخاص بك
الاستخدام
سطر الأوامر
عامل الميناء يؤلف
كوبيرنيتيس
يستورد
أمثلة
go get -u github.com/jaimeteb/chatto
عبر عامل الميناء:
docker pull jaimeteb/chatto:latest
راجع الوثائق للحصول على أمثلة وأدلة التكوين والمرجع .
يجمع Chatto بين اتساق آلة الحالة المحدودة ومرونة التعلم الآلي. وهو يتألف من ثلاثة مكونات رئيسية: المصنف، وآلة الحالة المحدودة، والامتدادات.
ستكون بنية الدليل الأساسية جدًا لـ Chatto هي التالية:
. └──data ├── clf.yml └── fsm.yml
ابدأ بإنشاء دليل data
بالإضافة إلى ملفات YAML.
mkdir datatouch data/clf.yml data/fsm.yml
يحدد ملف clf.yml كيفية تصنيف رسائل المستخدم إلى أوامر (نوايا). ابدأ بهذا التكوين البسيط جدًا:
تصنيف: - الأمر: النصوص "turn_on": - "تشغيل" - "تشغيل" - الأمر: النصوص "turn_off": - "إيقاف" - "إيقاف"
يحدد الملف fsm.yml الانتقالات بين الحالات، والأوامر التي تقوم بهذه التحولات، والإجابات التي سيتم إرسالها فيها. ابدأ بمحتويات الملف هذا:
التحولات: - من: - "الأولي" إلى: "on" الأمر: "turn_on" الإجابات: - النص: "قيد التشغيل". - من: - "تشغيل" إلى الأمر "الأولي": إجابات "turn_off": - النص: "إيقاف". - النص: ""الافتراضيات: غير معروف: "لا أستطيع فعل ذلك."
لبدء تشغيل الروبوت الخاص بك، قم بتشغيل:
تشاتو - بيانات المسار /
إذا كنت تستخدم Docker، فقم بتشغيل:
تشغيل عامل الميناء -هو - هي -e CHATTO_DATA=./data -v $PWD/data:/data جايميتيب/تشاتو:الأحدث تشاتو - بيانات المسار
للتفاعل مع الروبوت الخاص بك، قم بتشغيل:
chatto cli
هذا كل شيء! يمكنك الآن قول تشغيل أو تشغيل للانتقال إلى حالة التشغيل ، وإيقاف تشغيل أو إيقاف التشغيل للعودة إلى حالة التشغيل الأولية . ومع ذلك، لا يمكنك الانتقال من on إلى on ، أو من الحرف الأولي إلى الحرف الأولي أيضًا.
فيما يلي رسم تخطيطي لآلة الحالة المحدودة البسيطة هذه:
يمكنك دمج الروبوت الخاص بك مع Telegram وTwilio وSlack وأي شيء تريده
قم بتشغيل chatto
في الدليل الذي توجد به ملفات YAML الخاصة بك، أو حدد مسارًا لها باستخدام علامة --path
:
chatto --path ./your/data
للتشغيل على Docker، استخدم:
تشغيل عامل الميناء -ص 4770:4770 -e CHATTO_DATA=./your/data -v $PWD/your/data:/data جيميتيب/chatto
يمكنك استخدام أداة Chatto CLI عن طريق تنزيل أداة chatto cli
. تسهل واجهة سطر الأوامر (CLI) اختبار تفاعلات الروبوت لديك.
chatto cli --url "http://mybot.com" -المنفذ 4770
يمكنك استخدام Chatto على Docker Compose أيضًا. سيبدو docker-compose.yml
بالشكل التالي:
الإصدار: "3" الخدمات: chatto:image: jaimeteb/chatto:${CHATTO_VERSION}env_file: .envports: - المجلدات "4770:4770": - ${CHATTO_DATA}:/datadepends_on: - تحويلة - ريديس ext:image: odise/busybox-curl # مربع مشغول مع الشهاداتcommand: ext/extexpose: - 8770 مجلداً: - ${CHATTO_DATA}/ext:/ext ريديس:الصورة: bitnami/redis:6.0البيئة: - REDIS_PASSWORD=${STORE_PASSWORD} فضح: - 6379
يتطلب هذا ملف .env
ليحتوي على متغيرات البيئة الضرورية:
# Chatto configuration CHATTO_VERSION=latest CHATTO_DATA=./your/data # Extension configuration CHATTO_BOT_EXTENSIONS_EXTENSION_NAME_URL=http://ext:8770 # Redis CHATTO_BOT_STORE_HOST=redis CHATTO_BOT_STORE_PASSWORD=pass # Logs CHATTO_BOT_DEBUG=true
ستبدو بنية الدليل مع جميع الملفات كما يلي:
. ├── data │ ├── ext │ │ ├── ext │ │ └── ext.go │ ├── bot.yml │ ├── chn.yml │ ├── clf.yml | └── fsm.yml ├── docker-compose.yml └── .env
أخيرًا، قم بتشغيل:
عامل الإرساء يؤلف -d redis ext عامل الإرساء يؤلف -d chatto
يجب أن يتم تنفيذ خادم الامتدادات وفقًا للغته.
بالنسبة إلى ملفdocker-compose.yml
هذا، سيتعين عليك إنشاء ملحق Go أولاً:
go build -o data/ext/ext data/ext/ext.go
يجب تشغيل خادم الإضافات قبل تهيئة Chatto.
ضمن دليل deploy/kubernetes
يمكنك العثور على مثال للنشر:
عطوف | اسم | وصف |
---|---|---|
سر | chatto-config-secrets | يحتوي على الرموز المميزة التي سيستخدمها Chatto للحصول على الترخيص |
خريطة التكوين | chatto-config-envs | يحتوي على متغيرات البيئة لملف bot.yml |
خريطة التكوين | chatto-config-files | يحتوي على ملف clf.yml و fsm.yml |
النشر | chatto | نشر Chatto استنادًا إلى صورة jaimeteb/chatto Docker |
خدمة | chatto-service | خدمة لنشر chatto |
دخول | chatto-ingress | الدخول لخدمة chatto-service |
قم بتشغيل الأمر التالي للنشر على Kubernetes:
تطبيق kubectl -f ./deploy/kubernetes/
يتم توفير خادم بوت وحزمة عميل قابلة للاستيراد للسماح بالتضمين في التطبيق الخاص بك.
لتضمين الخادم:
الحزمة الرئيسية ( "flag""github.com/jaimeteb/chatto/bot")func main() { port := flag.Int("port", 4770, "حدد المنفذ المراد استخدامه.") المسار := flag.String ("المسار"، "."، "المسار إلى ملفات YAML.") flag.Parse() server := bot.NewServer(*path, *port) server.Run() }
لتضمين العميل:
الحزمة myserviceimport ("log""github.com/jaimeteb/chatto/bot") اكتب MyService struct { chatto bot.Client}func NewMyService(url string, port int) *MyService { return &MyService{chatto: bot.NewClient(url, ميناء)} }func (s *MyService) Submit(question *query.Question) error { Answers, err := s.chatto.Submit(question) if err != nil { return err } // طباعة الإجابات على stdoutfor _، الإجابة := إجابات النطاق { fmt.Println(answer.Text) }العودة صفر}
لقد قدمت بعض ملفات التكوين ضمن الأمثلة . انسخ المستودع وقم بتشغيل chatto
باستخدام المسار -path
للمثال المطلوب لاختباره (بالنسبة لتلك التي تستخدم الامتدادات، قم بتشغيل الامتدادات الخاصة بها أولاً).
المزيد عن هذه الأمثلة في الوثائق
Mood Bot - نسخة chatto من Rasa's Mood Bot قم بتحية الروبوت لبدء المحادثة.
Pokemon Search - ابحث عن Pokémon بالاسم أو الرقم.
Trivia Quiz - اكتب ابدأ لإجراء اختبار معلومات سريع.