- Transcrire un enregistrement avec
/audio/transcriptions - Demander des horodatages, que tous les modèles ne fournissent pas
- Extraire décisions et actions selon un schéma
- Composer avec le fait que la transcription ne dit jamais qui parle
- Découper un long enregistrement sans perdre le fil du temps
Préparation
Vous avez besoin de Python 3.9 ou plus récent, du paquetrequests, et d’une clé d’API Venice. Consultez Générer une clé d’API si vous n’en avez pas. Apportez n’importe quel enregistrement de conversation, en wav, mp3, m4a, flac, aac, mp4, ogg ou webm.
1. Transcrire l’enregistrement
/audio/transcriptions est compatible avec OpenAI et accepte un envoi multipart. Le fichier doit être une véritable partie de fichier, car le base64 n’est pas accepté sur ce point de terminaison.
Appelez
GET /models?type=asr pour obtenir la liste actuelle plutôt que de figer celle-ci, car le catalogue évolue.
2. Demander les horodatages
Ce sont les horodatages qui rendent les notes vérifiables, donc c’est le choix le plus important, et le comportement par défaut ne vous les donnera pas :timestamps est un objet plutôt qu’une liste, et la clé à l’intérieur dépend du modèle. Whisper groupe par phrase, Scribe par mot :
3. Extraire les notes
Décrivez les notes voulues comme un schéma, pour que le résultat soit un enregistrement et non de la prose à analyser :disable_thinking est là pour la même raison qui vaut dans toute étape d’extraction. Le schéma décide déjà de la forme de la réponse, alors payer un modèle de raisonnement pour délibérer là-dessus n’apporte rien et rend le coût de chaque exécution différent du précédent. Extraction de données structurées à partir de documents mesure cette différence.
Lancez-le sur un standup de cinquante-trois secondes et les notes reviennent avec le chronomètre attaché :
spoken_at est réel. Sautez à 19,6 secondes et vous entendez la phrase qui a créé la tâche.
Donnez au modèle des lignes sans horodatage et chaque
spoken_at revient à 0. Le champ est requis, le modèle n’a rien à y mettre, et un champ requis est une instruction de produire quelque chose plutôt qu’une invitation à dire qu’il ne sait pas. Cela vaut la peine de s’en souvenir dès qu’un schéma semble fonctionner : la forme correcte n’est pas la même chose que les valeurs correctes.4. Personne n’est identifié
Deux choses dans cette sortie sont fausses, et elles viennent toutes deux du même endroit. La responsable du déploiement estMay. Son nom est Mei. La reconnaissance vocale est au plus mauvais sur les noms propres, et c’est justement des noms dont l’attribution a besoin, donc c’est l’échec que vous devriez attendre plutôt que le coup de malchance.
Le dernier élément est unassigned, bien que quelqu’un l’ait clairement pris en charge. La phrase était « I’ll ask legal today and report back tomorrow », et la transcription enregistre les mots sans enregistrer qui les a prononcés.
Ce second point n’est pas un bug que vous pouvez corriger. Aucun modèle de transcription Venice n’effectue de diarisation, donc il n’y a pas de champ speaker à saisir chez aucun d’eux. La transcription est un flux de texte sans voix, et les tâches ne peuvent être attribuées que lorsqu’un nom est prononcé à voix haute, comme dans « Tomas, can you put the deprecation notice in the changelog ».
Le premier, vous pouvez le corriger en disant au modèle qui était dans la salle :
May se résout en Mei Lin parce que le modèle a désormais une courte liste sur laquelle s’aligner, et les responsables sont des noms complets que votre outil de suivi peut retrouver. Le troisième élément reste non attribué, à raison. Une liste des participants corrige les confusions d’audition, et rien ne récupère l’information que l’enregistrement n’a jamais portée.
5. Plus long qu’une seule requête
Les envois sont plafonnés à 25 Mo, ce qui arrive plus vite qu’on ne le pense pour de l’audio non compressé, et une longue réunion mérite de toute façon d’être découpée pour qu’un seul échec ne vous coûte pas toute la transcription. Pour les fichiers WAV, la bibliothèque standard suffit, sans besoin de ffmpeg :offset de timed_lines :
awesome. pour combler le trou en fin de fragment, et a transformé une ligne en trois.
Les horodatages sont toujours corrects, et l’étape des notes retrouve toujours la tâche. Ce qu’elle perd, c’est le nom, or c’est de cela que dépend l’attribution.
Les formats compressés ne peuvent pas être découpés ainsi, car on ne peut pas couper un MP3 sur une frontière de trame avec la bibliothèque standard. Utilisez ffmpeg pour ceux-là :
Assembler le tout
Étapes suivantes
- Publiez les actions dans votre outil de suivi, en utilisant les noms de responsables que la liste des participants a permis de résoudre.
- Faites relire le résumé avec la Synthèse vocale pour les personnes qui ont manqué l’appel.
- Effectuez des recherches parmi les réunions passées en stockant les transcriptions avec les Embeddings.
- Laissez un agent décider quand transcrire et quand répondre à partir des notes qu’il possède déjà, avec Construire un agent qui utilise des outils avec l’appel de fonctions.
Reconnaissance vocale
Référence pour le point de terminaison des transcriptions.
Extraction de données structurées à partir de documents
La même extraction pilotée par un schéma, appliquée aux fichiers.
Réponses structurées
Comment json_schema contraint une réponse.
Clonage de voix
Donnez au résumé une voix qui lui est propre.