Стандартний конфіг Rasa для української мови дає точність близько 50 % — на коротких фразах це означає, що кожен другий запит невірно розпізнається. Клієнти з високими вимогами до конфіденційності (медицина, фінанси) не можуть використовувати хмарні NLP-сервіси на кшталт Dialogflow або Google NL. Для них Rasa — єдиний варіант, але його потрібно правильно налаштувати. Ми робимо це понад 5 років: більше 20 проєктів, середнє підвищення точності з 50 % до 85 % за рахунок кастомного пайплайну та якісного датасету.
Чому Rasa краще Dialogflow для чутливих даних?
Rasa — self-hosted, Dialogflow — хмарний. Для компаній, де дані не повинні залишати сервер, різниця принципова. Rasa дає повний контроль над пайплайном: ви можете замінити будь-який компонент, додати свій токенізатор, використовувати кастомні моделі. Dialogflow ж обмежує вас вбудованими механізмами. При масштабуванні на 10 000+ діалогів на день Rasa обходиться дешевше в 3–4 рази за рахунок відсутності плати за запити.
| Характеристика | Rasa | Dialogflow |
|---|---|---|
| Розгортання | Self-hosted (ваш сервер) | Хмарне (Google) |
| Контроль даних | Повний | Обмежений |
| Вартість при 10 000 запитів/день | ~$200/міс (VPS) | ~$400/міс (Standard) |
| Точність на українській (з кастомним пайплайном) | 85 %+ | 80 % |
| Підтримка кастомних дій | Так (Python) | Так (Webhook, але повільніше) |
Як ми налаштовуємо Rasa для української мови?
Основна проблема — стандартний WhitespaceTokenizer погано працює з українською морфологією. Ми замінюємо його на SpacyNLP з моделлю uk_core_news_md та додаємо char n-gram фічі через CountVectorsFeaturizer. Ось продакшн-конфіг, який ми використовуємо:
language: uk pipeline: - name: SpacyNLP model: uk_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 Цей пайплайн дає 85 % точності на наборі з 20–50 інтентів. DIETClassifier з 150 епохами навчається за 5–10 хвилин на VPS з 4 ГБ RAM.
Як Rasa Core керує діалогом?
Rasa розділяє NLU (розуміння намірів) та Core (керування діалогом). Core працює на основі правил (rules.yml) та історій (stories.yml). Найчастіша помилка — намагатися описати всі сценарії через rules та отримати крихку систему, яка ламається на нестандартному порядку реплік.
Правило: жорсткі команди (скасувати, допомога, почати заново) — у rules. Багатокрокові сценарії з варіативністю — у stories. Rasa Core навчається на історіях та узагальнює сценарії, яких явно не бачив — це його головна перевага перед деревами рішень.
Custom Actions. Динамічні відповіді (статус замовлення, доступні слоти) реалізуються через action_server — окремий 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-канал на /webhooks/rest/webhook. Мобільний додаток відправляє POST-запит:
{ "sender": "user_device_id_or_session_uuid", "message": "текст повідомлення" } Відповідь — масив повідомлень, кожне з яких може бути текстом, зображенням, кнопками або кастомним payload.
На Android це стандартний Retrofit-виклик. Важливий момент: sender має бути стабільним ідентифікатором сесії — Rasa зберігає слоти (slots) між запитами в рамках одного sender. Якщо генерувати новий ID щоразу, контекст діалогу буде втрачатися.
Для продакшну Rasa не варто відкривати напряму в інтернет — перед ним ставимо nginx з rate limiting та аутентифікацією по токену.
Розгортання
Rasa Server + Action Server зручно запускати в Docker Compose. Модель навчається командою rasa train та монтується в контейнер. На слабкому VPS навчання 50 інтентів займає 5–10 хвилин — цілком прийнятно для CI/CD.
Rasa Enterprise (комерційна версія) додає аналітику та A/B тестування діалогів, але для більшості завдань достатньо open-source версії.
Що входить в роботу
- Аудит предметної області та збір прикладів реплік для NLU-датасету.
- Налаштування pipeline, навчання базової моделі, оцінка точності через
rasa test. - Розробка діалогових сценаріїв (rules + stories), custom actions.
- Інтеграція REST-каналу з мобільним клієнтом, налаштування інфраструктури.
- Документація та навчання вашої команди.
- Гарантійна підтримка 30 днів.
Орієнтири за термінами
Інтеграція з готовим Rasa-сервером — 3–4 дні. Повний цикл, включаючи навчання моделі з нуля, написання сценаріїв та розгортання — 2–4 тижні в залежності від кількості інтентів.
Зв'яжіться з нами для оцінки вашого проєкту. Отримайте консультацію з налаштування Rasa під вашу задачу.







