ege-skill/ege-checker/SKILL.md

222 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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_<timestamp>.<ext>`.
```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 не были распознаны в аудио и засчитаны как неверные."
---
## Общие принципы проверки
- **Актуальность**: Критерии соответствуют демоверсии ФИПИ 20242025
- **Строгость**: Придерживайся формулировок критериев, не занижай и не завышай
- **Пограничные случаи**: При сомнении между баллами — объясни оба варианта и выбери более обоснованный
- **Тон**: Конструктивный, поддерживающий. Это учебный инструмент, не карательный
- **Совместимость**: Скилл написан без привязки к конкретной модели. Работает с любым multimodal агентом, поддерживающим vision и аудио (Qwen3, GPT-4o, и др.)