| Краткое описание | Компонент темы, преобразующий личные сообщения с AI-ботом в интерактивный тест. | |
| Репозиторий | GitHub - VaperinaDEV/discourse-quizmaster: A theme component that transforms private messages with an AI bot into an interactive quiz experience. · GitHub | |
| Руководство по установке | Как установить тему или компонент темы | |
| Новичок в темах Discourse? | Руководство для начинающих по использованию тем Discourse |
Установить этот компонент темы
Компонент темы для интерактивных тестов
Привет ![]()
Я создал компонент темы, который превращает личные сообщения с AI-ботом в интерактивный тест. Компонент автоматически форматирует вопросы теста, обрабатывает отправку ответов, отслеживает прогресс и управляет завершением теста, предлагая удобное выпадающее меню в заголовке для быстрого запуска.
Возможности
1. Запуск теста через выпадающее меню в заголовке
Настраиваемая кнопка выпадающего меню в заголовке сайта обеспечивает быстрый доступ к различным типам тестов:
- Полная настраиваемость через параметры темы с использованием схемы объектов
- Поддержка нескольких языков с интеграцией i18n для меток, описаний и сообщений
- Настраиваемые иконки для каждого уровня сложности теста
- По умолчанию доступны: тесты уровня «Легкий», «Средний», «Сложный» и «Смешанный»
- Каждая опция отправляет заранее настроенное сообщение AI-боту для начала теста
2. Автоматическое форматирование вопросов теста
Компонент обнаруживает и форматирует вопросы с вариантами ответов из сообщений AI-бота. Когда бот публикует список, начинающийся с «A)», «B)» и т.д., эти пункты автоматически преобразуются в кликабельные варианты ответов с индивидуальным стилем.
3. Отправка ответа в один клик
Пользователи могут нажать непосредственно на варианты ответа (A, B, C, D), чтобы отправить свой выбор. Компонент:
- Предотвращает повторную отправку с отображением состояния загрузки
- Автоматически отвечает на правильный пост
- Форматирует ответы единообразно (например, «Мой ответ: A) Текст варианта»)
- Обрабатывает ошибки с обратной связью для пользователя
4. Счетчик вопросов
Индикатор прогресса отображается на каждом вопросе теста, показывая:
- Текущий номер вопроса и максимальное количество
- Настраиваемое максимальное количество вопросов (по умолчанию: 50)
- Отображается только в сообщениях AI-бота
5. Автоматическое завершение теста
Компонент включает интеллектуальное управление тестом:
- Контрольные точки: Кнопка «Завершить тест» появляется каждые 10 вопросов (после 11-го, 21-го, 31-го и т.д.)
- Принудительное ограничение: Автоматически отправляет сообщение о завершении при достижении максимального количества вопросов
- Предотвращение дублирования: Отслеживает состояние завершения, чтобы избежать множественных постов о завершении
- Проверки валидации: Гарантирует, что завершение происходит только при необходимости
6. Модификации интерфейса
Во время тестового диалога:
- Убирает кнопки «Повторить/Поделиться» из сообщений бота (для не-администраторов)
- Убирает кнопку «Ответить» из сообщений бота в личных сообщениях
- Запрещает создателям тестов удалять свои собственные посты (сохраняет историю теста)
- Добавляет пользовательский CSS-класс тела
is-quiz-chatдля стилизации
Конфигурация
Компонент использует следующие параметры темы:
# Настройки поведения теста
quizmaster_username: "YourBotUsername" # Имя пользователя AI-бота
show_for_groups: "" # Показывать выпадающее меню в заголовке для групп
quiz_max_questions: 50 # Максимальное количество вопросов перед автоматическим завершением
# Настройки кнопки в заголовке
button_icon: "question-circle" # Иконка для главной кнопки теста
# Опции выпадающего меню (схема объектов), макс. 4
dropdown_items:
type: objects
default:
- label_template: quiz_easy_label
description_template: quiz_easy_description
icon: star
message_template: quizmaster_input_easy
- label_template: quiz_normal_label
description_template: quiz_normal_description
icon: star-half-alt
message_template: quizmaster_input_normal
- label_template: quiz_hard_label
description_template: quiz_hard_description
icon: certificate
message_template: quizmaster_input_hard
- label_template: quiz_mixed_label
description_template: quiz_mixed_description
icon: random
message_template: quizmaster_input_mixed
schema:
properties:
label_template:
type: string
description_template:
type: string
icon:
type: string
message_template:
type: string
svg_icons:
default: "far-star-half"
type: list
list_type: "compact"
description: "Список иконок FontAwesome 6, используемых в этом компоненте темы"
Ключи перевода
Добавьте эти ключи в файлы локализации вашей темы для полной поддержки i18n:
Английский (en.yml)
en:
js:
# Кнопка в заголовке
quiz: "Quiz"
# Метки выпадающего меню
quiz_easy_label: "Easy Quiz"
quiz_normal_label: "Normal Quiz"
quiz_hard_label: "Hard Quiz"
quiz_mixed_label: "Mixed Quiz"
# Описания выпадающего меню
quiz_easy_description: "Basic questions for beginners"
quiz_normal_description: "Average difficulty questions"
quiz_hard_description: "Advanced level challenge"
quiz_mixed_description: "Random difficulty questions"
# Шаблоны сообщений
quizmaster_input_easy: "Give me an easy quiz question"
quizmaster_input_normal: "Give me a normal difficulty quiz question"
quizmaster_input_hard: "Give me a hard quiz question"
quizmaster_input_mixed: "Give me a mixed difficulty quiz question"
# Взаимодействие с тестом
my_answer: "My answer to the question is:"
terminate_quiz: "Thanks for the game, I'd like a summary!"
max_questions_text: "questions (or until my source runs dry). Every 10, you choose: stay or venture on."
Сценарии использования
Этот компонент идеально подходит для:
- Образовательных тестов с AI-репетиторами
- Оценки обучения
- Проверки знаний
- Интерактивных обучающих материалов
- Геймифицированной доставки контента
- Приложений для изучения языков
- Курсов подготовки к сертификации
Компонент автоматически обрабатывает всю сложность отслеживания состояния, предотвращения ошибок и управления жизненным циклом теста, обеспечивая плавный опыт как для создателей тестов, так и для участников. Выпадающее меню в заголовке позволяет пользователям невероятно легко запускать тесты.
Настройка
Администраторы могут легко настроить опыт прохождения теста, выполнив следующие действия:
- Изменяя метки и описания сложности теста в файлах локализации
- Добавляя новые языковые переводы
- Меняя иконки для различных типов тестов
- Настраивая шаблоны сообщений, отправляемых AI-боту
- Конфигурируя, какие группы пользователей видят кнопку в заголовке
- Устанавливая лимиты максимального количества вопросов
Все настройки выполняются через административный интерфейс без необходимости изменения кода.
Системный промпт для AI
Компонент бесшовно работает с AI-ботами, обнаруживая простой формат списка. Вот пример системного промпта для вашего мистического AI-бота (настройте по необходимости):
Вы — строгий, но справедливый профессиональный Мистический Квестмастер. Говорите с авторитетом и полезностью, как современный волшебник. Используйте некоторые фразы, связанные с магией (например, «Давайте посмотрим, что скрывается в тумане ваших знаний...»), но придерживайтесь технических фактов.
### УРОВНИ СЛОЖНОСТИ ТЕСТА (РЕЖИМЫ)
Пользователь начнет разговор, указав уровень сложности. Используйте следующие рекомендации для калибровки глубины ваших вопросов:
1. **Легкий:**
[Ваши критерии легкого режима здесь]
2. **Средний:**
[Ваши критерии среднего режима здесь]
3. **Сложный:**
[Ваши критерии сложного режима здесь]
4. **Смешанный:** Случайным образом выбирайте уровень сложности и категорию для каждого вопроса.
---
### ДИНАМИЧЕСКАЯ ЛОГИКА ОТВЕТА
**ИНСТРУКЦИЯ:** Для каждого нового вопроса выбирайте категорию (A–E), отличную от категорий предыдущих 5 вопросов.
- **ПРАВИЛА РАЗНООБРАЗИЯ:** Никогда не повторяйте вопрос или его тему в рамках одной сессии.
- **ПРЕДЛОЖЕНИЕ ПОВЫШЕНИЯ УРОВНЯ:** После каждого контрольного рубежа в 10 вопросов, если пользователь имеет 100% успех на уровнях «Легкий» или «Средний», предложите перейти на следующий уровень в блоке оценки.
### ОСНОВНЫЕ ПРАВИЛА:
1. **Непрерывный поток:** После оценки ответа немедленно предоставьте следующий вопрос в ТОМ ЖЕ сообщении.
2. **Завершение игры:**
* Если пользователь пишет: «Спасибо за игру, я хочу подвести итоги!», немедленно остановитесь.
* Предоставьте итоговую оценку, основанную ТОЛЬКО на отвеченных вопросах.
* Предоставьте итоговый счет и мистическое прощание.
3. **ЕДИНЫЙ ВЫХОД:** **КРИТИЧЕСКИ ВАЖНО: Предоставьте оценку, текущий счет и СЛЕДУЮЩИЙ вопрос ровно ОДИН раз. Не повторяйте вопрос или список вариантов в том же ответе.**
### СТРУКТУРА И ФОРМАТИРОВАНИЕ ОТВЕТА (ОБЯЗАТЕЛЬНО):
> [Эмодзи Правильно/Неправильно] **[Краткое объяснение предыдущего ответа.]**
*Текущий счет: [X] очков*
---
### [Текст следующего вопроса]
* A) [ТЕКСТ_ВАРИАНТА_A]
* B) [ТЕКСТ_ВАРИАНТА_B]
* C) [ТЕКСТ_ВАРИАНТА_C]
* D) [ТЕКСТ_ВАРИАНТА_D]
---
### ПРАВИЛА АВТОМАТИЗАЦИИ (ДЛЯ AI):
- **НЕТ ТЕГОВ WRAP:** Не используйте теги `[wrap]` или любой специальный синтаксис Discourse для кнопок.
- **СТРОГИЙ ФОРМАТ СПИСКА:** Вы ДОЛЖНЫ предоставить четыре варианта в виде простого маркированного списка, точно как показано выше, начиная с «A)», «B)», «C)» и «D)».
- **ИНТЕГРАЦИЯ С СИСТЕМОЙ:** Внешняя система автоматически обнаружит ваш список A–D и преобразует его в интерактивные кнопки. Не пытайтесь стилизовать кнопки самостоятельно.
### ОГРАНИЧЕНИЯ:
- **Последовательность языка:** Всегда отвечайте на том же языке, который использовал пользователь.
- Объяснение должно находиться внутри блока цитирования (>).
Примечание: Изначально мы пробовали использовать теги [wrap] для создания кнопок, но AI иногда пропускал закрывающую скобку ], что нарушало функциональность. Простой формат маркированного списка (* A), * B) и т.д.) гораздо надежнее и практически невозможно ошибиться при его генерации. Компонент темы автоматически обнаруживает этот формат и преобразует его в интерактивные кнопки.
Я бы искренне хотел услышать о вашем сценарии использования. Пожалуйста, поделитесь!

