Спринт 4: AI-помощник на базе DeepSeek
- Страница /settings: ввод и проверка API ключа DeepSeek - POST /api/llm/generate — генерация вопросов по названию теста - POST /api/llm/improve — улучшение формулировки вопроса + ответов (модал с галочками) - POST /api/llm/distractors — генерация дистракторов - POST /api/llm/review — рецензия теста + кнопка «Предложить вариант» - POST /api/llm/improve_all — улучшение всего теста с постатейным сравнением - Миграция 004: таблица settings (key-value) - Шапка приложения с навигацией на /settings Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# ШАГ 012 — Спринт 4: Доработки после тестирования
|
||||
|
||||
**Дата:** 2026-03-21
|
||||
**Контекст:** Мастер-класс по разработке системы тестирования сотрудников клиники.
|
||||
|
||||
---
|
||||
|
||||
## Запрос (серия правок после тестирования)
|
||||
|
||||
> 1. «Сгенерировать с AI» не должен спрашивать тему — использовать название теста
|
||||
> 2. «Улучшить» должен показывать сравнение старого и нового с галочками, а не затирать текст
|
||||
> 3. «Проверить тест» → добавить кнопку «Предложить вариант» с полным сравнением всего теста
|
||||
|
||||
---
|
||||
|
||||
## Доработки
|
||||
|
||||
### 1. Кнопка «Сгенерировать с AI»
|
||||
|
||||
**Было:** при нажатии открывался модал с полем ввода темы.
|
||||
|
||||
**Стало:**
|
||||
- Кнопка задизаблена, пока не заполнено поле «Название теста» (`shouldUpdate` на поле `title`)
|
||||
- При нажатии сразу берёт название теста как тему и запускает генерацию
|
||||
- Открывается модал с анимацией загрузки → превью вопросов → «Применить» / «Сгенерировать заново»
|
||||
|
||||
### 2. Кнопка «Улучшить» в карточке вопроса
|
||||
|
||||
**Было:** заменяла текст вопроса новой формулировкой без предупреждения.
|
||||
|
||||
**Стало:**
|
||||
- Открывается модал с двумя колонками: текущая формулировка и предложение AI
|
||||
- Изменения разбиты на позиции: текст вопроса + каждый вариант ответа отдельно
|
||||
- Чекбокс «Применить» у каждой позиции
|
||||
- Кнопка «Применить выбранные» — применяет только отмеченные пункты
|
||||
|
||||
**Изменения в бэкенде:**
|
||||
- `improve_question(db, question, answers)` — теперь принимает список ответов и возвращает JSON `{question, answers[]}`
|
||||
- `POST /api/llm/improve` — `ImproveRequest` добавлено поле `answers`, `ImproveResponse` теперь `{improved_question, improved_answers[]}`
|
||||
|
||||
### 3. Кнопка «Предложить вариант» в модале «Проверить тест»
|
||||
|
||||
**Новая кнопка** появляется после получения рекомендаций AI.
|
||||
|
||||
**Поведение:**
|
||||
- При нажатии вызывает новый `POST /api/llm/improve_all`
|
||||
- Модал переключается в режим сравнения: весь тест постранично
|
||||
- Для каждого вопроса: текущий vs AI-предложение + чекбокс
|
||||
- Для каждого варианта ответа: текущий vs AI-предложение + чекбокс
|
||||
- Правильные ответы помечены `(правильный ✓)`
|
||||
- Кнопки: «Применить выбранные» / «← К рекомендациям» / «Закрыть»
|
||||
|
||||
**Новые файлы/функции бэкенда:**
|
||||
- `improve_all(db, title, questions)` в `services/llm.py`
|
||||
- `POST /api/llm/improve_all` в `api/llm.py`
|
||||
|
||||
---
|
||||
|
||||
## Изменённые файлы
|
||||
|
||||
```
|
||||
backend/app/services/llm.py ← improve_question принимает answers; новая функция improve_all
|
||||
backend/app/api/llm.py ← обновлён ImproveRequest/ImproveResponse; новый /improve_all
|
||||
frontend/src/api/llm.ts ← обновлена сигнатура improve; новый метод improveAll
|
||||
frontend/src/components/TestForm/ ← все три доработки UI
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Следующие шаги
|
||||
|
||||
- [x] Спринт 1: Инфраструктура + Создание тестов
|
||||
- [x] Спринт 2: Прохождение теста + результат
|
||||
- [x] Спринт 3: Редактирование + версионность
|
||||
- [x] Спринт 4: AI-помощник (DeepSeek)
|
||||
- [ ] Спринт 5: Трекер результатов
|
||||
- [ ] Спринт 6: Авторизация и роли
|
||||
- [ ] Спринт 7: Уведомления в MAX
|
||||
Reference in New Issue
Block a user