102 lines
5.8 KiB
Markdown
102 lines
5.8 KiB
Markdown
# Meeting Assistant (Transcription Tool)
|
|
|
|
**Version:** 0.6.0
|
|
**Status:** Beta (AI Insights Integration)
|
|
|
|
Der **Meeting Assistant** ist eine leistungsstarke Suite zur Transkription und Bearbeitung von Audio-Aufnahmen. Er kombiniert lokale FFmpeg-Verarbeitung mit der Gemini 2.0 Flash AI.
|
|
|
|
---
|
|
|
|
## 1. Architektur & Stack
|
|
|
|
* **FFmpeg Engine:** Automatisches Splitting großer Dateien in 30-Minuten-Segmente.
|
|
* **Gemini 2.0 Flash:** AI-Transkription mit Fokus auf JSON-Struktur (Sprecher, Timestamps) und zur Generierung von Meeting-Analysen.
|
|
* **Prompt Library:** Eine Sammlung von Vorlagen zur Steuerung der KI-Analyse.
|
|
* **Structured Storage:** SQLite speichert jedes Segment als editierbares JSON-Array und die Ergebnisse der KI-Analyse.
|
|
* **Unified UI:** Das Frontend fügt alle Segmente zu einem nahtlosen Dokument zusammen und bietet interaktive Analyse-Funktionen.
|
|
|
|
---
|
|
|
|
## 2. Key Features (v0.6.0)
|
|
|
|
### 🚀 **NEU:** AI Insights & Translation
|
|
* **Übersetzung (DE/EN):** Übersetzt das gesamte Transkript mit einem Klick ins Englische.
|
|
* **Meeting-Protokoll:** Erstellt automatisch ein formelles Protokoll (Meeting Minutes) mit Agenda, Entscheidungen und nächsten Schritten.
|
|
* **Action Items:** Extrahiert eine Aufgabenliste mit Verantwortlichen und Fälligkeiten direkt aus dem Gespräch.
|
|
* **Rollenbasierte Zusammenfassungen:** Generiert spezifische Zusammenfassungen, z.B. eine "Sales Summary", die sich auf Kundenbedürfnisse, Kaufsignale und nächste Schritte für das Vertriebsteam konzentriert.
|
|
|
|
### 🎙️ Intelligente Transkription
|
|
* Unterstützt MP3/WAV bis 500MB.
|
|
* Native Sprechererkennung und Zeitstempel-Normalisierung über Segmentgrenzen hinweg.
|
|
|
|
### 👥 Globales Sprecher-Management
|
|
* **Speaker Bar:** Eine Übersicht aller im Dokument gefundenen Sprecher.
|
|
* **Global Rename:** Mit einem Klick kann ein Sprecher (z.B. "Speaker A") im gesamten Dokument dauerhaft umbenannt werden (z.B. "Thomas").
|
|
|
|
### ✂️ Präzises Schneiden (Trimming)
|
|
* **Trim Start:** Löscht alles *vor* einer ausgewählten Zeile (ideal zum Entfernen von Vorgesprächen).
|
|
* **Trim End:** Löscht alles *nach* einer ausgewählten Zeile (entfernt Verabschiedungen).
|
|
* **Single Line Delete:** Einzelne Zeilen oder Störgeräusche können individuell entfernt werden.
|
|
|
|
### 📝 Editor & Export
|
|
* **Inline-Edit:** Jeder Textblock und jeder Sprechername kann durch direktes Anklicken korrigiert werden.
|
|
* **Copy Full Transcript:** Kopiert das gesamte, bereinigte Transkript inkl. Timestamps in die Zwischenablage.
|
|
* **Copy Insights:** Jedes Analyse-Ergebnis kann einfach in die Zwischenablage kopiert werden.
|
|
|
|
---
|
|
|
|
## 3. API Endpunkte
|
|
|
|
| Methode | Pfad | Beschreibung |
|
|
| :--- | :--- | :--- |
|
|
| `GET` | `/meetings` | Liste aller Meetings. |
|
|
| `POST` | `/upload` | Audio-Upload & Prozess-Start. |
|
|
| `POST` | `/meetings/{id}/insights` | **Neu:** Generiert eine Analyse (z.B. Protokoll, Action Items). |
|
|
| `POST` | `/meetings/{id}/translate` | **Neu:** Übersetzt das Transkript in eine Zielsprache (aktuell: 'English'). |
|
|
| `POST` | `/meetings/{id}/rename_speaker` | Globale Umbenennung in der DB. |
|
|
| `PUT` | `/chunks/{id}` | Speichert manuelle Text-Korrekturen. |
|
|
| `DELETE` | `/meetings/{id}` | Vollständiges Löschen. |
|
|
|
|
---
|
|
|
|
## 4. Docker Deployment (Plug & Play)
|
|
|
|
Der **Meeting Assistant** ist vollständig in die zentrale `docker-compose.yml` integriert.
|
|
|
|
### Inbetriebname
|
|
```bash
|
|
# Build & Start
|
|
docker-compose up -d --build transcription-tool
|
|
|
|
# Logs überwachen
|
|
docker logs -f transcription-tool
|
|
```
|
|
|
|
### Konfiguration
|
|
* **Port:** Intern `8001`.
|
|
* **Persistenz:** Audio-Uploads werden im benannten Volume `transcription_uploads` gespeichert (`/app/uploads` im Container).
|
|
* **Routing:** Das Tool läuft unter dem Pfad `/tr/`. Nginx muss das Präfix strippen: `rewrite ^/tr/(.*) /$1 break;`.
|
|
|
|
---
|
|
|
|
## 5. Roadmap
|
|
|
|
* **v0.7: Search:** Globale Suche über alle Transkripte hinweg.
|
|
* **v0.8: Q&A an das Meeting:** Ermöglicht, Fragen direkt an das Transkript zu stellen ("Was wurde zu Thema X beschlossen?").
|
|
* **v0.9: Export-Formate:** Export der Ergebnisse in verschiedene Formate (z.B. PDF, DOCX).
|
|
|
|
---
|
|
|
|
## 5. Development Notes & Troubleshooting
|
|
|
|
Bei der Implementierung der AI-Insights-Funktion (v0.6.0) traten mehrere Probleme auf, deren Lösungen für die zukünftige Entwicklung wichtig sind:
|
|
|
|
* **Isolierung von Microservices:** Der Versuch, eine zentrale `helpers.py`-Datei aus dem `transcription-app`-Container zu importieren, schlug mit einem `ModuleNotFoundError` fehl.
|
|
* **Lösung:** Kritische Funktionen (wie der Gemini-API-Client) wurden in eine lokale Bibliothek (`/lib/gemini_client.py`) innerhalb des Service-Backends dupliziert, um den Service eigenständig zu machen.
|
|
* **API-Schlüssel in Docker:** Der neue, isolierte Service konnte den API-Schlüssel nicht aus einer Datei lesen.
|
|
* **Lösung:** Der `GEMINI_API_KEY` wurde als Umgebungsvariable über die `docker-compose.yml`-Datei an den Container übergeben. Dies ist die Best Practice für die Bereitstellung von "Secrets" für containerisierte Anwendungen. **Wichtig:** Ein `docker-compose restart` reicht nicht aus, um die Änderung zu übernehmen; ein `docker-compose up -d --force-recreate <service_name>` ist erforderlich.
|
|
* **Modell-Kompatibilität:** API-Aufrufe schlugen mit `404 NOT_FOUND` fehl, weil versucht wurde, ein nicht zum API-Schlüssel passendes Modell (`gemini-1.5-flash`) zu verwenden.
|
|
* **Lösung:** Der Modellname wurde auf das im Projekt etablierte und funktionierende Modell `gemini-2.0-flash` korrigiert.
|
|
* **Datenformatierung:** Die KI lieferte generische Antworten, weil das an sie übergebene Transkript leer war.
|
|
* **Lösung:** Die Analyse des rohen JSON-Outputs aus der Datenbank (`debug_chunks`-Endpunkt) zeigte, dass die Formatierungslogik die `absolute_seconds` zur korrekten chronologischen Sortierung verwenden muss. Die `_format_transcript`-Funktion wurde entsprechend angepasst.
|