Agents IA

Créer un agent vocal local en Rust avec Voxlocal

Voxlocal est un agent vocal minimaliste et open-source écrit en Rust qui s'exécute localement sur macOS. Il démontre comment chaîner la reconnaissance vocale, la recherche vectorielle et les petits modèles de langage pour une latence faible.

Engrenages Rust interagissant avec des ondes audio numériques représentant le traitement vocal local
Illustration générée pour cet article

Traduit automatiquement depuis l'original anglais.

Sam Khawase a publié Voxlocal, un outil en ligne de commande open-source écrit en Rust qui fonctionne comme un agent vocal entièrement local pour macOS. Publié en octobre 2026, ce projet élimine les dépendances au cloud pour démontrer le fonctionnement interne des systèmes d'IA pilotés par la voix à l'aide de micro-modèles prêts à l'emploi.

Ce qui s'est passé

Les agents vocaux reposent généralement sur une infrastructure cloud complexe pour gérer le streaming audio, la conversion de la parole en texte et l'inférence des grands modèles de langage. Khawase a créé Voxlocal pour démystifier cette pile technologique en développant une implémentation minimale qui s'exécute entièrement sur une machine locale. Le projet se concentre sur un cas d'usage étroit lié aux services automobiles, permettant aux utilisateurs de poser des questions telles que les tarifs des services via des commandes vocales en anglais.

L'outil évite délibérément les fonctionnalités avancées comme le streaming asynchrone ou la détection d'activité vocale (Voice Activity Detection) afin de maintenir le pipeline transparent et inspectable. Au lieu de réinventer les composants principaux, Voxlocal intègre des modèles open-source existants tels que Whisper pour la transcription et Piper pour la synthèse vocale. Cette approche permet aux développeurs d'étudier chaque étape de la boucle de conversation sans l'opacité des API propriétaires ou des couches d'abstraction lourdes.

En s'exécutant localement, l'agent élimine la latence réseau associée aux serveurs distants, bien qu'il nécessite des ressources de calcul locales suffisantes. Le code source est disponible publiquement, servant de ressource éducative pour les ingénieurs intéressés par les mécanismes du traitement audio en temps réel et de l'inférence IA locale.

Comment cela fonctionne

L'agent suit un pipeline linéaire commençant par la capture audio. Le microphone enregistre les variations de pression atmosphérique, les convertissant en échantillons audio numériques à 16 000 échantillons par seconde en format mono. Ces échantillons sont transmis à Whisper, un réseau neuronal entraîné pour la reconnaissance vocale. Voxlocal utilise un décodage glouton avec une température de zéro, ce qui signifie que le modèle sélectionne le jeton suivant le plus probable plutôt que d'échantillonner à partir d'une distribution de probabilité. Cela garantit une sortie déterministe adaptée au contexte limité de la démo.

Une fois transcrit, le texte subit une normalisation pour supprimer les mots de remplissage comme "um" et standardiser la mise en forme. Le texte nettoyé est ensuite converti en un vecteur numérique à l'aide de MiniLM, un modèle d'embedding. Ce processus implique un masked mean pooling, où les représentations des jetons sont moyennées pour créer un seul vecteur de phrase, qui est ensuite normalisé L2 pour avoir une longueur d'un. Cette représentation mathématique permet au système de comparer la signification sémantique plutôt que de se limiter à la correspondance de mots-clés.

Le système effectue une génération augmentée par récupération (RAG) en comparant le vecteur de requête aux vecteurs pré-calculés des documents de service. Il calcule la similarité cosinus via des produits scalaires pour trouver le contexte pertinent, en écartant les correspondances inférieures à un seuil de 0,35. Les meilleures correspondances sont injectées dans SmolLM2, un petit modèle de langage exécuté via Candle. Le modèle est invité à produire un appel d'outil JSON structuré, tel que la vérification d'un prix, plutôt que de générer du texte libre. Enfin, Piper synthétise le texte de réponse en audio pour la lecture.

Détails clés

  • Voxlocal est un outil CLI construit avec Rust, conçu spécifiquement pour les environnements macOS.
  • Le composant de transcription de la parole en texte utilise Whisper avec un décodage glouton et une température nulle pour des résultats déterministes.
  • La normalisation du texte repose sur des expressions régulières pour supprimer les mots de remplissage et standardiser les espaces avant l'embedding.
  • La recherche sémantique utilise les embeddings MiniLM et la similarité cosinus, avec un seuil de similarité minimum de 0,35 pour la récupération de documents.
  • Le modèle de langage, SmolLM2, est contraint de produire des appels d'outils JSON structurés, qui sont analysés et validés par du code Rust avant l'exécution.
  • La synthèse vocale est gérée par Piper, convertissant la réponse textuelle finale en ondes sonores à l'aide de modèles de voix pré-entraînés.

Pourquoi c'est important

Pour les ingénieurs logiciels qui créent des interfaces conversationnelles, Voxlocal offre un rare aperçu sous le capot d'un agent vocal fonctionnel. La plupart des systèmes de production abstraitent ces étapes derrière des services managés, rendant difficile la compréhension de l'origine des goulets d'étranglement de latence ou des problèmes de précision. En implémentant le pipeline en Rust, Khawase souligne l'importance de la sécurité des types et des performances dans les applications audio en temps réel, où les millisecondes comptent.

Le projet démontre également la viabilité des petits modèles locaux pour des domaines spécifiques. L'utilisation de SmolLM2 et MiniLM montre que les tâches spécialisées ne nécessitent pas toujours des modèles massifs hébergés dans le cloud. Cette approche peut réduire les coûts et améliorer la confidentialité, car les données ne quittent jamais l'appareil de l'utilisateur. Cependant, elle révèle aussi la fragilité des petits modèles, nécessitant une logique de parsing et de réparation minutieuse pour gérer les sorties JSON mal formées.

Comprendre la transition des ondes sonores analogiques aux vecteurs numériques puis de nouveau à l'audio aide les développeurs à prendre de meilleures décisions architecturales. Cela clarifie pourquoi le buffering de jitter et le suréchantillonnage audio sont critiques chez les fournisseurs de téléphonie et pourquoi la normalisation est essentielle avant l'embedding. Cette connaissance permet aux équipes de déboguer plus efficacement les problèmes lors de l'intégration de services vocaux tiers.

Ce que vous pouvez faire

  • Clonez le dépôt Voxlocal depuis GitHub pour inspecter le code source Rust et comprendre la structure du pipeline.
  • Expérimentez avec les paramètres de décodage glouton dans Whisper pour voir comment les réglages de température affectent la précision de la transcription.
  • Modifiez les expressions régulières dans l'étape de normalisation pour gérer différents mots de remplissage ou schémas de parole.
  • Ajustez le seuil de similarité cosinus dans l'étape de récupération pour équilibrer la précision et le rappel pour votre jeu de données spécifique.
  • Testez la logique de parsing des appels d'outils en soumettant des sorties JSON mal formées pour voir comment la fonction de réparation gère les erreurs.
  • Remplacez l'exécuteur simulé par un véritable appel API pour intégrer des services réels de réservation ou de tarification dans le workflow.

Outils de la Boutique Bytechap

Continuer la lecture

Tous les articles