05: sprekers herkennen getest met een opname van drie stemmen; wat diarize in Dify wel en niet doet

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido van Dijk
2026-09-20 22:00:31 +02:00
parent 9eec1e3158
commit bf6bd4e3ac
5 changed files with 23 additions and 1 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

@@ -18,6 +18,8 @@ Bestanden in deze map:
sectieoverleg-script.txt het fictieve overleg (500 woorden)
sectieoverleg-opname.mp3 voorgelezen door OpenAI tts-1, stem Alloy, 3:01, 128 kbps (te groot voor de tool)
sectieoverleg-opname-klein.mp3 zelfde opname, 32 kbps mono 16 kHz, 707 kB (deze gebruiken)
sectieoverleg-drie-stemmen-klein.mp3 zelfde script met drie stemmen (nova, echo, alloy), voor de sprekertest bij stap 6
maak_opname_drie_stemmen.py maakt die opname opnieuw (vraagt OPENAI_API_KEY in de omgeving)
Gepubliceerde voorbeeld-app: https://udify.app/workflow/7N5dNg8fD9qXHA80
-->
@@ -273,6 +275,24 @@ ffmpeg -i opname.m4a -ac 1 -ar 16000 -b:a 32k opname-klein.mp3
Controleer met het script (`sectieoverleg-script.txt`) of het klopt. In onze test: twee besluiten gevonden, vijf actiepunten met de juiste eigenaren en data, de leesmethode onder "Doorgeschoven" met de reden, en het koffieapparaat netjes weggelaten.
### Sprekers herkennen: wat het model wel en niet doet
Het model heet gpt-4o-transcribe-**diarize**, en "diarisatie" is sprekers uit elkaar houden. Om te zien wat dat in Dify oplevert, staat in de map een tweede testopname: `sectieoverleg-drie-stemmen-klein.mp3`, hetzelfde script maar voorgelezen door drie verschillende computerstemmen (gemaakt met `maak_opname_drie_stemmen.py`).
5. Draai de workflow nog een keer, nu met `sectieoverleg-drie-stemmen-klein.mp3`.
![De opname met drie stemmen staat klaar](beelden/c01-drie-stemmen-upload.jpg)
6. Kijk na afloop in **Logs** naar de run, tabblad **TRACING**, en klap **SPEECH TO TEXT** open. Onder OUTPUT staat wat de tool teruggeeft: één veld `text`, met een regeleinde op elke plek waar een andere stem begint.
![De uitvoer van Speech To Text: tekst met regeleinden per spreker, geen namen](beelden/c02-drie-stemmen-tracing.jpg)
Dat is het eerlijke antwoord: het model **knipt** de tekst op sprekerwisselingen, maar de Speech To Text-tool van Dify geeft **geen labels** (Spreker 1, Spreker 2) door. Wie wat zei, leidt de Verslag-node af uit de inhoud, en dat lukt hier goed omdat de opening de namen noemt ("Aanwezig zijn Karin, Bram en Fatima") en omdat mensen elkaar in een overleg aanspreken. In een overleg zonder zo'n opening worden de actiepunten "niet genoemd".
Twee dingen vielen verder op. De transcriptie van de drie stemmen bevat meer fouten dan die van de ene stem ("Nederlandsch", een verhaspelde naam): de computerstemmen zijn getraind op Engels en spreken Nederlands met een accent, en dat hoort het spraakmodel. Echte Nederlandse sprekers gaan beter. En de doorlooptijd was hetzelfde, ruim een minuut voor drie minuten audio.
> **Zelf kiezen: echte sprekerlabels.** Wil je "Karin:" en "Bram:" in het transcript, dan zijn er twee routes. De makkelijke: zet in de prompt van de Verslag-node "De regels in het transcript zijn sprekerwisselingen. Zet vóór elke regel de naam van de spreker als die uit de inhoud blijkt, anders Spreker 1, 2, 3." De precieze: vervang de Speech To Text-tool door een **HTTP Request**-node naar de spraak-API van OpenAI met `response_format=diarized_json`; die geeft per zin een sprekernummer en een tijd. Dat vraagt een sleutel in de node (via een omgevingsvariabele, nooit in de tekst) en is een volgende handleiding.
## Stap 7. Publiceer
1. Klik rechtsboven op **Publish** en dan op **Publish**.
@@ -320,6 +340,7 @@ Het voorbeeld uit deze handleiding: <https://udify.app/workflow/7N5dNg8fD9qXHA80
| Verslag en transcript lopen in elkaar over | De regel "Begin je antwoord met de regel # VERSLAG" ontbreekt in de instructie |
| "Upgrade to create more apps" | Sandbox-limiet van vijf apps. Verwijder een oude app via de drie puntjes op de kaart |
| Een mp3-link uit een testrun geeft `403 forbidden` | Downloadlinks van Dify-bestanden zijn vijf minuten geldig. Download meteen, of draai de test opnieuw |
| Het transcript heeft geen sprekernamen, alleen regeleinden | Zo werkt de Speech To Text-tool: diarize knipt, maar labelt niet in Dify. Zie Sprekers herkennen bij stap 6 |
| Melding over temperature | Het model ondersteunt die parameter niet. Negeren |
---
@@ -332,7 +353,8 @@ De opname is verzonnen, de indeling van het verslag is onze keuze. Dit hoofdstuk
| --- | --- | --- | --- |
| Andere kopjes in het verslag | Stap 4, prompt | makkelijk | Een verslag in de vorm die jullie al gebruiken |
| Taal en toon (formeel, informeel, Engels) | Stap 4, prompt | makkelijk | Een verslag dat je zonder herschrijven kunt delen |
| Een ander spraakmodel (whisper-1 is goedkoper, diarize onderscheidt sprekers) | Stap 3, instellingen van de tool | makkelijk | Lagere kosten of juist sprekerherkenning |
| Een ander spraakmodel (whisper-1 is goedkoper) | Stap 3, instellingen van de tool | makkelijk | Lagere kosten; sprekerwisselingen als regeleinden verlies je dan |
| Sprekernamen in het transcript | Stap 6, prompt van Verslag, of een HTTP Request-node (zie het groene kader bij Sprekers herkennen) | gemiddeld | Een transcript met "Karin:" en "Bram:" ervoor |
| Een tweede uitvoer: kort bericht voor wie er niet was | Extra LLM-node na stap 4, extra uitvoervariabele in stap 5 | gemiddeld | Twee producten uit één opname |
| Actiepunten als aparte lijst die je kunt kopiëren naar een takenlijst | Extra LLM-node met alleen de tabel | gemiddeld | Minder overtypen na het overleg |
| Een invoerveld "type overleg" dat de indeling kiest | Stap 2 plus een IF/ELSE-node of een prompt met voorwaarden | gemiddeld | Eén tool voor meerdere soorten overleg |