Aller au contenu principal

La voix dans Mastra

Le système Voice de Mastra fournit une interface unifiée pour les interactions vocales. Il permet d'intégrer à vos applications la synthèse vocale (TTS), la transcription vocale (STT) et les échanges vocaux en temps réel (STS).

Ajouter la voix aux agents
Lien direct vers Ajouter la voix aux agents

Transmettez un fournisseur vocal à un agent à l'aide de la propriété voice. Selon le fournisseur configuré, cette même propriété prend en charge la synthèse vocale (TTS), la transcription vocale (STT) et les échanges vocaux en temps réel (STS).

import { Agent } from '@mastra/core/agent'
import { OpenAIVoice } from '@mastra/voice-openai'

// Initialize OpenAI voice for TTS

const voiceAgent = new Agent({
id: 'voice-agent',
name: 'Voice Agent',
instructions: 'You are a voice assistant that can help users with their tasks.',
model: 'openai/gpt-5.6-sol',
voice: new OpenAIVoice(),
})

Vous pouvez ensuite utiliser les fonctionnalités vocales suivantes :

Synthèse vocale (TTS)
Lien direct vers Synthèse vocale (TTS)

Transformez les réponses de votre agent en parole naturelle grâce aux fonctionnalités TTS de Mastra. Choisissez parmi plusieurs fournisseurs, comme OpenAI, ElevenLabs et bien d'autres.

Pour découvrir les options de configuration détaillées et les fonctionnalités avancées, consultez notre guide sur la synthèse vocale.

import { Agent } from '@mastra/core/agent'
import { OpenAIVoice } from '@mastra/voice-openai'
import { playAudio } from '@mastra/node-audio'

const voiceAgent = new Agent({
id: 'voice-agent',
name: 'Voice Agent',
instructions: 'You are a voice assistant that can help users with their tasks.',
model: 'openai/gpt-5.6-sol',
voice: new OpenAIVoice(),
})

const { text } = await voiceAgent.generate('What color is the sky?')

// Convert text to speech to an Audio Stream
const audioStream = await voiceAgent.voice.speak(text, {
speaker: 'default', // Optional: specify a speaker
responseFormat: 'wav', // Optional: specify a response format
})

playAudio(audioStream)

Consultez la référence OpenAI Voice pour en savoir plus sur le fournisseur vocal OpenAI.

Transcription vocale (STT)
Lien direct vers Transcription vocale (STT)

Transcrivez du contenu parlé à l'aide de fournisseurs comme OpenAI, ElevenLabs et bien d'autres. Pour découvrir les options de configuration détaillées, consultez le guide sur la transcription vocale.

Vous pouvez télécharger un fichier audio d'exemple ici.


import { Agent } from '@mastra/core/agent'
import { OpenAIVoice } from '@mastra/voice-openai'
import { createReadStream } from 'fs'

const voiceAgent = new Agent({
id: 'voice-agent',
name: 'Voice Agent',
instructions: 'You are a voice assistant that can help users with their tasks.',
model: 'openai/gpt-5.6-sol',
voice: new OpenAIVoice(),
})

// Use an audio file from a URL
const audioStream = await createReadStream('./how_can_i_help_you.mp3')

// Convert audio to text
const transcript = await voiceAgent.voice.listen(audioStream)
console.log(`User said: ${transcript}`)

// Generate a response based on the transcript
const { text } = await voiceAgent.generate(transcript)

Consultez la référence OpenAI Voice pour en savoir plus sur le fournisseur vocal OpenAI.

Échanges vocaux (STS)
Lien direct vers Échanges vocaux (STS)

Créez des expériences conversationnelles grâce aux fonctionnalités d'échanges vocaux. L'API unifiée permet des interactions vocales en temps réel entre les utilisateurs et les agents d'IA. Pour découvrir les options de configuration détaillées et les fonctionnalités avancées, consultez le guide sur les échanges vocaux.

import { Agent } from '@mastra/core/agent'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'
import { OpenAIRealtimeVoice } from '@mastra/voice-openai-realtime'

const voiceAgent = new Agent({
id: 'voice-agent',
name: 'Voice Agent',
instructions: 'You are a voice assistant that can help users with their tasks.',
model: 'openai/gpt-5.6-sol',
voice: new OpenAIRealtimeVoice(),
})

// Listen for agent audio responses
voiceAgent.voice.on('speaker', ({ audio }) => {
playAudio(audio)
})

// Initiate the conversation
await voiceAgent.voice.speak('How can I help you today?')

// Send continuous audio from the microphone
const micStream = getMicrophoneStream()
await voiceAgent.voice.send(micStream)

Consultez la référence OpenAI Voice pour en savoir plus sur le fournisseur vocal OpenAI.

Voix en temps réel
Lien direct vers Voix en temps réel

Menez des appels en direct dans lesquels un utilisateur peut intervenir, depuis un navigateur ou par téléphone. Mastra confie la boucle audio à LiveKit, qui prend en charge la détection de l'activité vocale, la détection sémantique des tours de parole et l'interruption, tandis que votre agent génère chaque réponse à l'aide de son propre modèle, de ses tools et de sa memory. Pour connaître les options d'installation et de configuration, consultez le guide sur la voix en temps réel.

Configuration de Voice
Lien direct vers Configuration de Voice

Chaque fournisseur vocal peut être configuré avec différents modèles et différentes options. Vous trouverez ci-dessous les options de configuration détaillées de tous les fournisseurs pris en charge :

// OpenAI Voice Configuration
const voice = new OpenAIVoice({
speechModel: {
name: 'gpt-3.5-turbo', // Example model name
apiKey: process.env.OPENAI_API_KEY,
language: 'en-US', // Language code
voiceType: 'neural', // Type of voice model
},
listeningModel: {
name: 'whisper-1', // Example model name
apiKey: process.env.OPENAI_API_KEY,
language: 'en-US', // Language code
format: 'wav', // Audio format
},
speaker: 'alloy', // Example speaker name
})

Consultez la référence OpenAI Voice pour en savoir plus sur le fournisseur vocal OpenAI.

Utiliser plusieurs fournisseurs vocaux
Lien direct vers Utiliser plusieurs fournisseurs vocaux

Cet exemple montre comment créer et utiliser deux fournisseurs vocaux différents dans Mastra : OpenAI pour la transcription vocale (STT) et PlayAI pour la synthèse vocale (TTS).

Commencez par créer des instances des fournisseurs vocaux avec la configuration nécessaire.

import { OpenAIVoice } from '@mastra/voice-openai'
import { PlayAIVoice } from '@mastra/voice-playai'
import { CompositeVoice } from '@mastra/core/voice'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'

// Initialize OpenAI voice for STT
const input = new OpenAIVoice({
listeningModel: {
name: 'whisper-1',
apiKey: process.env.OPENAI_API_KEY,
},
})

// Initialize PlayAI voice for TTS
const output = new PlayAIVoice({
speechModel: {
name: 'playai-voice',
apiKey: process.env.PLAYAI_API_KEY,
},
})

// Combine the providers using CompositeVoice
const voice = new CompositeVoice({
input,
output,
})

// Implement voice interactions using the combined voice provider
const audioStream = getMicrophoneStream() // Assume this function gets audio input
const transcript = await voice.listen(audioStream)

// Log the transcribed text
console.log('Transcribed text:', transcript)

// Convert text to speech
const responseAudio = await voice.speak(`You said: ${transcript}`, {
speaker: 'default', // Optional: specify a speaker,
responseFormat: 'wav', // Optional: specify a response format
})

// Play the audio response
playAudio(responseAudio)

Utiliser les Model Providers d'AI SDK
Lien direct vers Utiliser les Model Providers d'AI SDK

Vous pouvez également utiliser directement les modèles AI SDK avec CompositeVoice :

import { CompositeVoice } from '@mastra/core/voice'
import { openai } from '@ai-sdk/openai'
import { elevenlabs } from '@ai-sdk/elevenlabs'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'

// Use AI SDK models directly - no provider setup needed
const voice = new CompositeVoice({
input: openai.transcription('whisper-1'), // AI SDK transcription
output: elevenlabs.speech('eleven_turbo_v2'), // AI SDK speech
})

// Works the same way as Mastra providers
const audioStream = getMicrophoneStream()
const transcript = await voice.listen(audioStream)

console.log('Transcribed text:', transcript)

// Convert text to speech
const responseAudio = await voice.speak(`You said: ${transcript}`, {
speaker: 'Rachel', // ElevenLabs voice
})

playAudio(responseAudio)

Vous pouvez aussi associer des modèles AI SDK à des fournisseurs Mastra :

import { CompositeVoice } from '@mastra/core/voice'
import { PlayAIVoice } from '@mastra/voice-playai'
import { groq } from '@ai-sdk/groq'

const voice = new CompositeVoice({
input: groq.transcription('whisper-large-v3'), // AI SDK for STT
output: new PlayAIVoice(), // Mastra provider for TTS
})

Pour en savoir plus sur CompositeVoice, consultez la référence CompositeVoice.

Ressources complémentaires
Lien direct vers Ressources complémentaires