AI-чат-бот для интернет-магазина: консультации, подбор товаров, предзаказы
  • Funktor

AI-чат-бот для интернет-магазина: консультации, подбор товаров, предзаказы

Введение: Почему чат-бот — это не экономия на поддержке, а увеличение конверсии

Большинство владельцев интернет-магазинов воспринимают чат-бота как способ сэкономить на зарплате оператора. Это ошибка. Хороший AI-чат-бот — это не замена человека, а инструмент увеличения конверсии. Пока оператор спит, едет домой или общается с другим клиентом, бот работает 24/7, консультирует, помогает выбрать товар, принимает предзаказы и собирает информацию о клиенте.

Средний показатель: чат-боты увеличивают конверсию на 10-30%, снижают нагрузку на поддержку на 40-60%, собирают в 3 раза больше данных о клиентах. Но только при условии, что это умный бот, а не простой скрипт с кнопками.

В этой статье мы разберём, как создать чат-бота, который действительно понимает вопросы клиентов, помогает выбрать товар, принимает заказы и интегрируется с вашей CRM. От архитектуры до обучения модели на русском языке.

Часть 1: Как AI-бот понимает вопросы на естественном языке

Архитектура NLP-бота для русского языка

Проблема русскоязычных чат-ботов в том, что большинство готовых решений (Dialogflow, Amazon Lex) плохо работают с русским языком, особенно с его морфологическим богатством. «Купить кофемашину», «кофемашина купить», «хочу кофемашину» — для человека это один и тот же запрос, для простого бота — три разных.

Решение: использовать современные языковые модели, предобученные на русском корпусе текстов. Лучшие варианты на 2024 год:

  1. ruBERT от DeepPavlov: Модель, специально обученная на русских текстах. Хорошо справляется с классификацией интентов.
  2. ruGPT-3 от SberAI: Генеративная модель, которая может создавать осмысленные ответы.
  3. Yandex GPT: Модель от Яндекса, интегрированная с Yandex Dialogues.

Техническая реализация: от текста к интенту

Шаг 1: Подготовка данных для обучения

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

# Структура датасета для обучения
data = [
    {"text": "сколько стоит доставка", "intent": "delivery_cost"},
    {"text": "какая стоимость доставки", "intent": "delivery_cost"},
    {"text": "доставка бесплатная?", "intent": "delivery_cost"},
    {"text": "есть ли скидки", "intent": "discounts"},
    {"text": "акции сейчас", "intent": "discounts"},
    {"text": "предложения со скидкой", "intent": "discounts"},
    # ... минимум 30-50 примеров на каждый интент
]

df = pd.DataFrame(data)

# Разделяем на тренировочную и тестовую выборку
train_df, test_df = train_test_split(df, test_size=0.2, random_state=42)

Шаг 2: Загрузка предобученной модели ruBERT

import torch
from transformers import BertTokenizer, BertForSequenceClassification
from transformers import Trainer, TrainingArguments

# Загружаем токенизатор и модель
tokenizer = BertTokenizer.from_pretrained('DeepPavlov/rubert-base-cased')
model = BertForSequenceClassification.from_pretrained(
    'DeepPavlov/rubert-base-cased',
    num_labels=len(df['intent'].unique())  # Количество наших интентов
)

# Токенизация данных
def tokenize_function(examples):
    return tokenizer(
        examples["text"],
        padding="max_length",
        truncation=True,
        max_length=128
    )

train_encodings = tokenizer(train_df['text'].tolist(), truncation=True, padding=True)
test_encodings = tokenizer(test_df['text'].tolist(), truncation=True, padding=True)

Шаг 3: Создание датасета для PyTorch

import torch

class IntentDataset(torch.utils.data.Dataset):
    def __init__(self, encodings, labels):
        self.encodings = encodings
        self.labels = labels
    
    def __getitem__(self, idx):
        item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}
        item['labels'] = torch.tensor(self.labels[idx])
        return item
    
    def __len__(self):
        return len(self.labels)

# Преобразуем метки в числовой формат
intent_to_id = {intent: i for i, intent in enumerate(df['intent'].unique())}
id_to_intent = {i: intent for intent, i in intent_to_id.items()}

train_labels = [intent_to_id[intent] for intent in train_df['intent']]
test_labels = [intent_to_id[intent] for intent in test_df['intent']]

train_dataset = IntentDataset(train_encodings, train_labels)
test_dataset = IntentDataset(test_encodings, test_labels)

Шаг 4: Обучение модели

training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=10,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=64,
    warmup_steps=500,
    weight_decay=0.01,
    logging_dir='./logs',
    logging_steps=10,
    evaluation_strategy="epoch"
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=test_dataset
)

trainer.train()

Извлечение сущностей (NER — Named Entity Recognition)

Помимо понимания интента, бот должен извлекать конкретные данные из запроса: названия товаров, размеры, цвета, цены. Для этого нужна NER-модель.

from transformers import BertTokenizerFast, BertForTokenClassification
from transformers import pipeline

# Загружаем модель для NER (предобученную на русском)
ner_tokenizer = BertTokenizerFast.from_pretrained('DeepPavlov/rubert-base-cased')
ner_model = BertForTokenClassification.from_pretrained(
    'DeepPavlov/rubert-base-cased',
    num_labels=7  # BIO-схема для сущностей
)

ner_pipeline = pipeline("ner", model=ner_model, tokenizer=ner_tokenizer)

def extract_entities(text):
    entities = ner_pipeline(text)
    
    # Группируем токены в сущности
    extracted = {}
    current_entity = ""
    current_type = ""
    
    for entity in entities:
        if entity['entity'].startswith('B-'):  # Beginning
            if current_entity:
                extracted[current_type] = current_entity.strip()
            current_type = entity['entity'][2:]
            current_entity = entity['word']
        elif entity['entity'].startswith('I-'):  # Inside
            if entity['word'].startswith('##'):
                current_entity += entity['word'][2:]
            else:
                current_entity += " " + entity['word']
    
    if current_entity:
        extracted[current_type] = current_entity.strip()
    
    return extracted

# Пример использования
text = "хочу купить кофемашину Delonghi за 30000 рублей"
entities = extract_entities(text)
# entities = {'PRODUCT': 'кофемашину Delonghi', 'PRICE': '30000 рублей'}

Часть 2: подбор товаров по параметрам — от простого фильтра до умного ассистента

Проблема: пользователь не знает, что ищет

Типичный диалог:

Пользователь: «Нужен подарок жене»
Обычный бот: «У нас 5000 товаров, воспользуйтесь фильтрами»
Умный бот: «Расскажите больше. Какой у неё характер? Какие хобби? Какой бюджет?»

Умный бот ведёт диалог как опытный продавец: задаёт уточняющие вопросы, предлагает варианты, учится на ответах.

Реализация диалогового подбора

Архитектура диалоговой системы:

class ProductRecommenderBot:
    def __init__(self):
        self.dialog_states = {}  # Состояния диалогов по user_id
        self.product_catalog = ProductCatalog()
        
    def process_message(self, user_id, message):
        # Получаем или создаём состояние диалога
        if user_id not in self.dialog_states:
            self.dialog_states[user_id] = {
                'state': 'start',
                'collected_data': {},
                'step': 0
            }
        
        state = self.dialog_states[user_id]
        
        # Определяем интент сообщения
        intent = self.classify_intent(message)
        
        # Обрабатываем в зависимости от состояния
        if state['state'] == 'start':
            return self.handle_start_state(user_id, message, intent)
        elif state['state'] == 'collecting_preferences':
            return self.handle_collecting_state(user_id, message, intent)
        elif state['state'] == 'showing_options':
            return self.handle_showing_state(user_id, message, intent)
            
    def handle_start_state(self, user_id, message, intent):
                            

Читайте также

Похожие статьи

Малому бизнесу: 3 digital-инструмента, которые реально окупаются в первый же месяц

Сайт-визитка с умной формой, AI-чат-бот в соцсетях, облачная CRM. Три digital-инструмента для малого бизнеса с …

  • Funktor

Отелям и хостелам: как автоматизировать бронирование и коммуникацию с гостями до, во время и после заезда

Сквозная автоматизация цикла гостеприимства для отелей и хостелов. Онлайн-бронирование, AI-чат-бот 24/7, автоматические цепочки сообщений. Увеличение …

  • Funktor

B2B-стартапам: как с минимальным бюджетом создать впечатление о крупной и технологичной компании

Как B2B-стартапу с минимальным бюджетом создать впечатление крупной технологичной компании. Презентационный лендинг, простая CRM, AI-бот …

  • Funktor

Contact

Обсудим ваш проект?

Мы специализируемся на комплексной разработке сайтов, внедрении систем искусственного интеллекта (AI) и настройке CRM-систем. Мы создаём не просто инструменты, а связанную экосистему для роста вашего бизнеса.