Bienvenue dans la deuxième partie de notre série d'assistants vocaux ESP32 ! Dans la première partie, nous avons posé les bases matérielles en configurant l'ESP32 pour capturer les entrées vocales et lire les réponses. Nous plongeons désormais dans le domaine passionnant de la fourniture d'informations à notre assistant à l'aide d'un serveur Node.js alimenté par **LangChain* et OpenAI.*
Dans le premier volet, nous avons mis la main à la pâte avec l'aspect matériel : connecter des microphones, configurer des haut-parleurs et nous assurer que notre ESP32 pouvait gérer l'entrée et la sortie audio. Nous avons réussi à faire en sorte que l'ESP32 enregistre l'audio et le restitue, une première étape essentielle.
Mais soyons réalistes, un assistant qui ne fait que répéter ce que vous dites n'est pas particulièrement intelligent. La prochaine étape logique était donc de lui insuffler une certaine intelligence. C'est là que LangChain et OpenAI entrent en jeu.
Si vous avez raté la première partie, voici les médias concernés.
La vilaine bête
Vidéo
Code source
Le code source complet de ce projet est disponible sur GitHub : ESP32 AI Assistant Repository
Au départ, je me suis dit : « J'ai compris : Node.js est mon truc ! » Cependant, en approfondissant, j'ai réalisé que l'intégration du streaming audio en temps réel, la gestion des connexions WebSocket et la gestion du traitement de l'IA étaient... tout un parcours !
Après de nombreuses sessions de débogage alimentées par la caféine, des gribouillages frénétiques sur un tableau blanc et des moments eurêka sous la douche, j'ai développé une architecture de serveur robuste que je suis ravi de partager avec vous.
Imaginez ce flux de travail :
Voici les éléments clés qui font fonctionner ce système :
Examinons comment ces éléments fonctionnent ensemble, en commençant par l'intelligence de base.
Le cœur du serveur est le système de gestion des agents (enlib/agent.ts). Il fait office de centre de commande, traitant la parole entrante et déterminant les réponses appropriées.
lib/agent.ts)LeOpenAIVoiceReactAgentLa classe encapsule les fonctionnalités de base de l’assistant vocal, y compris la gestion du tampon du début à la fin.
export class OpenAIVoiceReactAgent { // Propriétés protégées connexion protégée : OpenAIWebSocketConnection ; instructions protégées ? : chaîne ; outils protégés : Tool[] ; protégé BUFFER_SIZE = 4800 ; // Propriétés publiques public buffer = new Uint8Array(); public audioBuffer : Tampon | indéfini; // Propriétés privées audioManager privé : AudioManager ; enregistrement privé : booléen = faux ; constructeur (params : OpenAIVoiceReactAgentOptions) { this.audioManager = new AudioManager(); this.connection = new OpenAIWebSocketConnection({ url : params.url, apiKey : params.apiKey, model : params.model, audioConfig : p...
[Courte citation de 8% de l'article original]