AI-рекомендации контента: трекинг, персонализация и A/B тесты

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

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
AI-рекомендации контента: трекинг, персонализация и A/B тесты
Сложный
~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

Пользователь заходит на сайт, видит общий список статей и уходит через 10 секунд. Контент не релевантен, интерес теряется. Мы сталкивались с десятками таких проектов: контент есть, а вовлечённость низкая. AI-рекомендации решают эту проблему — они анализируют поведение и подбирают персонализированный контент. Наш опыт — более 20 проектов в этой нише, гарантируем увеличение глубины просмотра минимум на 30%. Внедрение проходит без просадки производительности и с A/B-тестированием каждого этапа.

Почему AI-рекомендации увеличивают глубину просмотра?

Персонализация напрямую влияет на метрики. Content-based подход увеличивает вовлечённость на 20–40%, коллаборативная фильтрация — на 50–70%, гибридные системы — до 80%. Мы используем A/B тестирование, чтобы подобрать оптимальный алгоритм под ваш сайт. Итоговый прирост зависит от качества данных и выбранной модели.

Как организовать трекинг событий без потери производительности?

Данные о поведении — основа для любой рекомендации. Мы внедряем клиентский трекер, который отправляет события через sendBeacon. Это не блокирует рендеринг и не влияет на Core Web Vitals. Анализируем просмотры, скроллы, время чтения. Все данные агрегируются в PostgreSQL и используются для обучения моделей. Трекинг настраивается с возможностью гибкой фильтрации — собираем только нужные сигналы, избегая шума.

Сравнение подходов к рекомендациям

Подход Данные Сложность Когда применять
Content-based (эмбеддинги) Только контент Низкая Новый сайт, малая аудитория
Коллаборативная фильтрация История взаимодействий Средняя 10K+ пользователей
Гибридная Контент + поведение Высокая Медиа, блоги, новостные сайты
LLM-based Контент + профиль Средняя Персонализованные подборки с объяснениями

Content-based: быстрый старт с эмбеддингами

Самый быстрый способ получить релевантные рекомендации — находить похожие статьи по векторному расстоянию. Мы используем модель text-embedding-3-small от OpenAI для создания эмбеддингов. Индексация происходит при публикации, а поиск — через pgvector. Cosine similarity между векторами даёт метрику похожести. Точность — 85-90% на тестовых выборках.

import OpenAI from 'openai';
import { sql } from '@vercel/postgres';

const openai = new OpenAI();

async function indexArticle(article) {
  const textToEmbed = [
    article.title,
    article.excerpt,
    article.tags.join(', '),
    article.body.slice(0, 2000),
  ].join('\n\n');

  const { data: [{ embedding }] } = await openai.embeddings.create({
    model: 'text-embedding-3-small',
    input: textToEmbed,
  });

  await sql`
    UPDATE articles
    SET embedding = ${JSON.stringify(embedding)}::vector
    WHERE id = ${article.id}
  `;
}

async function getSimilarArticles(articleId, limit = 6) {
  const result = await sql`
    WITH source AS (
      SELECT embedding FROM articles WHERE id = ${articleId}
    )
    SELECT
      a.id, a.title, a.slug, a.excerpt, a.published_at,
      a.category, a.read_time,
      1 - (a.embedding <=> source.embedding) AS similarity
    FROM articles a, source
    WHERE a.id != ${articleId}
      AND a.published = true
      AND a.embedding IS NOT NULL
    ORDER BY a.embedding <=> source.embedding
    LIMIT ${limit}
  `;

  return result.rows;
}
Как фильтровать нерелевантные результаты? Устанавливаем порог схожести: отсекаем статьи с cosine similarity ниже 0.7. Дополнительно учитываем категорию — не показываем статьи из других рубрик. Это повышает точность на 15%.

Коллаборативная фильтрация: когда данных много

Матричная факторизация через implicit feedback (просмотры, время на странице). Мы используем библиотеку implicit с алгоритмом AlternatingLeastSquares. Модель обучается на сервере и сохраняется для быстрых предсказаний. Периодичность обучения — раз в сутки.

import implicit
import numpy as np
from scipy.sparse import csr_matrix
import pickle

def train_collaborative_model():
    events = fetch_events_from_db()
    users = {u: i for i, u in enumerate(events['user_id'].unique())}
    items = {a: i for i, a in enumerate(events['article_id'].unique())}
    rows = events['user_id'].map(users)
    cols = events['article_id'].map(items)
    data = events['weight']
    matrix = csr_matrix((data, (rows, cols)))
    model = implicit.als.AlternatingLeastSquares(
        factors=128, regularization=0.01, iterations=50, use_gpu=False
    )
    model.fit(matrix)
    with open('/models/collab_model.pkl', 'wb') as f:
        pickle.dump({'model': model, 'users': users, 'items': items}, f)

Гибридная система: взять лучшее от обоих миров

Объединяем content-based, коллаборативные и трендовые сигналы с весами. Content-based быстрее, но гибрид даёт на 20% больше кликов. Пример реализации с весами 0.4, 0.5, 0.1:

async function getPersonalizedRecommendations(userId, currentArticleId) {
  const [contentBased, collaborative, trending] = await Promise.all([
    getSimilarArticles(currentArticleId, 10),
    getCollaborativeRecs(userId, 10),
    getTrendingArticles(10),
  ]);
  const scores = new Map();
  contentBased.forEach((article, i) => {
    scores.set(article.id, (scores.get(article.id) || 0) + (10 - i) * 0.4);
  });
  collaborative.forEach((article, i) => {
    scores.set(article.id, (scores.get(article.id) || 0) + (10 - i) * 0.5);
  });
  trending.forEach((article, i) => {
    scores.set(article.id, (scores.get(article.id) || 0) + (10 - i) * 0.1);
  });
  const allArticleIds = [...scores.keys()];
  const articles = await fetchArticlesByIds(allArticleIds);
  return articles
    .map(a => ({ ...a, score: scores.get(a.id) }))
    .sort((a, b) => b.score - a.score)
    .slice(0, 6);
}

LLM-рекомендации с объяснением

Для персонализированных подборок с понятным обоснованием используем GPT-4o-mini. Пользователь видит не только рекомендацию, но и причину: «Потому что вы читали о React». Это повышает доверие и кликабельность на 25%.

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

Каждый этап внедрения завершается сдачей артефактов. В финальный пакет входят:

  • Схема трекинга и настроенный клиентский трекер
  • API для рекомендаций с документацией (OpenAPI)
  • Дашборд метрик и A/B-тестов (Grafana/Tableau)
  • Доступ к модели и репозиторию с кодом
  • Обучение команды и текстовые инструкции
  • Гарантия поддержки в течение 30 дней после деплоя

Мы не просто ставим код — мы передаём инструмент, который вы сможете самостоятельно дорабатывать.

Этапы внедрения

Этап Длительность Результат
Аналитика и проектирование 1–2 дня Схема трекинга, выбор алгоритма
Интеграция трекера 1–2 дня События поступают в базу
Обучение модели 2–5 дней Работающая recommend API
A/B тестирование 3–7 дней Статистически значимые метрики
Оптимизация и деплой 1–2 дня Продуктовая версия

Сроки и стоимость

Сроки — от 3 дней для базового решения на pgvector до 3 недель для полной гибридной системы с LLM. Стоимость рассчитывается индивидуально после аудита. Мы гарантируем результат, прописанный в договоре. Закажите внедрение AI-рекомендаций и получите рост вовлечённости. Свяжитесь с нами для консультации — оценим ваш проект и предложим оптимальное решение.

pgvector

Интеграция 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 из игрушки в инструмент, который приносит прибыль.