FAQ-бот із семантичним пошуком у мобільному додатку
Питання користувача: «Як повернути товар?» — а в базі «Повернення коштів». Без семантики система мовчить. Наше рішення — embedding-based бот, який знаходить відповідь навіть при перефразуванні. За 10 років ми впровадили таких ботів у 50+ проектах — від fintech до e-commerce — і переконалися: embedding-пошук підвищує точність на 40% порівняно з LIKE-запитами. Якщо ви хочете отримати такий самий результат, зв'яжіться з нами для консультації.
Чому семантичний пошук кращий за точний збіг?
Простий варіант: користувач пише ключові слова, система шукає по базі через LIKE або Elasticsearch. Працює, коли користувач знає правильні терміни. Але в реальності люди формулюють по-різному. Для натуральних запитань потрібен embedding-пошук. Кожне запитання з бази і кожен запит користувача перетворюється на вектор, шукаємо найближчого сусіда за косинусною відстанню.
from openai import OpenAI import numpy as np client = OpenAI() def embed(text: str) -> list[float]: response = client.embeddings.create( model="text-embedding-3-small", input=text ) return response.data[0].embedding def find_best_faq(query: str, faq_embeddings: dict) -> tuple[str, float]: query_vec = np.array(embed(query)) best_score = -1 best_key = None for key, vec in faq_embeddings.items(): score = np.dot(query_vec, np.array(vec)) / ( np.linalg.norm(query_vec) * np.linalg.norm(np.array(vec)) ) if score > best_score: best_score = score best_key = key return best_key, best_score Поріг score < 0.75 — відповідаємо «не знайшов відповідної відповіді, уточніть запитання». Без порогу бот буде видавати нерелевантні відповіді з переконливим виглядом.
Деталі про вибір порогу
Експериментально підібрано, що косинусна відстань з порогом 0,75 дає найкращий баланс precision/recall для типових ботів.Як ми будуємо базу питань для високої точності?
Кожен запис: запитання (або кілька формулювань), відповідь, категорія, теги. Кілька формулювань одного запитання покращують recall при пошуку. Embeddings для бази питань обчислюються один раз при завантаженні та кешуються в Redis. При оновленні бази — інвалідуємо кеш і перераховуємо. Це знижує навантаження на API та прискорює відповідь до 50 мс.
Як влаштована архітектура кешування?
Redis використовується для зберігання попередньо обчислених embeddings та гарячих запитів. Ми налаштовуємо TTL для кожного ключа — зазвичай 24 години. При зміні бази ключі інвалідуються через publish/subscribe. Це дозволяє підтримувати актуальність без перезавантаження сервера. Для embedding-моделі ми використовуємо OpenAI text-embedding-3-small з розмірністю 1536. Як показало дослідження Forbes 2022, це забезпечує оптимальне співвідношення швидкості та якості.
Порівняння підходів до пошуку
| Метод | Точність | Швидкість | Складність впровадження |
|---|---|---|---|
| LIKE-запити | 30–50% | ~10 мс | Низька |
| Elasticsearch (повнотекстовий) | 60–70% | ~20 мс | Середня |
| Embedding (семантичний) | 85–95% | ~50–100 мс | Висока |
Embedding-пошук дає на 40% більше релевантних відповідей, ніж LIKE, і в 1.4 рази краще за Elasticsearch. Для бізнесу це означає скорочення часу відповіді на 40% та зниження навантаження на підтримку, що дає економію до $5000 на місяць для середнього проекту. Рекомендуємо його для будь-якого бота з більш ніж 50 запитаннями.
Хочете впровадити семантичний пошук? Напишіть нам, і ми підберемо оптимальне рішення для вашого бізнесу.
Що всередині мобільного UI: категорії та вільний ввід
Для бота ефективна комбінація: категорії-кнопки при старті діалогу + вільний ввід. Користувач відкриває чат → бачить 4–6 категорій («Доставка», «Оплата», «Повернення», «Акаунт») → тапає потрібну → бот пропонує топ-3 запитання в категорії у вигляді чіпів. Якщо жодне не підходить — пише своїми словами.
Такий UX знижує навантаження на NLP і дає користувачеві структуру. На практиці 70% користувачів знаходять відповідь за 2–3 тапи, не вводячи жодного слова. Кнопка «Це допомогло?» під кожною відповіддю — обов'язкова. Негативні оцінки формують список питань для доопрацювання бази.
Етапи розробки бота
| Етап | Тривалість | Що робимо |
|---|---|---|
| Аналітика | 1–2 дні | Збір реальних питань із звернень, категоризація, пріоритезація |
| Проектування | 1 день | Архітектура даних, вибір моделі embedding, налаштування порогу релевантності |
| Розробка | 2–4 дні | Серверна частина (API на Python), мобільний UI з категоріями та чіпами, інтеграція кешу (Redis) |
| Тестування | 1–2 дні | A/B тест з реальними користувачами, вимірювання частки знайдених відповідей |
| Деплой | 1 день | Публікація в App Store та Google Play, налаштування аналітики (Firebase) |
Що входить у роботу?
Ми надаємо повну документацію щодо інтеграції, навчання команди замовника та гарантійну підтримку протягом 3 місяців. Такий підхід забезпечує швидкий запуск і мінімізацію ризиків. У підсумку ви отримуєте:
- Формування бази питань (до 200 запитань)
- Налаштування embedding-моделі та порогів
- Розробка UI (категорії, чіпи, історія)
- Інтеграція з кешуванням Redis
- Аналітика невідповідених запитів
- Документація та навчання команди
Терміни та вартість
Бот із семантичний пошуком на готовій базі — 2–4 дні. З розробкою структури бази, категоризацією та аналітикою — до 1 тижня. Наша команда має 10+ років досвіду в мобільній розробці та виконала більше 50 проектів з чат-ботами. Ми гарантуємо якість та підтримку після запуску. Кожен проект індивідуальний: фінальний термін і вартість розраховуються після аудиту ваших даних. Отримайте консультацію — напишіть нам, і ми оцінимо ваш проект під ключ.
Як впровадити бота самостійно: покрокова інструкція
- Зберіть 50–100 реальних запитань від користувачів.
- Сформуйте відповіді та категоризуйте їх.
- Обчисліть embeddings за допомогою OpenAI.
- Збережіть вектори в Redis.
- Реалізуйте пошук за косинусною відстанню.
- Інтегруйте UI з категоріями та чіпами.
- Протестуйте на реальних користувачах.







