update skill to use faster-whisper module
This commit is contained in:
parent
48a0c0088d
commit
5db412e7f6
1 changed files with 85 additions and 14 deletions
|
|
@ -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 не были распознаны в аудио и засчитаны как неверные."
|
||||
---
|
||||
|
||||
## Общие принципы проверки
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue