Нейропоиск образовательных курсов
на платформе Kursograf.ru
Описание принципов работы, архитектуры и пользовательского интерфейса системы интеллектуального подбора курсов на основе GigaChat API (ПАО Сбербанк).
Обзор системы
Нейропоиск — функция платформы Kursograf.ru, позволяющая пользователям находить подходящие онлайн-курсы из каталога путём описания своих целей, опыта и предпочтений на естественном языке.
Ключевые характеристики
| Параметр | Значение |
|---|---|
| Провайдер ИИ (основной) | GigaChat B2B API — ПАО Сбербанк |
| Провайдер ИИ (резервный) | DeepSeek Chat API |
| Модель | GigaChat |
| Объём каталога | 7 500+ курсов от 300+ школ |
| Кандидатов для анализа | до 40 курсов на запрос |
| Рекомендаций в ответе | 5–8 курсов |
| Среднее время ответа | 3–8 секунд |
| Версия системы | 1.3.0 от 05.03.2026 |
Где размещён нейропоиск
- Главная страница (kursograf.ru) — основной блок поиска в hero-секции
- Страницы курсов (/vse-kursy/…) — блок «Найдите похожие курсы» перед описанием
- Шорткод
[kg_ai_search]— может быть размещён на любой странице сайта
Как это работает
Система использует подход RAG (Retrieval-Augmented Generation) — генерация ответа с контекстом из базы данных. Это позволяет нейросети работать только с актуальными данными каталога, а не «придумывать» курсы.
Интерфейс пользователя
Виджет нейропоиска состоит из трёх состояний: поле ввода, загрузка, результаты.
Элементы интерфейса
| Элемент | Описание | Обязательный |
|---|---|---|
| Поле ввода (textarea) | Текстовый запрос пользователя, до 500 символов | Да |
| Быстрые подсказки | 5 тематических кнопок для быстрого старта | Нет |
| Кнопка поиска | Запуск нейропоиска, блокируется во время загрузки | Да |
| Индикатор загрузки | Анимированный спиннер, текст «ИИ анализирует...» | Да |
| Итоговый вывод (summary) | 1–2 предложения от ИИ о подборке | Если есть |
| Карточки курсов | Сетка от 5 до 8 карточек с объяснением | Да |
| Кнопка «Записаться →» | Зелёная — партнёрская ссылка. Фиолетовая — страница курса | Да |
Примеры запросов и результатов
Пример 1 — Смена профессии
Запрос пользователя:
Работаю бухгалтером 10 лет, хочу перейти в IT.
Слышала о Python для аналитики данных. С чего начать?
Могу учиться вечерами, бюджет до 40 000 ₽.Ответ нейросети (фрагмент JSON):
{
"summary": "Подобраны курсы для перехода в аналитику данных
с учётом бухгалтерского опыта и бюджета до 40 000 ₽.
Все курсы рассчитаны на вечернее обучение.",
"courses": [
{
"id": 2841,
"reason": "Курс специально для начинающих, Excel и Python
объясняют с нуля, есть блок финансовой аналитики."
}
]
}Карточки курсов в интерфейсе:
Пример 2 — Повышение квалификации в IT
Я Python-разработчик middle уровня, хочу освоить
машинное обучение и нейронные сети. Желательно курс
с практическими проектами и менторством.Пример 3 — Детское образование
Ищу курс программирования для ребёнка 10 лет,
который уже немного знает Scratch. Хотим перейти
на Python. Онлайн, 2–3 часа в неделю.Архитектура системы
браузер
JavaScript
admin-ajax.php
kg_ai_find_candidates()
wp_posts + wp_postmeta
kg_gigachat_get_token()
ngw.devices.sberbank.ru:9443
kg_ai_ask_gigachat()
gigachat.devices.sberbank.ru
referalka + meta
renderResults()
Ключевые файлы системы
| Файл | Назначение |
|---|---|
inc/ai-search.php | Ядро системы: AJAX-обработчик, SQL-поиск, вызов GigaChat API, шорткод, CSS/JS |
page-2.php | Шаблон главной страницы — виджет в hero-секции |
single-vse-kursy.php | Шаблон страницы курса — виджет перед описанием |
functions.php | Подключение ai-search.php через require |
Интеграция с GigaChat API
Получение токена доступа
POST https://ngw.devices.sberbank.ru:9443/api/v2/oauth
Headers:
Authorization: Basic {Authorization_Key}
RqUID: {UUID v4}
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Body:
scope=GIGACHAT_API_B2BЗапрос к модели GigaChat
POST https://gigachat.devices.sberbank.ru/api/v1/chat/completions
Headers:
Authorization: Bearer {access_token}
Content-Type: application/json
Body:
{
"model": "GigaChat",
"temperature": 0.3,
"max_tokens": 1500,
"messages": [
{ "role": "system", "content": "[системный промпт]" },
{ "role": "user", "content": "[запрос + список курсов]" }
]
}Структура ответа
{
"summary": "Подобраны курсы для начинающих веб-разработчиков...",
"courses": [
{
"id": 1664,
"reason": "Охватывает HTML, CSS и JavaScript с нуля,
есть менторская поддержка"
},
...
]
}Резервный провайдер DeepSeek
При любой ошибке GigaChat API (код 4xx/5xx, таймаут, недоступность) система автоматически повторяет запрос через DeepSeek Chat API. Пользователь не уведомляется о смене провайдера — результат выглядит идентично.
Работа с данными
Что передаётся в нейросеть
| Данные | Передаётся | Источник |
|---|---|---|
| Текст запроса пользователя | Да | Поле ввода |
| Название курса | Да | wp_posts.post_title |
| Категория курса | Да | wp_terms |
| Название школы | Да | wp_postmeta (nazvanie_shkoly) |
| Цена курса | Да | wp_postmeta (czena_kursa) |
| Длительность | Да | wp_postmeta (dlitelnost) |
| Аудитория курса | Да | wp_postmeta (dlya_kogo…) |
| IP-адрес пользователя | Нет | — |
| Email / телефон | Нет | — |
| Cookie / сессия | Нет | — |
| Партнёрские ссылки | Нет | Добавляются только локально |
Партнёрские ссылки (монетизация)
После получения ответа от нейросети система обогащает карточки реферальными ссылками школ — они хранятся локально в базе данных и не передаются в API нейросети.
- Если у школы есть реферальная ссылка — кнопка «Записаться →» использует её (зелёная,
rel="nofollow sponsored") - Если нет — кнопка «Подробнее →» ведёт на страницу курса на сайте (фиолетовая)
Безопасность
| Мера защиты | Реализация |
|---|---|
| CSRF-защита | WordPress Nonce в каждом AJAX-запросе (check_ajax_referer) |
| Санитизация ввода | sanitize_text_field() + wp_unslash() перед обработкой |
| SQL-инъекции | Все запросы через $wpdb->prepare() с параметризацией |
| XSS в выводе | JavaScript escHtml() при рендеринге карточек |
| Ключи API | Хранятся в PHP-коде на сервере, не передаются клиенту |
| SSL GigaChat | Совместимость с сертификатами Минцифры РФ |
| Лимит запроса | Минимум 5 символов, максимум 500 символов |
Соответствие законодательству РФ
Федеральный закон № 152-ФЗ «О персональных данных»
- В нейросеть передаётся только анонимный текст запроса и обезличенные данные о курсах
- Основной провайдер — GigaChat (ПАО Сбербанк) — российская компания, обработка данных в инфраструктуре РФ
- Kursograf.ru зарегистрирован оператором персональных данных: реестр РКН № 52-25-232090
- Запросы пользователей не хранятся и не логируются на постоянной основе
Маркировка партнёрских ссылок
- Все кнопки с реферальными ссылками содержат атрибут
rel="nofollow sponsored" - Ссылки, требующие маркировки по закону о рекламе, содержат в URL параметр
erid