fix SKILL.md
This commit is contained in:
parent
35ad7e2e0a
commit
a54192b882
1 changed files with 150 additions and 132 deletions
|
|
@ -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_<timestamp>.<ext>`.
|
||||
**Если прислали аудиозапись + ключи проверяющего:**
|
||||
→ Распознать ответы, затем сверить с ключами и выставить баллы с объяснением ошибок.
|
||||
|
||||
---
|
||||
|
||||
### Режим 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 <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.
|
||||
Подставь реальные значения вместо плейсхолдеров:
|
||||
|
||||
**Шаг 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 и др.)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue