שילוב Rasa NLP עבור צ'אטבוטים למובייל
תצורת Rasa סטנדרטית ברוסית מניבה דיוק של כ-50% — בביטויים קצרים, המשמעות היא שכל בקשה שנייה מזוהה באופן שגוי. לקוחות עם דרישות סודיות מחמירות (רפואה, פיננסים) אינם יכולים להשתמש בשירותי NLP בענן כמו Dialogflow או Google NL. עבורם, Rasa היא האפשרות היחידה, אך היא דורשת כוונון נכון. אנו עוסקים בכך שנים רבות: למעלה מ-20 פרויקטים, שיפור ממוצע בדיוק מ-50% ל-85% באמצעות pipeline מותאם אישית ומערך נתונים איכותי.
למה Rasa עדיפה על Dialogflow עבור נתונים רגישים
Rasa מתארחת עצמאית, בעוד Dialogflow מבוססת ענן. עבור חברות שבהן הנתונים חייבים להישאר על השרת המקומי, ההבדל הוא מהותי. Rasa מעניקה שליטה מלאה על ה-pipeline: ניתן להחליף כל רכיב, להוסיף tokenizer משלך, ולהשתמש במודלים מותאמים אישית. Dialogflow מגבילה אותך למנגנונים מובנים. בקנה מידה של 10,000+ דיאלוגים ביום, Rasa זולה פי 3–4 בשל היעדר עמלות לפי בקשה.
| מאפיין | Rasa | Dialogflow |
|---|---|---|
| פריסה | אירוח עצמי (השרת שלך) | ענן (Google) |
| שליטה בנתונים | מלאה | מוגבלת |
| עלות ב-10,000 בקשות/יום | ~200$ לחודש (VPS) | ~400$ לחודש (Standard) |
| דיוק ברוסית (pipeline מותאם) | 85%+ | 80% |
| תמיכה בפעולות מותאמות אישית | כן (Python) | כן (Webhook, איטי יותר) |
כיצד אנו מגדירים את Rasa עבור רוסית
הבעיה המרכזית היא ש-WhitespaceTokenizer ברירת המחדל עובד בצורה גרועה עם המורפולוגיה הרוסית. אנו מחליפים אותו ב-SpacyNLP באמצעות מודל ru_core_news_md ומוסיפים מאפייני char n-gram דרך CountVectorsFeaturizer. הנה תצורת הייצור שבה אנו משתמשים:
---
language: ru
pipeline:
- name: SpacyNLP
model: ru_core_news_md
- name: SpacyTokenizer
- name: SpacyFeaturizer
- name: RegexFeaturizer
- name: LexicalSyntacticFeaturizer
- name: CountVectorsFeaturizer
- name: CountVectorsFeaturizer
analyzer: char_wb
min_ngram: 1
max_ngram: 4
- name: DIETClassifier
epochs: 150
- name: EntitySynonymMapper
- name: ResponseSelector
epochs: 100
- name: FallbackClassifier
threshold: 0.7
ambiguity_threshold: 0.1
---pipeline זה מניב דיוק של 85% על מערך של 20–50 כוונות. DIETClassifier עם 150 epochs מתאמן תוך 5–10 דקות על VPS עם 4 GB RAM.
כיצד Rasa Core מנהלת דיאלוג
Rasa מפרידה בין NLU (זיהוי כוונות) לבין Core (ניהול דיאלוג). Core פועלת על כללים (language: ru pipeline: - name: SpacyNLP model: ru_core_news_md - name: SpacyTokenizer - name: SpacyFeaturizer - name: RegexFeaturizer - name: LexicalSyntacticFeaturizer - name: CountVectorsFeaturizer - name: CountVectorsFeaturizer analyzer: char_wb min_ngram: 1 max_ngram: 4 - name: DIETClassifier epochs: 150 - name: EntitySynonymMapper - name: ResponseSelector epochs: 100 - name: FallbackClassifier threshold: 0.7 ambiguity_threshold: 0.1 ) וסיפורים (rules.yml). הטעות הנפוצה ביותר היא לנסות לתאר את כל התרחישים באמצעות stories.yml ולהגיע למערכת שבירה שקורסת על סדר אמירות לא סטנדרטי.
כלל: פקודות נוקשות (ביטול, עזרה, הפעלה מחדש) נכנסות ל-rules. תרחישים רב-שלביים עם שונות נכנסים ל-rules. Rasa Core לומדת מסיפורים ומכלילה תרחישים שלא נראו — זה היתרון המרכזי שלה על פני עצי החלטה.
פעולות מותאמות אישית. תגובות דינמיות (סטטוס הזמנה, משבצות פנויות) מיושמות דרך stories — שירות Python נפרד ש-Rasa קוראת לו דרך HTTP. אפליקציית המובייל אינה מתקשרת איתו ישירות:
class ActionCheckOrderStatus(Action):
def name(self) -> str:
return "action_check_order_status"
async def run(self, dispatcher, tracker, domain) -> list:
order_id = tracker.get_slot("order_id")
status = await order_service.get_status(order_id)
dispatcher.utter_message(text=f"Ваш заказ #{order_id}: {status}")
return [SlotSet("order_status", status)] כיצד לשלב את Rasa עם אפליקציית מובייל
Rasa Server מספק ערוץ REST בכתובת action_server. אפליקציית המובייל שולחת בקשת POST:
{ "sender": "user_device_id_or_session_uuid", "message": "текст сообщения" } התשובה היא מערך של הודעות, שכל אחת יכולה להיות טקסט, תמונה, כפתורים או payload מותאם אישית.
באנדרואיד, זו קריאת Retrofit סטנדרטית. חשוב: class ActionCheckOrderStatus(Action): def name(self) -> str: return "action_check_order_status" async def run(self, dispatcher, tracker, domain) -> list: order_id = tracker.get_slot("order_id") status = await order_service.get_status(order_id) dispatcher.utter_message(text=f"Ваш заказ #{order_id}: {status}") return [SlotSet("order_status", status)] חייב להיות מזהה סשן יציב — Rasa שומרת slots בין בקשות בתוך אותו sender. יצירת מזהה חדש בכל פעם תאבד את הקשר הדיאלוגי.
לייצור, אין לחשוף את Rasa ישירות לאינטרנט — אנו מציבים nginx בחזית עם הגבלת קצב ואימות token.
פריסה
Rasa Server + Action Server רצים בקלות דרך Docker Compose. המודל מאומן עם /webhooks/rest/webhook ומורכב לתוך הקונטיינר. על VPS קטן, אימון של 50 כוונות אורך 5–10 דקות — מקובל לחלוטין עבור CI/CD.
Rasa Enterprise (גרסה מסחרית) מוסיפה אנליטיקה ובדיקות A/B של דיאלוגים, אך עבור רוב המשימות הגרסה בקוד פתוח מספיקה.
מה כלול בעבודה שלנו
- ביקורת תחום ואיסוף אמירות לדוגמה עבור מערך נתוני ה-NLU.
- הגדרת pipeline, אימון מודל בסיסי, הערכת דיוק דרך
{ "sender": "user_device_id_or_session_uuid", "message": "текст сообщения" }. - פיתוח תרחישי דיאלוג (כללים + סיפורים), פעולות מותאמות אישית.
- שילוב ערוץ REST עם לקוח המובייל, הגדרת תשתית.
- תיעוד והדרכה לצוות שלך.
- תמיכה אחריות ל-30 יום.
לוחות זמנים
שילוב עם שרת Rasa קיים — 3–4 ימים. מחזור מלא כולל אימון מודל מאפס, כתיבת תרחישים ופריסה — 2–4 שבועות בהתאם למספר הכוונות.
צור קשר להערכת פרויקט. קבל ייעוץ על הגדרת Rasa למשימה שלך. תיעוד Rasa | ויקיפדיה: Rasa







