diff --git a/ege-checker/SKILL.md b/ege-checker/SKILL.md index eeee0f8..bec151f 100644 --- a/ege-checker/SKILL.md +++ b/ege-checker/SKILL.md @@ -5,108 +5,106 @@ description: > Используй этот скилл когда пользователь: - Загружает фото/скан рукописного сочинения ЕГЭ по русскому языку - Просит проверить сочинение ЕГЭ, выставить баллы, оценить работу - - Загружает аудиозапись или текст ответов по разделу "Аудирование" ЕГЭ по английскому + - Загружает аудиозапись ответов по разделу "Аудирование" ЕГЭ по английскому - Упоминает "ЕГЭ", "сочинение", "критерии К1-К12", "аудирование английский" - Просит разобрать ошибки в сочинении по критериям ФИПИ - Скилл умеет: OCR рукописного текста через vision (multimodal), оценку по критериям, подробные комментарии. Работает с любой multimodal LLM (Qwen, GPT-4o и др.). + Скилл умеет: OCR рукописного текста через vision, STT аудиозаписей через recognition.py, + оценку по критериям ФИПИ 2026. Работает с любой multimodal LLM (Qwen, GPT-4o и др.). --- # ЕГЭ-Checker ## Обзор возможностей -| Модуль | Статус | Вход | Выход | -|--------|--------|------|-------| -| Сочинение (русский) | ✅ MVP | Фото рукописи или текст | Баллы К1–К12 + комментарии | -| Аудирование (английский) | ✅ MVP | Аудиофайл + ключи | Баллы по заданиям | +| Модуль | Вход — только распознавание | Вход — распознавание + оценка | +|--------|----------------------------|-------------------------------| +| Сочинение (русский) | Сканы бланков | Сканы + исходный текст + тема | +| Аудирование (английский) | Аудиозапись | Аудиозапись + ключи проверяющего | --- ## Модуль 1: Сочинение ЕГЭ по русскому языку -### Что получает агент от проверяющего -Проверяющий присылает в одном сообщении: -1. **Сканы бланков** — фото рукописного сочинения (один или несколько листов) -2. **Исходный текст задания** — публицистический/художественный текст, по которому написано сочинение -3. **Тему/формулировку задания** — если есть отдельно (иногда тема вытекает из текста) +### Логика запуска -Без исходного текста невозможно проверить К1, К2, К3 и К12. Если текст не прислан — попроси его перед началом проверки. +**Если прислали только сканы бланков (без исходного текста и темы):** +→ Только распознать рукопись и вывести текст. Оценку не выставлять. +→ Сообщить: "Текст распознан. Чтобы выставить баллы по критериям, пришлите также исходный текст задания и тему сочинения." -### Шаг 1 — Получить текст сочинения - -**Если загружено фото/скан:** -1. Внимательно рассмотри все изображения — бланки могут быть на нескольких листах -2. Распознай рукописный текст максимально точно, сохраняя абзацное деление -3. Выведи распознанный текст и попроси подтвердить: *"Вот что распознано. Если есть неточности — поправьте перед проверкой."* -4. Дождись подтверждения или правок - -**Если текст вставлен напрямую:** -Переходи к Шагу 2 без распознавания. - -### Шаг 2 — Загрузить критерии - -Прочитай файл `references/russian-essay-criteria.md` — там полные критерии К1–К12 с баллами и примерами. - -### Шаг 3 — Оценить по каждому критерию - -Пройдись по всем критериям К1–К12 **последовательно**. Для каждого: -- Процитируй конкретный фрагмент из сочинения (если уместно) -- Объясни своё решение -- Выставь балл - -**Важные правила:** -- Если К1 = 0 (нет формулировки проблемы) → К2, К3, К4 автоматически = 0 -- Если работа ≤ 70 слов → все баллы = 0, только К10 может быть ненулевым -- Считай слова перед проверкой (служебные части речи считаются) - -### Шаг 4 — Итоговый вывод - -Используй этот формат вывода: - -``` -## Результаты проверки сочинения ЕГЭ - -### Распознанный текст -[текст если было фото, иначе пропусти] - -### Количество слов: XX +**Если прислали сканы + исходный текст задания + тему:** +→ Распознать рукопись, затем выставить баллы по К1–К10 с объяснением снятий. --- +### Режим 1: Только распознавание + +1. Внимательно рассмотри все изображения — бланки могут быть на нескольких листах +2. Распознай рукописный текст максимально точно, сохраняя абзацное деление +3. Зачёркнутые слова отмечай как ~~зачёркнуто~~ +4. Выведи распознанный текст и сообщи количество слов +5. Уточни: "Если есть неточности — поправьте. Чтобы выставить баллы, пришлите исходный текст задания." + +--- + +### Режим 2: Распознавание + оценка по критериям + +**Шаг 1 — Распознать текст** (как в режиме 1, шаги 1–4) +Попроси подтвердить распознанный текст перед оценкой. + +**Шаг 2 — Загрузить критерии** +Прочитай `references/russian-essay-criteria.md` — критерии К1–К10 с баллами (ЕГЭ 2026). + +**Шаг 3 — Проверить предварительные условия** +- Подсчитай слова. Если менее 150 → все критерии = 0, сообщи об этом явно. +- Если К1 = 0 → К2 и К3 автоматически = 0. + +**Шаг 4 — Оценить по каждому критерию К1–К10 последовательно** + +Для каждого критерия: +- Процитируй конкретный фрагмент из сочинения (если уместно) +- Объясни снятие баллов — что именно не выполнено и почему +- Выставь балл + +**Шаг 5 — Итоговый вывод** + +``` +## Результаты проверки сочинения ЕГЭ (2026) + +### Количество слов: XX + ### Оценка по критериям | Критерий | Название | Балл | Макс | |----------|----------|------|------| -| К1 | Формулировка проблем исходного текста | X | 1 | -| К2 | Комментарий к проблеме | X | 6 | -| К3 | Отражение позиции автора | X | 1 | -| К4 | Отношение к позиции автора | X | 1 | -| К5 | Смысловая цельность, связность | X | 2 | -| К6 | Точность и выразительность речи | X | 2 | +| К1 | Позиция автора | X | 1 | +| К2 | Комментарий к позиции автора | X | 3 | +| К3 | Собственное отношение + аргумент | X | 2 | +| К4 | Фактическая точность | X | 1 | +| К5 | Логичность | X | 2 | +| К6 | Этические нормы | X | 1 | | К7 | Орфография | X | 3 | | К8 | Пунктуация | X | 3 | -| К9 | Языковые нормы | X | 2 | -| К10 | Речевые нормы | X | 2 | -| К11 | Этические нормы | X | 1 | -| К12 | Фактическая точность | X | 1 | -| **ИТОГО** | | **XX** | **25** | - ---- +| К9 | Грамматика | X | 3 | +| К10 | Речевые нормы | X | 3 | +| **ИТОГО** | | **XX** | **22** | ### Подробные комментарии **К1 — [балл/1]** -[объяснение] +[что именно засчитано или почему снято] -**К2 — [балл/6]** -[объяснение с цитатами из текста] +**К2 — [балл/3]** +[разбор с цитатами: есть ли 2 примера, пояснения, смысловая связь] -... и так далее по каждому критерию ... +...и так далее по каждому критерию... ---- +### Снятия баллов (итого) +- К2: -1 — смысловая связь между примерами есть, но не пояснена +- К7: -1 — ошибка в слове "..." +... ### Главные рекомендации -1. [самое важное для улучшения] +1. [самое важное] 2. ... ``` @@ -114,109 +112,129 @@ description: > ## Модуль 2: Аудирование ЕГЭ по английскому -### Что получает агент от проверяющего -Проверяющий присылает в одном сообщении: -1. **Аудиозапись** — файл с устными ответами ученика (MP3, WAV, M4A и т.д.) -2. **Правильные ответы (ключи)** — текстом или фото бланка с ключами +### Логика запуска -### Шаг 1 — Сохранить аудиофайл во временную директорию +**Если прислали только аудиозапись (без ключей):** +→ Только распознать ответы ученика через recognition.py и вывести их таблицей. +→ Сообщить: "Ответы распознаны. Чтобы выставить баллы, пришлите правильные ответы (ключи)." -Сохрани полученный аудиофайл во временный путь `/tmp/ege_audio_.`. +**Если прислали аудиозапись + ключи проверяющего:** +→ Распознать ответы, затем сверить с ключами и выставить баллы с объяснением ошибок. +--- + +### Режим 1: Только распознавание + +**Шаг 1 — Сохранить аудиофайл** ```python import os, time - ext = os.path.splitext(original_filename)[1] or ".mp3" tmp_path = f"/tmp/ege_audio_{int(time.time())}{ext}" with open(tmp_path, "wb") as f: f.write(audio_bytes) ``` -### Шаг 2 — Запустить recognition.py +**Шаг 2 — Запустить recognition.py** -**Через subprocess (рекомендуется):** +Через subprocess (рекомендуется): ```bash -python3 ~/zeroclaw-bot/recognition.py {tmp_path} --output json +python3 ~/zeroclaw-bot/recognition.py --output json ``` -**Через прямой импорт:** +Через прямой импорт: ```python import sys sys.path.insert(0, os.path.expanduser("~/zeroclaw-bot")) from recognition import process_audio - transcript, answers = process_audio(tmp_path, model_size="medium", verbose=False) -recognition_json = { - "transcript": transcript.text, - "answers": answers.to_dict(), - "unrecognized": answers.unrecognized, -} ``` -Результат — JSON: -- `transcript` — полный текст того, что сказал ученик -- `answers.task1` — {"A": "3", "B": "1", ...} -- `answers.task2_9` — {"2": "1", "3": "2", ...} -- `answers.task10_18` — {"10": "2", "11": "1", ...} -- `answers.unrecognized` — задания, которые не удалось извлечь (засчитать как 0) - -### Шаг 3 — Получить и распознать ключи -Если ключи пришли текстом — использовать напрямую. -Если пришло фото бланка с ключами — распознать через vision. - -### Шаг 4 — Передать в LLM для сверки и выставления баллов - -Сформируй промпт для LLM на основе результатов recognition.py. -Подставь реальные значения вместо плейсхолдеров: - +**Шаг 3 — Удалить временный файл** +```python +if os.path.exists(tmp_path): + os.remove(tmp_path) ``` -Ты эксперт-проверяющий ЕГЭ по английскому (аудирование). -Транскрипт ответов ученика (распознан через Whisper): +**Шаг 4 — Вывести распознанные ответы** +Таблица: задание | распознанный ответ +Если есть нераспознанные — явно отметить. +Сообщить: "Ответы распознаны. Пришлите правильные ответы (ключи) для выставления баллов." + +--- + +### Режим 2: Распознавание + оценка + +**Шаги 1–3** — те же, что в режиме 1 (сохранить, запустить, удалить). + +**Шаг 4 — Получить и распознать ключи** +Если ключи текстом — использовать напрямую. +Если ключи фото — распознать через vision. + +**Шаг 5 — Загрузить критерии** +Прочитай `references/english-listening-criteria.md`. + +**Шаг 6 — Передать в LLM для сверки** + +Промпт для модели (подставить реальные значения): +``` +Ты эксперт-проверяющий ЕГЭ по английскому (аудирование, 2026). + +Транскрипт ответов ученика (Whisper): [TRANSCRIPT] Извлечённые ответы ученика: -- Задание 1 (A-F): [TASK1] -- Задания 2-9: [TASK2_9] -- Задания 10-18: [TASK10_18] +- Задание 1 (A–F): [TASK1] +- Задания 2–3 (True/False/Not stated): [TASK2_3] +- Задания 4–9 (выбор 1/2/3): [TASK4_9] - Не распознаны (засчитать как 0): [UNRECOGNIZED] Правильные ответы (ключи): [KEYS] -Сверь ответы с ключами. 1 балл за совпадение, 0 — за несовпадение или отсутствие. +Сверь ответы с ключами. 1 балл за совпадение, 0 за несовпадение или отсутствие. Верни строго JSON без markdown: -{"results":{"task1":{"A":true},"task2_9":{"2":true},"task10_18":{"10":false}}, - "scores":{"task1":0,"task2_9":0,"task10_18":0,"total":0}, - "errors":["Задание 1B: ученик ответил 5, верный ответ 1"]} +{"results":{"task1":{"A":true},"task2_3":{"2":true},"task4_9":{"4":false}}, + "scores":{"task1":0,"task2_3":0,"task4_9":0,"total":0}, + "errors":["Задание 1B: ученик — 5, верный ответ — 1"]} ``` -Читай `references/english-listening-criteria.md` для максимальных баллов каждого блока. +**Шаг 7 — Вывести результат** -### Шаг 5 — Удалить временный файл +``` +## Результаты: Аудирование ЕГЭ (Английский язык, 2026) -Обязательно удали аудиофайл после получения ответа от LLM: +### Задание 1 — Установление соответствия (макс. 6 баллов) +| Высказывание | Ответ ученика | Ключ | Результат | +| A | 3 | 3 | + | +| B | 5 | 1 | - | +... +Баллов: X / 6 -```python -import os -if os.path.exists(tmp_path): - os.remove(tmp_path) +### Задания 2–3 — True / False / Not stated (макс. 2 балла) +... +Баллов: X / 2 + +### Задания 4–9 — Выбор ответа (макс. 6 баллов) +... +Баллов: X / 6 (или X / подблок) + +### Итого: XX / 12 + +### Ошибки с пояснением: +- Задание 1B: ученик ответил 5, верный ответ 1 +... + +[Если были нераспознанные:] +Задания X, Y не были распознаны в аудио и засчитаны как неверные (0 баллов). ``` -### Шаг 6 — Вывести результат пользователю - -Три блока (Задание 1 / Задания 2-9 / Задания 10-18): -колонки — задание, ответ ученика, ключ, результат (✓/✗). -Итог: баллы по каждому блоку + общий итог из 23. - -Если были нераспознанные задания — явно указать: -"Задания X, Y не были распознаны в аудио и засчитаны как неверные." --- -## Общие принципы проверки +## Общие принципы -- **Актуальность**: Критерии соответствуют демоверсии ФИПИ 2024–2025 -- **Строгость**: Придерживайся формулировок критериев, не занижай и не завышай -- **Пограничные случаи**: При сомнении между баллами — объясни оба варианта и выбери более обоснованный -- **Тон**: Конструктивный, поддерживающий. Это учебный инструмент, не карательный -- **Совместимость**: Скилл написан без привязки к конкретной модели. Работает с любым multimodal агентом, поддерживающим vision и аудио (Qwen3, GPT-4o, и др.) +- **Актуальность**: Критерии соответствуют ФИПИ ЕГЭ 2026 +- **Строгость**: Придерживайся формулировок критериев точно +- **Снятия**: Всегда объясняй конкретно что именно не выполнено и почему снят балл +- **Пограничные случаи**: При сомнении — объясни оба варианта, выбери более обоснованный +- **Тон**: Конструктивный, учебный инструмент — не карательный +- **Совместимость**: Скилл работает с любым multimodal агентом (Qwen3, GPT-4o и др.)