update skill to use faster-whisper module

This commit is contained in:
shuler7 2026-03-25 10:47:38 +03:00
parent 48a0c0088d
commit 5db412e7f6

View file

@ -119,27 +119,98 @@ description: >
1. **Аудиозапись** — файл с устными ответами ученика (MP3, WAV, M4A и т.д.)
2. **Правильные ответы (ключи)** — текстом или фото бланка с ключами
### Шаг 1 — Распознать аудио
Транскрибируй аудиофайл. Из транскрипта извлеки ответы ученика по каждому заданию:
- Задание 1 (соответствие A-F): какую цифру 1-7 назвал ученик для каждого высказывания
- Задания 2-9 (True/False/Not Stated): цифру 1, 2 или 3
- Задания 10-18 (выбор): цифру 1, 2 или 3
### Шаг 1 — Сохранить аудиофайл во временную директорию
Если ответ нечеткий или не прозвучал — отметь как "?" и засчитай как неверный.
Выведи распознанные ответы таблицей и попроси проверяющего подтвердить перед проверкой.
Сохрани полученный аудиофайл во временный путь `/tmp/ege_audio_<timestamp>.<ext>`.
### Шаг 2 — Получить и распознать ключи
```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.
### Шаг 3 — Сверить и выставить баллы
Читай `references/english-listening-criteria.md` для деталей по каждому блоку заданий.
Сверяй ответ ученика с ключом: 1 балл за совпадение, 0 за несовпадение.
### Шаг 4 — Передать в LLM для сверки и выставления баллов
### Шаг 4 — Вывести результат в формате таблицы
Три блока (Задание 1 / Задания 2-9 / Задания 10-18) с колонками: задание, ответ ученика, ключ, результат.
Итог: сумма баллов по каждому блоку + общий итог из 23.
Сформируй промпт для 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 не были распознаны в аудио и засчитаны как неверные."
---
## Общие принципы проверки