ege-skill/ege-checker/SKILL.md

11 KiB
Raw Blame History

name description
ege-checker Проверка заданий ЕГЭ с выставлением баллов по официальным критериям ФИПИ. Используй этот скилл когда пользователь: - Загружает фото/скан рукописного сочинения ЕГЭ по русскому языку - Просит проверить сочинение ЕГЭ, выставить баллы, оценить работу - Загружает аудиозапись или текст ответов по разделу "Аудирование" ЕГЭ по английскому - Упоминает "ЕГЭ", "сочинение", "критерии К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_<timestamp>.<ext>.

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 (рекомендуется):

python3 ~/zeroclaw-bot/recognition.py {tmp_path} --output json

Через прямой импорт:

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:

import os
if os.path.exists(tmp_path):
    os.remove(tmp_path)

Шаг 6 — Вывести результат пользователю

Три блока (Задание 1 / Задания 2-9 / Задания 10-18): колонки — задание, ответ ученика, ключ, результат (✓/✗). Итог: баллы по каждому блоку + общий итог из 23.

Если были нераспознанные задания — явно указать: "Задания X, Y не были распознаны в аудио и засчитаны как неверные."

Общие принципы проверки

  • Актуальность: Критерии соответствуют демоверсии ФИПИ 20242025
  • Строгость: Придерживайся формулировок критериев, не занижай и не завышай
  • Пограничные случаи: При сомнении между баллами — объясни оба варианта и выбери более обоснованный
  • Тон: Конструктивный, поддерживающий. Это учебный инструмент, не карательный
  • Совместимость: Скилл написан без привязки к конкретной модели. Работает с любым multimodal агентом, поддерживающим vision и аудио (Qwen3, GPT-4o, и др.)