Інтеграція Weaviate для векторного сховища AI в мобільному застосунку
Ми постійно стикаємося з ситуацією: дані користувачів — приватні документи, повідомлення, медіа — потрібно шукати не за ключовими словами, а за змістом. Векторні бази даних вирішують це завдання, але вибір конкретного рішення впливає на архітектуру, вартість і масштабованість. Weaviate — open-source векторна БД з GraphQL і REST API, вбудованими модулями для автоматичного створення ембеддингів і семантичного пошуку. Від Pinecone відрізняється можливістю self-hosting, багатшою схемою об'єктів і вбудованим hybrid search з коробки.
Що робить Weaviate зручним для мобільних AI-застосунків
Мобільні застосунки працюють з різними типами контенту: текст, зображення, аудіо. Weaviate зберігає об'єкти з гнучкою схемою — ви визначаєте поля, їх типи та зв'язки. Це ближче до документної БД, ніж до чистого векторного сховища. Кожен об'єкт має ідентифікатор, властивості та вектор.
# Створення класу в Weaviate
client.schema.create_class({
"class": "Document",
"vectorizer": "text2vec-openai", # автоембеддинги при записі
"moduleConfig": {
"text2vec-openai": {
"model": "text-embedding-3-small",
"dimensions": 1536
}
},
"properties": [
{"name": "content", "dataType": ["text"]},
{"name": "source", "dataType": ["text"]},
{"name": "userId", "dataType": ["text"]},
{"name": "language", "dataType": ["text"]}
]
})
Модуль text2vec-openai — Weaviate сам створює ембеддинг при додаванні об'єкта. Не потрібно окремо викликати Embeddings API перед upsert. Зручно, але потрібно передати ключ OpenAI в конфіг Weaviate. Якщо дані не можна відправляти у зовнішні API — використовуйте text2vec-transformers з локальною моделлю або генеруйте ембеддинги на своїй стороні.
Hybrid Search: BM25 + векторний пошук в одному запиті
Головна перевага Weaviate — hybrid search нативно. Об'єднує keyword-пошук (BM25) і семантичний пошук через параметр alpha:
{
Get {
Document(
hybrid: {
query: "скидання пароля",
alpha: 0.75 # 0 = тільки BM25, 1 = тільки векторний
}
where: {
path: ["userId"]
operator: Equal
valueText: "user_42"
}
limit: 5
) {
content
source
_additional { score explainScore }
}
}
}
alpha: 0.75 — 75% ваги у векторного пошуку, 25% у BM25. Оптимальне значення підбирається під конкретний корпус, але 0.7–0.8 працює добре для більшості випадків. Це те, що в pgvector доводиться реалізовувати самому через об'єднання двох запитів. У Weaviate — один виклик.
Self-hosted Weaviate для приватних даних
Якщо дані не можна відправляти в хмару — Weaviate розгортається в Docker з self-hosted:
# docker-compose.yml
services:
weaviate:
image: semitechnologies/weaviate:1.24.0
ports:
- "8080:8080"
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
DEFAULT_VECTORIZER_MODULE: 'none' # ембеддинги створюємо самі
CLUSTER_HOSTNAME: 'node1'
volumes:
- weaviate_data:/var/lib/weaviate
При self-hosting ембеддинги генеруємо на нашому бекенді (локальна модель або API) і передаємо вектор явно при додаванні об'єкта.
Мобільний клієнт і мультитенантність
Weaviate 1.20+ підтримує нативну мультитенантність через tenants. Це продуктивніше, ніж фільтрація за userId:
# Створюємо тенанта (один раз при реєстрації користувача)
client.schema.add_class_tenants("Document", [{"name": f"user_{user_id}"}])
# Додаємо об'єкт в тенант користувача
client.data_object.create(
data_object={"content": chunk, "source": filename},
class_name="Document",
tenant=f"user_{user_id}",
vector=embedding # якщо vectorizer = none
)
# Пошук в тенанті користувача
result = client.query.get("Document", ["content", "source"]) \
.with_hybrid(query=user_query, alpha=0.75) \
.with_tenant(f"user_{user_id}") \
.with_limit(5) \
.do()
При ввімкненій мультитенантності кожен тенант зберігається в окремому шарді — пошук не сповільнюється при зростанні кількості користувачів.
Чому варто обрати Weaviate замість Pinecone?
Ми порівняли обидва рішення на реальних проєктах. Weaviate дає повний контроль над даними (open-source, можна хостити де завгодно) і не обмежує в розмірі схеми об'єктів. Pinecone швидший у старті — не потрібно керувати інфраструктурою, але він дорожчий при масштабуванні (плата за пропускну здатність та обсяг). У таблиці — коротке порівняння:
| Критерій | Weaviate | Pinecone |
|---|---|---|
| Ліцензія | Open-source (BSD-3) | Пропрієтарна |
| Self-hosting | Так | Ні |
| Схема об'єктів | Гнучка, з типами полів | Плоска (тільки id, вектор, метадані) |
| Hybrid search | Вбудований (BM25 + вектор) | Тільки векторний |
| Мультитенантність | Нативна (шарди) | Через фільтрацію |
| Вартість для 1M векторів | Безкоштовно (self-hosted) | Плата за обсяг |
Для мобільного AI-застосунку з високими вимогами до приватності Weaviate — оптимальний вибір. Замовте оцінку вашого проєкту — ми допоможемо підібрати архітектуру.
Типові помилки при інтеграції Weaviate
| Помилка | Рішення |
|---|---|
| Ігнорування індексів на властивостях | Додавати індекси на частофільтровані поля (userId, source) |
| Невірний підбір alpha | Починати з 0.75 і тестувати на вашому корпусі; якщо запити короткі — збільшувати BM25 (alpha < 0.5) |
| Відсутність кешування ембеддингів | Кешувати вектори на бекенді, щоб не викликати модель повторно для однакових текстів |
Як інтегрувати Weaviate в мобільний застосунок?
Етапи роботи:
- Аналіз вимог — визначаємо типи даних, обсяг, частоту запитів, вимоги до приватності.
- Проєктування схеми — класи, властивості, індекси, налаштування модулів векторизації.
- Розгортання — вибір хмарної інфраструктури (AWS, GCP, Azure) або self-hosted на вашому сервері.
- Ingestion pipeline — завантажуємо існуючі документи, генеруємо ембеддинги, налаштовуємо batch import для швидкості.
- Бекенд API — GraphQL-ендпоінти для мобільного клієнта з авторизацією та мультитенантністю.
- Мобільний UI — інтерфейс пошуку з прев'ю результатів, фільтрацією та сортуванням.
- Навантажувальне тестування — перевірка продуктивності при 1000+ запитів на секунду.
- Моніторинг і підтримка — логування, метрики, SLA.
Що входить в роботу?
- Проєктування схеми класів Weaviate під ваш датасет.
- Деплой Weaviate (cloud або self-hosted) з конфігурацією безпеки.
- Налаштування модулів векторизації (text2vec, transformers, custom).
- Реалізація hybrid search з підбором alpha.
- Впровадження мультитенантності для багатокористувацьких застосунків.
- Бекенд API (Node.js/Python) з авторизацією та кешуванням.
- Інтеграція з мобільним застосунком (iOS/Android/Flutter).
- Документація з розгортання та експлуатації.
Орієнтовні терміни та вартість
Інтеграція на існуючий бекенд займає від 2 до 3 тижнів. Проєкт з нуля (self-hosted, мобільний застосунок, UI) — від 4 до 6 тижнів. Вартість розраховується індивідуально після аудиту вашого проєкту. Ми виконали понад 30 проєктів з векторними БД, гарантуємо стабільну роботу та повну документацію.
Офіційна документація Weaviate: Weaviate vector database
Отримайте консультацію — наші інженери зв'яжуться з вами протягом дня та запропонують оптимальне рішення.







