Интеграция Weaviate для векторного хранилища AI в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция Weaviate для векторного хранилища AI в мобильном приложении
Средний
~3-5 дней
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Интеграция Weaviate для векторного хранилища AI в мобильном приложении

Weaviate — open-source векторная БД с GraphQL и REST API, встроенными модулями для автоматического создания эмбеддингов и семантического поиска. От Pinecone отличается возможностью self-hosting, более богатой схемой объектов и встроенным hybrid search из коробки.

Ключевые отличия от других векторных БД

В 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.

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:

# 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 предоставляет официальные клиенты для Python, TypeScript, Java, Go. На мобильном приложении — только HTTP-запросы к вашему бэкенду, не напрямую к Weaviate (по тем же соображениям безопасности, что и с Pinecone).

Бэкенд на Node.js/TypeScript:

import weaviate, { WeaviateClient } from 'weaviate-ts-client';

const client: WeaviateClient = weaviate.client({
    scheme: 'http',
    host: 'localhost:8080',
});

// Поиск — вызывается из REST-endpoint'а для мобильного клиента
async function search(query: string, userId: string) {
    return client.graphql.get()
        .withClassName('Document')
        .withHybrid({ query, alpha: 0.75 })
        .withTenant(`user_${userId}`)
        .withLimit(5)
        .withFields('content source _additional { score }')
        .do();
}

Этапы и сроки

Развёртывание Weaviate (cloud или self-hosted) → создание схемы с правильными типами → настройка мультитенантности → ingestion pipeline → бэкенд API для поиска → мобильный UI результатов → нагрузочное тестирование → мониторинг.

Интеграция Weaviate на существующем бэкенде — 2–3 недели. С нуля, self-hosted, с мобильным клиентом и UI — 4–6 недель.