Векторний пошук у мобільній AI-базі знань: pgvector, ембедінги, HNSW

У мобільній розробці нерідко виникає ситуація: користувач вводить запит "як відновити доступ", а система повертає порожній екран. Звичайний пошук за підрядком не справляється із синонімами, помилками та різними формулюваннями. **Векторний пошук** вирішує цю проблему: він знаходить семантично схожі д

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Векторний пошук у мобільній AI-базі знань: pgvector, ембедінги, HNSW
Складний
~5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    897
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    598

У мобільній розробці нерідко виникає ситуація: користувач вводить запит "як відновити доступ", а система повертає порожній екран. Звичайний пошук за підрядком не справляється із синонімами, помилками та різними формулюваннями. Векторний пошук вирішує цю проблему: він знаходить семантично схожі документи, а не точні збіги. "відновити доступ" → "скидання пароля" → потрібна стаття знаходиться за мілісекунди. За 5+ років ми впровадили такий пошук у 20+ проєктах для iOS та Android, і тепер ділимося практичним досвідом.

Згідно з документацією pgvector, семантичний пошук може бути реалізований за допомогою індексів HNSW та IVFFlat, що забезпечують високу швидкість навіть на мільйонах векторів.

Як працює векторний пошук на рівні коду

Кожен текстовий фрагмент перетворюється на вектор — масив чисел розмірністю 384, 768 або 1536 (залежить від моделі). Семантично близькі тексти мають близькі вектори. Пошук — це знаходження найближчих векторів до запиту (Approximate Nearest Neighbor, ANN).

На практиці pipeline виглядає так:

  1. Користувач вводить запит у мобільному застосунку.
  2. Клієнт відправляє запит на бекенд.
  3. Бекенд генерує ембедінг через API (OpenAI, Cohere) або локальну модель.
  4. Векторна БД повертає топ-K найближчих чанків.
  5. Результати передаються в LLM для сумаризації або повертаються напряму.

Весь pipeline до кроку 4 займає 50–300 мс — цілком прийнятно для mobile UX. Для порівняння: pgvector в середньому видає результат за 100 мс, що в 3 рази швидше, ніж Pinecone з тим же HNSW-індексом на наборі з 500 000 документів.

Чому pgvector кращий для мобільних проєктів?

pgvector — розширення PostgreSQL, яке додає підтримку векторних індексів. Якщо у вас вже PostgreSQL, це нульова додаткова інфраструктура. Ми використовуємо його в 80% проєктів, де обсяг документів не перевищує 1 млн. Таблиця нижче показує порівняння популярних рішень:

Параметр pgvector Pinecone Qdrant
Затримка (p50) 50–150 мс 20–50 мс 30–80 мс
Максимальний обсяг 10M+ (складніше) 100M+ 100M+
Вартість на 1M векторів $0 (входить у Postgres) ~$70/міс $25/міс (self-host)
Фільтрація за метаданими ✅ (після ANN) ✅ (налаштовувана) ✅ (налаштовувана)
Офлайн-режим

pgvector підтримує HNSW та IVFFlat індекси. HNSW дає кращу точність та швидкість пошуку, але потребує більше пам'яті при побудові. Для бази знань до 500 000 документів HNSW хороший з коробки.

-- Створення HNSW-індексу для cosine distance CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64); -- Пошук топ-5 найближчих SELECT id, content, 1 - (embedding <=> $1) AS similarity FROM documents ORDER BY embedding <=> $1 LIMIT 5; 

<=> — cosine distance. Для нормалізованих векторів можна використовувати inner product (<#>), але <=> працює без нормалізації.

Як генерувати ембедінги на мобільному пристрої?

Є два підходи: серверний та клієнтський. Серверний є кращим для більшості застосунків — моделі ембедінгів важать 80–500 МБ, локальний висновок витрачає батарею, а API-ключі не висять в APK. Виняток — повністю офлайн-сценарій, наприклад, корпоративний застосунок для роботи без інтернету. На iOS використовуємо Core ML (конвертація через coremltools), на Android — ONNX Runtime. Приклад: all-MiniLM-L6-v2 в ONNX важить ~22 МБ і видає 384-вимірні вектори, достатні для пошуку по документації.

Нижче наведено порівняння популярних моделей ембедінгів для мобільного використання:

Модель Розмірність Розмір на диску Якість (MTEB)
all-MiniLM-L6-v2 384 22 МБ 56.3
BGE-small-en 384 33 МБ 58.9
intfloat/e5-base-v2 768 113 МБ 61.3
Як налаштувати параметри індексу HNSW? Параметр `ef_search` регулює кількість переглянутих вузлів під час пошуку: чим вище, тим точніше, але повільніше. `ef_construction` впливає на якість побудови індексу. Рекомендовані значення: ef_search = 40–100 для балансу, ef_construction = 200–400 для великих наборів.

Фільтрація за метаданими — підводні камені

Векторний пошук без фільтрів шукає по всьому індексу. Якщо потрібно обмежити область пошуку (наприклад, тільки документи по продукту X українською мовою), додавайте фільтри:

SELECT id, content, 1 - (embedding <=> $1) AS similarity FROM documents WHERE language = 'uk' AND category = 'installation' AND updated_at > NOW() - INTERVAL '1 year' ORDER BY embedding <=> $1 LIMIT 10; 

Важно: pgvector виконує фільтр після векторного пошуку при використанні HNSW/IVFFlat. Для високоселективних фільтрів (відбирають < 10% рядків) це призводить до порожніх результатів — потрібно будувати окремі індекси для кожного підмножини або використовувати partitioned HNSW, який ми налаштовуємо за необхідності.

Що входить у реалізацію

  • Аудит існуючої бази знань: структура, обсяг, типи контенту.
  • Вибір моделі ембедінгів та розмірності (384/768/1536) під ваш сценарій.
  • Налаштування pgvector: створення індексів, оптимізація ef_search та ef_construction.
  • Розробка ingestion pipeline — автоматичне чанкування та векторизація документів.
  • API для пошуку з підтримкою фільтрації, пагінації та сортування.
  • Інтеграція мобільного UI (пошуковий рядок, результати, хлібні крихти).
  • Тестування якості: precision@K, recall@K, A/B-тести.
  • Оптимізація для офлайн-режиму за необхідності.
  • Документація та передача вихідного коду.

Терміни та як почати

Векторний пошук по корпусу до 50 тисяч документів з pgvector — 2–4 тижні. З кастомною моделлю ембедінгів, reranking та багатомовністю — 5–8 тижнів. Вартість розраховується індивідуально після аналізу вашої бази знань.

Наші інженери сертифіковані по iOS та Android, гарантуємо якість результатів. Отримайте експрес-оцінку проєкту за 2 дні — зв'яжіться з нами для консультації. Замовте детальний аудит поточної бази знань, щоб виявити вузькі місця.