Реализация AI-рекомендаций товаров на сайте

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Реализация AI-рекомендаций товаров на сайте
Сложный
~1-2 недели
Часто задаваемые вопросы

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

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

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    956
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    947

Каждый третий посетитель интернет-магазина уходит без покупки из-за нерелевантных рекомендаций. Хуже того, показ однотипных товаров снижает доверие к площадке. На одном проекте — магазин электроники с 50 000 SKU — мы зафиксировали, что блок «похожие товары» на основе категорий выдавал почти одинаковые позиции: 8 из 8 — смартфоны той же марки. Click-through rate упал до 0.3%. Проблема не в отсутствии данных, а в выборе алгоритма. Content-based на атрибутах даёт узкую выдачу, коллаборативная фильтрация страдает от cold start, а гибрид требует грамотного микса. Мы реализовали системы рекомендаций для 15+ магазинов (оборот от 10 млн руб./мес) и нашли баланс: рост конверсии в среднем 18%, а для одного клиента — +34% за счёт внедрения ассоциативных правил «часто покупают вместе». Персонализация e-commerce — это не просто тренд, а необходимость для удержания клиентов.

Какой алгоритм рекомендаций выбрать?

Выбор зависит от данных и целей. Content-based ищет похожие по атрибутам — быстро запускается, но даёт однотипные результаты. Коллаборативная фильтрация (ALS) выявляет скрытые паттерны — точнее, но требует истории действий. Гибридный подход сочетает лучшее из обоих: на 25% больше кликов, чем чистый content-based. Для нового магазина без истории мы рекомендуем начинать с content-based на эмбеддингах, постепенно подключая ALS по мере накопления данных.

Алгоритм Требуемые данные Преимущества Недостатки Скорость внедрения
Content-based (эмбеддинги) Описания товаров Работает сразу, без истории Однотипные результаты 2–3 дня
Коллаборативная фильтрация (ALS) Поведение пользователей Высокая точность, скрытые паттерны Cold start для новых пользователей 1–2 недели
Гибридный микс Оба типа Лучший CTR на 20%+, сглаживает cold start Сложность настройки весов 2–3 недели

Почему гибридный подход эффективнее?

Он не страдает от cold start: новые товары получают рекомендации через эмбеддинги, а старые — через поведение пользователей. Разнообразие выше — блок не забивается одинаковыми позициями. Мы используем динамический микс: если у пользователя мало данных, делаем упор на content-based, и наоборот. На практике это даёт рост CTR на 15–20% по сравнению с однородной выдачей. Кроме того, гибрид позволяет увеличить средний чек на 12–15% за счёт кросс-продаж.

Структура данных и индексация

Для эмбеддингов собираем текстовое представление товара:

function buildProductText(product) {
  return [
    product.name,
    product.brand,
    product.category + ' > ' + product.subcategory,
    product.description?.slice(0, 500),
    product.tags?.join(', '),
    Object.entries(product.attributes || {})
      .map(([k, v]) => `${k}: ${v}`)
      .join(', '),
  ].filter(Boolean).join('\n');
}

async function indexProduct(product) {
  if (!product.active || product.stock === 0) return;
  const text = buildProductText(product);
  const { data: [{ embedding }] } = await openai.embeddings.create({
    model: 'text-embedding-3-small',
    input: text,
  });
  await db.query(`
    INSERT INTO product_embeddings (product_id, embedding, updated_at)
    VALUES ($1, $2::vector, NOW())
    ON CONFLICT (product_id) DO UPDATE
    SET embedding = $2::vector, updated_at = NOW()
  `, [product.id, JSON.stringify(embedding)]);
}

Индексация проходит при каждом обновлении товара. Эмбеддинги храним в pgvector — это даёт скорость поиска <10ms для 100К товаров.

Поиск похожих товаров

async function getSimilarProducts(productId, options = {}) {
  const { limit = 8, minPrice, maxPrice, inStockOnly = true } = options;
  const result = await db.query(`
    WITH source AS (
      SELECT pe.embedding, p.price, p.category_id
      FROM product_embeddings pe
      JOIN products p ON p.id = pe.product_id
      WHERE pe.product_id = $1
    )
    SELECT p.id, p.name, p.slug, p.price, p.main_image, p.rating, p.reviews_count,
           1 - (pe.embedding <=> source.embedding) AS similarity
    FROM product_embeddings pe
    JOIN products p ON p.id = pe.product_id
    CROSS JOIN source
    WHERE pe.product_id != $1 AND p.active = true
      AND ($2::boolean IS FALSE OR p.stock > 0)
      AND ($3::numeric IS NULL OR p.price >= $3)
      AND ($4::numeric IS NULL OR p.price <= $4)
    ORDER BY pe.embedding <=> source.embedding
    LIMIT $5
  `, [productId, inStockOnly, minPrice || null, maxPrice || null, limit]);
  return result.rows;
}

Добавили фильтры по цене и наличию — результаты всегда актуальны и соответствуют бизнес-правилам.

Ассоциативные правила: «часто покупают вместе»

Анализируем историю заказов за последние 90 дней через FP-Growth (быстрее Apriori на больших данных):

from mlxtend.frequent_patterns import fpgrowth, association_rules
import pandas as pd

def compute_frequently_bought_together():
    orders = fetch_orders_last_90_days()
    basket = orders.groupby(['order_id', 'product_id'])['product_id'] \
        .count().unstack().fillna(0)
    basket = basket.map(lambda x: 1 if x > 0 else 0)
    frequent_sets = fpgrowth(basket, min_support=0.005, use_colnames=True)
    rules = association_rules(frequent_sets, metric='lift', min_threshold=1.5)
    for _, rule in rules.iterrows():
        antecedent = list(rule['antecedents'])[0]
        consequent = list(rule['consequents'])[0]
        save_association(antecedent, consequent, rule['confidence'], rule['lift'])

Практическая польза: когда кладут в корзину смартфон, предлагаем чехол и стекло — конверсия в допродажу растёт на 40%. Для магазина одежды мы выявили, что покупатели джинсов часто берут ремень — это увеличило средний чек на 12%. Повышение лояльности за счёт релевантных предложений снижает затраты на ретаргетинг на 20–25%.

Персональные рекомендации через ALS

Используем implicit.ALS (64 фактора, 30 итераций) на поведенческой матрице (просмотр=1, корзина=3, покупка=10):

import implicit
from scipy.sparse import csr_matrix

def train_product_model(events):
    users_idx = {u: i for i, u in enumerate(events['user_id'].unique())}
    items_idx = {p: i for i, p in enumerate(events['product_id'].unique())}
    matrix = csr_matrix((
        events['weight'],
        (events['user_id'].map(users_idx), events['product_id'].map(items_idx))
    ))
    model = implicit.als.AlternatingLeastSquares(factors=64, iterations=30)
    model.fit(matrix.T)
    return model, users_idx, items_idx

Для каждого пользователя получаем топ-N товаров, смешивая с content-based для разнообразия.

Разнообразие рекомендаций (Diversity)

Блок из 8 одинаковых ноутбуков ухудшает UX. Механизм диверсификации пересортирует выдачу, штрафуя похожие категории:

function diversify(recommendations, diversityFactor = 0.3) {
  const selected = [recommendations[0]];
  const remaining = recommendations.slice(1);
  while (selected.length < 8 && remaining.length > 0) {
    const scores = remaining.map(candidate => {
      const maxSimilarity = Math.max(
        ...selected.map(s => categorySimilarity(s, candidate))
      );
      return { item: candidate, score: candidate.score * (1 - diversityFactor * maxSimilarity) };
    });
    scores.sort((a, b) => b.score - a.score);
    selected.push(scores[0].item);
    remaining.splice(remaining.indexOf(scores[0].item), 1);
  }
  return selected;
}

В результате в выдаче — товары разных категорий и ценовых сегментов. A/B тестирование показало, что разнообразная выдача увеличивает CTR на 22% без потери конверсии.

Как настраивается diversity на практике? Можно добавить вес оценки от популярности или маржинальности, чтобы балансировать релевантность и бизнес-показатели.

Процесс внедрения

  1. Анализ — изучаем ассортимент, сценарии поведения, данные.
  2. Проектирование — выбираем алгоритмы под задачи бизнеса.
  3. Прототип — запускаем на реальных данных, измеряем качество.
  4. A/B тест — сравниваем с текущей версией (или её отсутствием).
  5. Деплой и мониторинг — настраиваем дашборды, фиксируем базу.

Что входит в работу

  • Документация архитектуры и описание моделей
  • Обучение команды работе с системой
  • Дашборд ключевых метрик (CTR, конверсия, выручка)
  • Поддержка в течение месяца после запуска

Ориентировочные сроки

Компонент Срок
Content-based похожие товары (pgvector) 3–4 дня
Ассоциативные правила («часто покупают вместе») +2–3 дня
Персональные рекомендации (ALS) — Python-сервис +4–5 дней
Полная система + A/B + аналитика 3–4 недели

Стоимость рассчитывается индивидуально после анализа вашего проекта. Получите консультацию инженера — мы подготовим коммерческое предложение с точными сроками и этапами. Свяжитесь с нами, чтобы обсудить детали и начать повышать конверсию вашего магазина.

Интеграция AI: чат-боты, RAG, семантический поиск, рекомендации

В 8 из 10 проектов «AI-чат-бот» оказывается дорогой обёрткой над GPT-4o с системным промптом. Без доступа к реальным данным компании. Пользователь спрашивает «сколько стоит тариф Премиум» — бот галлюцинирует цену из воздуха. Спрашивает «когда придёт заказ» — получает вежливое «напишите в поддержку». Это не интеграция — это имитация. Мы за 5 лет внедрили RAG-решения в 30+ проектах: от интернет-магазинов до медицинских порталов. Гарантируем: полезная AI-помощь начинается там, где модель читает ваши документы, а не общие ответы.

Как мы строим RAG-системы?

Retrieval-Augmented Generation — стандартная архитектура: запрос → поиск релевантных фрагментов в векторной БД → вставка найденного в контекст → ответ модели. Но дьявол в деталях реализации. Разберём ключевые узлы, которые определяют качество.

Chunking. Резать документ на куски по 500 токенов без оглядки на структуру — гарантия потери смысла. Если разрез пришёлся на середину абзаца, контекст разрывается. Решение — рекурсивный RecursiveCharacterTextSplitter с overlap 10–15% для документации. Для контрактов и инструкций используем семантический сплиттер: выделяем заголовки, списки, блоки кода — каждый раздел становится независимым чанком. Разница в качестве поиска: на одном медицинском проекте precision вырос с 0.55 до 0.84 только за счёт правильной нарезки.

Модель эмбеддингов. Для русскоязычных текстов intfloat/multilingual-e5-large даёт заметный прирост точности против устаревшей text-embedding-ada-002. По нашим замерам, NDCG@10 на тестовой выборке из 10 000 пар «запрос-документ» на 12% выше. OpenAI text-embedding-3-large — хороший вариант для англоязычного контента, но для русского рекомендуем BAAI/bge-m3 или упомянутую e5-large.

Векторная БД. Если у вас уже стоит PostgreSQL — pgvector экономит ресурсы. Ставим расширение CREATE EXTENSION vector, добавляем колонку vector(1024), создаём HNSW-индекс. На проекте с 80 000 статей поддержки p95 поиска — 12 мс. Этого хватает. Для каталогов с миллионами единиц — Qdrant или Weaviate: нативный гибридный поиск и шардирование «из коробки».

Что даёт гибридный поиск?

Только векторный поиск слеп к точным совпадениям: артикулы «ABC-123», имена собственные, аббревиатуры теряются. Только полнотекстовый поиск не улавливает синонимы и перефразирования. Комбинация через RRF (Reciprocal Rank Fusion) даёт лучшее из двух миров: BM25 + векторный поиск, результаты смешиваются. На практике recall@20 растёт с 0.65 до 0.92 — разница заметна пользователю.

Reranking — финальный фильтр: top-20 кандидатов из гибридного поиска прогоняем через cross-encoder cross-encoder/ms-marco-MiniLM-L-6-v2. Он добавляет 50–100 мс к ответу, но relevance поднимает ещё на 5–10%. Без reranking чат-бот может показывать нерелевантные документы.

Семантический поиск на сайте

Поиск «удобные кожаные кресла» должен находить товары с описанием «мягкие стулья из натуральной кожи» — обычный LIKE-поиск не способен. Наша архитектура: при добавлении товара/поста автоматически генерируем эмбеддинг через multilingual-e5-large, сохраняем в pgvector. На запросе — эмбеддим его той же моделью, ищем ближайших соседей через cosine distance с HNSW-индексом. Для каталога из 100 000 позиций индекс строится 3 минуты, в памяти ~400 Мбайт (1536-мерные векторы). Cреднее время поиска — 20 мс.

Рекомендательные системы

Коллаборативная фильтрация («пользователи, похожие на вас, покупали X») требует истории — минимум 2–3 месяца данных с 1000+ активных пользователей. Для стартапов или малых проектов используем content-based: эмбеддинг текущего товара → поиск ближайших соседей по косинусной близости. Когда накапливается статистика (обычно 15–20 взаимодействий на пользователя), переключаемся на гибридную модель LightFM. Она объединяет и поведение, и признаки товаров. У нас в e-commerce проекте с 50 000 SKU гибридная модель повысила конверсию в рекомендательный блок на 18% (A/B-тест длился 2 недели).

Стриминг ответов

Пользователь не обязан ждать, пока модель сгенерирует весь текст — это убивает UX. Server-Sent Events (SSE) — протокол для стриминга токенов. OpenAI SDK поддерживает stream: true, возвращая AsyncIterator. На фронтенде — Vercel AI SDK (useChat) или самописный EventSource. Типичная ошибка: использовать WebSocket для однонаправленного стрима — SSE проще (меньше кода, встроенный реконнект). Стек: Node.js + SSE + React.

Оркестрация агентов

Простой чат-бот отвечает. Агент — выполняет действия: создаёт тикет в Jira, проверяет статус заказа в CRM, бронирует слот в календаре. Для оркестрации используем LangGraph: граф состояний, где каждый узел — вызов модели или инструмента. Vercel AI SDK useChat + tools для Next.js позволяет добавить интеграцию в 10 строк кода. Главная сложность — надёжность: модель иногда вызывает не тот инструмент или передаёт кривые параметры. Защита — Zod-схемы на каждый инструмент и structured outputs для гарантии JSON.

Что входит в работу

Этап Результат Срок
Аудит данных и бизнес-логики Карта источников, формат документов, оценка качества 1–2 дня
Прототип RAG или рекомендательной системы Демонстрация с метриками (recall, precision, latency) 1–2 недели
Интеграция в существующее веб-приложение API-эндпоинты, интерфейс для чат-бота/поиска 1–2 недели
A/B-тестирование и оптимизация Отчёт по метрикам (CTR, конверсия, hallucination rate) 1 неделя
Документация и обучение команды Руководство по эксплуатации, код-ревью 2–3 дня

Дополнительно: мы передаём исходный код векторизатора, дашборды мониторинга (Langfuse), доступ к админке для обновления базы знаний. Постпродакшн-поддержка — 1 месяц бесплатно.

Сроки

Задача Ориентировочный срок
RAG-чат-бот на базе существующей базы знаний 3–6 недель
Семантический поиск по каталогу 2–4 недели
Рекомендательная система с A/B-тестированием 6–10 недель
Мультиагентная система с интеграциями от 8 недель

Стоимость рассчитывается индивидуально после знакомства с проектом. Оценим ваш проект за 1 день. Свяжитесь с нами — расскажем, как превратить AI из игрушки в инструмент, который приносит прибыль.