Intégration de Pipecat
Intégration de Pipecat
Utilisez un pipeline Pipecat comme cerveau LLM derrière Speech Engine.
Ce guide explique comment utiliser Pipecat comme pipeline LLM au sein d’un serveur cerveau Speech Engine. Speech Engine gère la boucle vocale, soit la conversion de la parole en texte, la gestion des tours de parole et la conversion du texte en parole, tandis que Pipecat génère le texte via un pipeline composable de processeurs (appels LLM, RAG, appels de fonctions, garde-fous, filtres de contenu).
Ce guide est uniquement disponible en Python, car Pipecat est un framework Python côté serveur. Il n’existe pas
d’équivalent Node pour les processeurs de pipeline ; un package pipecat-client-js existe, mais il s’agit d’un
client de navigateur qui communique avec un serveur Pipecat, et non d’un moyen de créer des pipelines en TypeScript.
Architecture
Le SDK Speech Engine constitue la couche externe : son callback on_transcript se déclenche chaque fois que l’utilisateur finit de parler. Dans ce callback, vous créez un pipeline Pipecat, alimentez l’historique de la conversation sous forme de LLMContextFrame, puis transmettez en continu la sortie textuelle du pipeline à Speech Engine. ElevenLabs convertit le texte en parole et le diffuse à l’utilisateur.
Le pipeline Pipecat ne s’exécute que pendant un tour de parole. Lorsqu’une nouvelle transcription arrive, le pipeline précédent est annulé avant l’exécution du suivant : c’est ainsi que la gestion des interruptions de Speech Engine se propage au pipeline.
Quand utiliser ce modèle
Pipecat excelle lorsque votre cerveau a besoin de plus qu’un simple appel LLM :
- Des processeurs composables pour la génération augmentée par récupération, les appels de fonctions ou les garde-fous
- Un middleware basé sur des frames, capable d’inspecter, de transformer ou de bloquer le trafic à chaque étape
- Des fragments de pipeline réutilisables et partagés entre plusieurs agents
Si votre cerveau se limite à « transcription en entrée, appel LLM en sortie », le guide de démarrage Speech Engine est plus simple. Choisissez Pipecat lorsque le pipeline lui-même est l’élément central.
Prérequis
- Un Speech Engine. Suivez le guide de démarrage Speech Engine pour en créer un.
- Python 3.10+ (requis par
pipecat-ai). - Un tunnel HTTPS public pour le serveur cerveau (par exemple, ngrok).
Installer les dépendances
pipecat-ai[openai] installe le service LLM OpenAI. Remplacez cette extension par celle d’un autre fournisseur (anthropic, google, etc.) selon vos préférences.
Créer le cerveau Pipecat
Le cerveau comprend deux éléments : un processeur TextSink qui place le texte généré en continu dans une asyncio.Queue, et une coroutine run_pipecat_brain qui crée un pipeline à un tour et génère des fragments sous forme d’itérateur asynchrone.
Le pipeline contient uniquement le service LLM et le récepteur, sans processeur STT ni TTS, car Speech Engine s’en charge. LLMContextFrame constitue l’entrée ; les fragments LLMTextFrame constituent la sortie.
run_pipecat_brain est un générateur asynchrone. Chaque fragment généré est transmis directement à Speech Engine ; l’agent commence donc à parler avant que la réponse complète soit prête.
Le connecter au serveur Speech Engine
La méthode send_response du SDK Speech Engine accepte une chaîne ou tout itérable asynchrone de chaînes. Vous pouvez donc transmettre directement run_pipecat_brain(transcript). Convertissez les objets ConversationMessage fournis par Speech Engine en dictionnaires simples avant de les transmettre au cerveau.
Le SDK Speech Engine annule la tâche du tour précédent lorsqu’une nouvelle transcription arrive, ce qui annule le générateur asynchrone et la PipelineTask sous-jacente grâce au bloc try/finally de run_pipecat_brain.
Exécuter le serveur
Connectez-vous à Speech Engine depuis un navigateur à l’aide du même endpoint de jeton et code client que dans le guide de démarrage. Le pipeline Pipecat s’exécute côté serveur ; le navigateur voit une conversation Speech Engine classique.
Étendre le pipeline
Un pipeline Pipecat uniquement textuel peut inclure tout processeur de frames qui opère sur LLMTextFrame ou LLMContextFrame. Voici quelques ajouts courants :
- Garde-fous : un
FrameProcessorplacé avant le LLM, qui inspecteLLMContextFrameet remplace ou bloque le contexte non sécurisé. - Appels de fonctions : enregistrez des outils sur
OpenAILLMService, et Pipecat gère nativement les frames d’appel d’outils. Le texte final de l’assistant arrive toujours sous forme deLLMTextFrame. - Raisonnement en plusieurs étapes : enchaînez deux instances
OpenAILLMService, avec un processeur personnalisé entre les deux qui réécrit le contexte pour le second passage. - Filtrage de sortie : un
FrameProcessorplacé après le LLM, qui inspecte chaqueLLMTextFrameet supprime ou réécrit le contenu non autorisé avant qu’il n’atteigneTextSink.
La structure du pipeline reste identique : Pipeline([processor_a, llm, processor_b, sink]) ; run_pipecat_brain ne change pas.
Considérations pour la production
- Sécurité de l’annulation :
PipelineTask.cancel()peut provoquer un blocage s’il est appelé avant le démarrage complet du pipeline (pipecat-ai/pipecat#4276). Le modèletry/finallyci-dessus est sûr, carcancel()ne s’exécute qu’après qu’au moins une frame a été mise en file d’attente. - Injection de prompt : la sortie de la conversion de la parole en texte est une entrée utilisateur. Validez ou normalisez la transcription avant de l’envoyer au LLM, en particulier si un processeur en aval utilise le texte dans des appels d’outils ou des requêtes de base de données.
- Authentification du serveur cerveau : définissez un secret partagé sur Speech Engine et vérifiez-le dans le serveur cerveau afin d’empêcher les connexions non autorisées à votre endpoint
/ws: - Fournisseur LLM :
pipecat-ai[openai]inclutOpenAILLMService. Pour Anthropic, installezpipecat-ai[anthropic]et utilisezAnthropicLLMService; le reste du pipeline ne change pas.