--- name: ege-checker description: > Проверка заданий ЕГЭ с выставлением баллов по официальным критериям ФИПИ. Используй этот скилл когда пользователь: - Загружает фото/скан рукописного сочинения ЕГЭ по русскому языку - Просит проверить сочинение ЕГЭ, выставить баллы, оценить работу - Загружает аудиозапись или текст ответов по разделу "Аудирование" ЕГЭ по английскому - Упоминает "ЕГЭ", "сочинение", "критерии К1-К12", "аудирование английский" - Просит разобрать ошибки в сочинении по критериям ФИПИ Скилл умеет: OCR рукописного текста через vision (multimodal), оценку по критериям, подробные комментарии. Работает с любой 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 | Формулировка проблем исходного текста | X | 1 | | К2 | Комментарий к проблеме | X | 6 | | К3 | Отражение позиции автора | X | 1 | | К4 | Отношение к позиции автора | X | 1 | | К5 | Смысловая цельность, связность | X | 2 | | К6 | Точность и выразительность речи | X | 2 | | К7 | Орфография | X | 3 | | К8 | Пунктуация | X | 3 | | К9 | Языковые нормы | X | 2 | | К10 | Речевые нормы | X | 2 | | К11 | Этические нормы | X | 1 | | К12 | Фактическая точность | X | 1 | | **ИТОГО** | | **XX** | **25** | --- ### Подробные комментарии **К1 — [балл/1]** [объяснение] **К2 — [балл/6]** [объяснение с цитатами из текста] ... и так далее по каждому критерию ... --- ### Главные рекомендации 1. [самое важное для улучшения] 2. ... ``` --- ## Модуль 2: Аудирование ЕГЭ по английскому ### Что получает агент от проверяющего Проверяющий присылает в одном сообщении: 1. **Аудиозапись** — файл с устными ответами ученика (MP3, WAV, M4A и т.д.) 2. **Правильные ответы (ключи)** — текстом или фото бланка с ключами ### Шаг 1 — Сохранить аудиофайл во временную директорию Сохрани полученный аудиофайл во временный путь `/tmp/ege_audio_.`. ```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 **Через subprocess (рекомендуется):** ```bash python3 ~/zeroclaw-bot/recognition.py {tmp_path} --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. Подставь реальные значения вместо плейсхолдеров: ``` Ты эксперт-проверяющий ЕГЭ по английскому (аудирование). Транскрипт ответов ученика (распознан через Whisper): [TRANSCRIPT] Извлечённые ответы ученика: - Задание 1 (A-F): [TASK1] - Задания 2-9: [TASK2_9] - Задания 10-18: [TASK10_18] - Не распознаны (засчитать как 0): [UNRECOGNIZED] Правильные ответы (ключи): [KEYS] Сверь ответы с ключами. 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"]} ``` Читай `references/english-listening-criteria.md` для максимальных баллов каждого блока. ### Шаг 5 — Удалить временный файл Обязательно удали аудиофайл после получения ответа от LLM: ```python import os if os.path.exists(tmp_path): os.remove(tmp_path) ``` ### Шаг 6 — Вывести результат пользователю Три блока (Задание 1 / Задания 2-9 / Задания 10-18): колонки — задание, ответ ученика, ключ, результат (✓/✗). Итог: баллы по каждому блоку + общий итог из 23. Если были нераспознанные задания — явно указать: "Задания X, Y не были распознаны в аудио и засчитаны как неверные." --- ## Общие принципы проверки - **Актуальность**: Критерии соответствуют демоверсии ФИПИ 2024–2025 - **Строгость**: Придерживайся формулировок критериев, не занижай и не завышай - **Пограничные случаи**: При сомнении между баллами — объясни оба варианта и выбери более обоснованный - **Тон**: Конструктивный, поддерживающий. Это учебный инструмент, не карательный - **Совместимость**: Скилл написан без привязки к конкретной модели. Работает с любым multimodal агентом, поддерживающим vision и аудио (Qwen3, GPT-4o, и др.)