Files
2026-05-19 09:59:42 +00:00

119 lines
4.7 KiB
Markdown
Raw Permalink 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.
# Дьяк — система управления протоколами встреч
Frappe 16 приложение для загрузки аудиозаписей встреч, автоматической
транскрибации и диаризации (через внешний микросервис) и структурированного
ведения протокола.
## Установка
> Предполагается, что Frappe 16 + bench уже установлен.
```bash
# 1. Положить эту папку (`dyak/`) в `frappe-bench/apps/`
cd ~/frappe-bench/apps
# (скопируйте/распакуйте сюда содержимое архива — должен получиться
# каталог frappe-bench/apps/dyak/ с setup.py внутри)
# 2. Зарегистрировать приложение в bench
cd ~/frappe-bench
bench --site <ваш_сайт> install-app dyak
# 3. Применить фикстуры (создаёт роль Dyak User)
bench --site <ваш_сайт> migrate
# 4. (опционально) собрать assets
bench build --app dyak
# 5. Перезапустить
bench restart
```
После установки в Desk появится модуль **Дьяк** с doctype'ами:
* **Meeting Record** (`MR-YYYY-#####`) — основной документ встречи.
* **Dyak Settings** (Singleton) — настройки сервиса транскрибации и LLM.
* 8 child-tables: Meeting Participant, Action Item, Decision, Problem,
Open Question, Schedule Change, Help Request, External Reference.
## Конфигурация
В **Dyak Settings** заполните:
| Поле | Значение по умолчанию |
| --- | --- |
| URL сервиса | `http://192.168.1.112:8000` |
| Модель Whisper | `large-v3` |
| Язык | `ru` |
| Подсказка | (термины, разделённые запятыми) |
| Количество спикеров | `0` (автоопределение) |
## Поток работы
```
Черновик
└─[кнопка «Транскрибировать»]──▶ В обработке
└─(background job)──────▶ Расшифровано
├─[кнопка «Назначить спикеров»]
├─[AI: задачи / резюме / анализ — заглушки]
└─[кнопка «На проверку»]──────▶ Проверено
└─[«Утвердить»]──▶ Утверждено
```
При ошибке транскрибации статус возвращается в **Черновик**, трейсбек
пишется в Error Log.
## Архитектура
```
dyak/
├── api/
│ ├── transcribe.py # whitelisted transcribe() + фоновый _run_transcription()
│ └── ai.py # заглушки extract_action_items, generate_summary, analyze_meeting
├── dyak/doctype/
│ ├── meeting_record/ # JSON + .py + .js (формовая логика)
│ ├── dyak_settings/ # Singleton с настройками
│ └── meeting_<...>/ # 8 child-tables
└── hooks.py
```
### Микросервис транскрибации
`POST {service_url}/process` — multipart/form-data:
```
file <bytes> аудиофайл
language ru код языка
initial_prompt str подсказка (опц.)
num_speakers int 0 = auto
model str tiny|base|...|large-v3|turbo (опц.)
```
Ответ:
```json
{
"language": "ru",
"duration": 197.6,
"processing_time": 18.2,
"speakers": {"SPEAKER_01": 113.5, "SPEAKER_02": 41.2},
"num_speakers": 3,
"utterances": [
{"speaker": "SPEAKER_01", "start": 0.0, "end": 94.6, "text": "..."}
]
}
```
Полный ответ кладётся в `Meeting Record.utterances_json` и используется
для рендеринга чат-диалога с цветами по спикерам.
## Точки расширения
* `dyak/api/ai.py` — заменить `msgprint` на реальные LLM-вызовы
(Anthropic/OpenAI/Ollama по `Dyak Settings.llm_provider`),
заполняющие `summary`, `action_items`, `decisions`, `problems`,
`open_questions`, `help_requests`, `external_references`,
`meeting_topics`, `meeting_mood`.
* Расписание автоматической транскрибации сразу после загрузки —
можно добавить через `doc_events` в `hooks.py`
(например, `Meeting Record: after_insert`).