Mastra 中的 Voice
Mastra 的 Voice 系統為語音互動提供統一介面,讓你的應用程式具備文字轉語音(TTS)、語音轉文字(STT)及即時語音轉語音(STS)功能。
為 Agent 加入語音為 Agent 加入語音 的直接連結
透過 voice 屬性將語音 Provider 傳入 Agent。視乎你設定的 Provider,同一個屬性可支援文字轉語音(TTS)、語音轉文字(STT)及即時語音轉語音(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(),
})
之後便可使用以下語音功能:
文字轉語音(TTS)文字轉語音(TTS) 的直接連結
使用 Mastra 的 TTS 功能,將 Agent 的回應轉換成自然流暢的語音。 你可選用 OpenAI、ElevenLabs 等多個 Provider。
如要了解詳細設定選項及進階功能,請參閱文字轉語音指南。
- OpenAI
- Azure
- ElevenLabs
- PlayAI
- Cloudflare
- Deepgram
- Inworld
- Speechify
- Sarvam
- Murf
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)
請參閱OpenAI Voice Reference,了解更多有關OpenAI 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { AzureVoice } from '@mastra/voice-azure'
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 AzureVoice(),
})
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: 'en-US-JennyNeural', // Optional: specify a speaker
})
playAudio(audioStream)
請參閱Azure Voice Reference,了解更多有關Azure 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { ElevenLabsVoice } from '@mastra/voice-elevenlabs'
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 ElevenLabsVoice(),
})
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
})
playAudio(audioStream)
請參閱ElevenLabs Voice Reference,了解更多有關ElevenLabs 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { PlayAIVoice } from '@mastra/voice-playai'
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 PlayAIVoice(),
})
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
})
playAudio(audioStream)
請參閱PlayAI Voice Reference,了解更多有關PlayAI 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { GoogleVoice } from '@mastra/voice-google'
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 GoogleVoice(),
})
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: 'en-US-Studio-O', // Optional: specify a speaker
})
playAudio(audioStream)
請參閱Google Voice Reference,了解更多有關Google 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { CloudflareVoice } from '@mastra/voice-cloudflare'
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 CloudflareVoice(),
})
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
})
playAudio(audioStream)
請參閱Cloudflare Voice Reference,了解更多有關Cloudflare 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { DeepgramVoice } from '@mastra/voice-deepgram'
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 DeepgramVoice(),
})
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: 'aura-english-us', // Optional: specify a speaker
})
playAudio(audioStream)
請參閱Deepgram Voice Reference,了解更多有關Deepgram 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { InworldVoice } from '@mastra/voice-inworld'
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 InworldVoice(),
})
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: 'Dennis', // Optional: specify a speaker
})
playAudio(audioStream)
請參閱Inworld Voice Reference,了解更多有關Inworld 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { SpeechifyVoice } from '@mastra/voice-speechify'
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 SpeechifyVoice(),
})
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: 'matthew', // Optional: specify a speaker
})
playAudio(audioStream)
請參閱Speechify Voice Reference,了解更多有關Speechify 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { SarvamVoice } from '@mastra/voice-sarvam'
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 SarvamVoice(),
})
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: 'shubh', // Optional: specify a bulbul:v3 speaker
})
playAudio(audioStream)
請參閱Sarvam Voice Reference,了解更多有關Sarvam 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { MurfVoice } from '@mastra/voice-murf'
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 MurfVoice(),
})
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
})
playAudio(audioStream)
請參閱Murf Voice Reference,了解更多有關Murf 語音 Provider 的資料。
語音轉文字(STT)語音轉文字(STT) 的直接連結
使用 OpenAI、ElevenLabs 等 Provider 將語音內容轉錄成文字。如要了解詳細設定選項及其他內容,請參閱語音轉文字。
你可以從這裏下載範例音訊檔案。
- OpenAI
- Azure
- ElevenLabs
- Cloudflare
- Deepgram
- Inworld
- Sarvam
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)
請參閱OpenAI Voice Reference,了解更多有關OpenAI 語音 Provider 的資料。
import { createReadStream } from 'fs'
import { Agent } from '@mastra/core/agent'
import { AzureVoice } from '@mastra/voice-azure'
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 AzureVoice(),
})
// 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)
請參閱Azure Voice Reference,了解更多有關Azure 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { ElevenLabsVoice } from '@mastra/voice-elevenlabs'
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 ElevenLabsVoice(),
})
// 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)
請參閱ElevenLabs Voice Reference,了解更多有關ElevenLabs 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { GoogleVoice } from '@mastra/voice-google'
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 GoogleVoice(),
})
// 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)
請參閱Google Voice Reference,了解更多有關Google 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { CloudflareVoice } from '@mastra/voice-cloudflare'
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 CloudflareVoice(),
})
// 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)
請參閱Cloudflare Voice Reference,了解更多有關Cloudflare 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { DeepgramVoice } from '@mastra/voice-deepgram'
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 DeepgramVoice(),
})
// 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)
請參閱Deepgram Voice Reference,了解更多有關Deepgram 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { InworldVoice } from '@mastra/voice-inworld'
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 InworldVoice(),
})
// 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)
請參閱Inworld Voice Reference,了解更多有關Inworld 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { SarvamVoice } from '@mastra/voice-sarvam'
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 SarvamVoice(),
})
// 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)
請參閱Sarvam Voice Reference,了解更多有關Sarvam 語音 Provider 的資料。
語音轉語音(STS)語音轉語音(STS) 的直接連結
使用語音轉語音功能建立對話體驗。統一 API 讓使用者與 AI Agent 即時進行語音互動。 如要了解詳細設定選項及進階功能,請參閱語音轉語音。
- OpenAI
- AWS Nova Sonic
- Inworld Realtime
- xAI
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)
請參閱OpenAI Voice Reference,了解更多有關OpenAI 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'
import { GeminiLiveVoice } from '@mastra/voice-google-gemini-live'
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 GeminiLiveVoice({
// Live API mode
apiKey: process.env.GOOGLE_API_KEY,
model: 'gemini-2.0-flash-exp',
speaker: 'Puck',
debug: true,
// Vertex AI alternative:
// vertexAI: true,
// project: 'your-gcp-project',
// location: 'us-central1',
// serviceAccountKeyFile: '/path/to/service-account.json',
}),
})
// Connect before using speak/send
await voiceAgent.voice.connect()
// Listen for agent audio responses
voiceAgent.voice.on('speaker', ({ audio }) => {
playAudio(audio)
})
// Listen for text responses and transcriptions
voiceAgent.voice.on('writing', ({ text, role }) => {
console.log(`${role}: ${text}`)
})
// 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)
請參閱Google Gemini Live Reference,了解更多有關Google Gemini Live 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'
import { NovaSonicVoice } from '@mastra/voice-aws-nova-sonic'
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 NovaSonicVoice({
region: 'us-east-1',
speaker: 'matthew',
// Static credentials are optional. The default AWS credential
// provider chain is used when none are passed.
}),
})
// Connect before using speak/send
await voiceAgent.voice.connect()
// Listen for assistant audio (Int16Array PCM)
voiceAgent.voice.on('speaking', ({ audioData }) => {
if (audioData) playAudio(audioData)
})
// Listen for transcribed text
voiceAgent.voice.on('writing', ({ text, role }) => {
console.log(`${role}: ${text}`)
})
// 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)
請參閱AWS Nova Sonic Reference,了解更多有關AWS Nova Sonic 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'
import { InworldRealtimeVoice } from '@mastra/voice-inworld'
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 InworldRealtimeVoice({
apiKey: process.env.INWORLD_API_KEY,
model: 'inworld/models/gemma-4-26b-a4b-it',
speaker: 'Sarah',
}),
})
// Connect before using speak/send
await voiceAgent.voice.connect()
// Listen for agent audio (PCM stream)
voiceAgent.voice.on('speaker', stream => {
playAudio(stream)
})
// Listen for text responses and transcriptions
voiceAgent.voice.on('writing', ({ text, role }) => {
console.log(`${role}: ${text}`)
})
// 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)
請參閱Inworld Realtime Reference,了解更多有關Inworld Realtime 語音 Provider 的資料。
import { Agent } from '@mastra/core/agent'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'
import { XAIRealtimeVoice } from '@mastra/voice-xai-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: 'xai/grok-4.3',
voice: new XAIRealtimeVoice({
apiKey: process.env.XAI_API_KEY,
model: 'grok-voice-think-fast-1.0',
speaker: 'eve',
turnDetection: { type: 'server_vad' },
}),
})
// Connect before using speak/send
await voiceAgent.voice.connect()
// Listen for agent audio responses
voiceAgent.voice.on('speaker', audioStream => {
playAudio(audioStream)
})
// Listen for text responses and transcriptions
voiceAgent.voice.on('writing', ({ text, role }) => {
console.log(`${role}: ${text}`)
})
// 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)
請參閱xAI Realtime Voice Reference,了解更多有關xAI 語音 Provider 的資料。
即時語音即時語音 的直接連結
在瀏覽器或電話上進行即時通話,使用者可以隨時插話。Mastra 會將音訊迴路交由 LiveKit 處理語音活動偵測、語意輪次偵測及插話,而你的 Agent 則會以本身的模型、Tool 及記憶產生每個回應。如要了解安裝及設定選項,請參閱即時語音。
Voice 設定Voice 設定 的直接連結
每個語音 Provider 都可設定不同的模型及選項。以下列出所有支援 Provider 的詳細設定選項:
- OpenAI
- Azure
- ElevenLabs
- PlayAI
- Cloudflare
- Deepgram
- Inworld
- Speechify
- Sarvam
- Murf
- OpenAI Realtime
- xAI Realtime
- Google Gemini Live
- AWS Nova Sonic
- Inworld Realtime
- AI SDK
// 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
})
請參閱OpenAI Voice Reference,了解更多有關OpenAI 語音 Provider 的資料。
// Azure Voice Configuration
const voice = new AzureVoice({
speechModel: {
name: 'en-US-JennyNeural', // Example model name
apiKey: process.env.AZURE_SPEECH_KEY,
region: process.env.AZURE_SPEECH_REGION,
language: 'en-US', // Language code
style: 'cheerful', // Voice style
pitch: '+0Hz', // Pitch adjustment
rate: '1.0', // Speech rate
},
listeningModel: {
name: 'en-US', // Example model name
apiKey: process.env.AZURE_SPEECH_KEY,
region: process.env.AZURE_SPEECH_REGION,
format: 'simple', // Output format
},
})
請參閱Azure Voice Reference,了解更多有關Azure 語音 Provider 的資料。
// ElevenLabs Voice Configuration
const voice = new ElevenLabsVoice({
speechModel: {
voiceId: 'your-voice-id', // Example voice ID
model: 'eleven_multilingual_v2', // Example model name
apiKey: process.env.ELEVENLABS_API_KEY,
language: 'en', // Language code
emotion: 'neutral', // Emotion setting
},
// ElevenLabs may not have a separate listening model
})
請參閱ElevenLabs Voice Reference,了解更多有關ElevenLabs 語音 Provider 的資料。
// PlayAI Voice Configuration
const voice = new PlayAIVoice({
speechModel: {
name: 'playai-voice', // Example model name
speaker: 'emma', // Example speaker name
apiKey: process.env.PLAYAI_API_KEY,
language: 'en-US', // Language code
speed: 1.0, // Speech speed
},
// PlayAI may not have a separate listening model
})
請參閱PlayAI Voice Reference,了解更多有關PlayAI 語音 Provider 的資料。
// Google Voice Configuration
const voice = new GoogleVoice({
speechModel: {
name: 'en-US-Studio-O', // Example model name
apiKey: process.env.GOOGLE_API_KEY,
languageCode: 'en-US', // Language code
gender: 'FEMALE', // Voice gender
speakingRate: 1.0, // Speaking rate
},
listeningModel: {
name: 'en-US', // Example model name
sampleRateHertz: 16000, // Sample rate
},
})
請參閱Google Voice Reference,了解更多有關Google 語音 Provider 的資料。
// Cloudflare Voice Configuration
const voice = new CloudflareVoice({
speechModel: {
name: 'cloudflare-voice', // Example model name
accountId: process.env.CLOUDFLARE_ACCOUNT_ID,
apiToken: process.env.CLOUDFLARE_API_TOKEN,
language: 'en-US', // Language code
format: 'mp3', // Audio format
},
// Cloudflare may not have a separate listening model
})
請參閱Cloudflare Voice Reference,了解更多有關Cloudflare 語音 Provider 的資料。
// Deepgram Voice Configuration
const voice = new DeepgramVoice({
speechModel: {
name: 'nova-2', // Example model name
speaker: 'aura-english-us', // Example speaker name
apiKey: process.env.DEEPGRAM_API_KEY,
language: 'en-US', // Language code
tone: 'formal', // Tone setting
},
listeningModel: {
name: 'nova-2', // Example model name
format: 'flac', // Audio format
},
})
請參閱Deepgram Voice Reference,了解更多有關Deepgram 語音 Provider 的資料。
// Inworld Voice Configuration
const voice = new InworldVoice({
speechModel: {
name: 'inworld-tts-2',
apiKey: process.env.INWORLD_API_KEY,
},
listeningModel: {
name: 'groq/whisper-large-v3',
apiKey: process.env.INWORLD_API_KEY,
},
speaker: 'Dennis',
audioEncoding: 'MP3',
sampleRateHertz: 48000,
language: 'en-US',
})
// Per-call options: `deliveryMode` is honored only by `inworld-tts-2`.
const audioStream = await voice.speak('Hello!', {
deliveryMode: 'BALANCED', // 'STABLE' | 'BALANCED' | 'CREATIVE'
language: 'en-US', // BCP-47 per-call override
})
請參閱Inworld Voice Reference,了解更多有關Inworld 語音 Provider 的資料。
// Speechify Voice Configuration
const voice = new SpeechifyVoice({
speechModel: {
name: 'speechify-voice', // Example model name
speaker: 'matthew', // Example speaker name
apiKey: process.env.SPEECHIFY_API_KEY,
language: 'en-US', // Language code
speed: 1.0, // Speech speed
},
// Speechify may not have a separate listening model
})
請參閱Speechify Voice Reference,了解更多有關Speechify 語音 Provider 的資料。
// Sarvam Voice Configuration
const voice = new SarvamVoice({
speechModel: {
model: 'bulbul:v3', // TTS model (bulbul:v2 or bulbul:v3)
apiKey: process.env.SARVAM_API_KEY,
language: 'en-IN', // BCP-47 language code
},
listeningModel: {
model: 'saarika:v2.5', // STT model (saarika:v2.5 or saaras:v3)
apiKey: process.env.SARVAM_API_KEY,
},
speaker: 'shubh', // Default bulbul:v3 speaker
})
請參閱Sarvam Voice Reference,了解更多有關Sarvam 語音 Provider 的資料。
// Murf Voice Configuration
const voice = new MurfVoice({
speechModel: {
name: 'murf-voice', // Example model name
apiKey: process.env.MURF_API_KEY,
language: 'en-US', // Language code
emotion: 'happy', // Emotion setting
},
// Murf may not have a separate listening model
})
請參閱Murf Voice Reference,了解更多有關Murf 語音 Provider 的資料。
// OpenAI Realtime Voice Configuration
const voice = new OpenAIRealtimeVoice({
speechModel: {
name: 'gpt-3.5-turbo', // Example model name
apiKey: process.env.OPENAI_API_KEY,
language: 'en-US', // Language code
},
listeningModel: {
name: 'whisper-1', // Example model name
apiKey: process.env.OPENAI_API_KEY,
format: 'ogg', // Audio format
},
speaker: 'alloy', // Example speaker name
})
如要進一步了解 OpenAI Realtime 語音 Provider,請參閱 OpenAI Realtime Voice Reference。
// xAI Realtime Voice Configuration
const voice = new XAIRealtimeVoice({
apiKey: process.env.XAI_API_KEY,
model: 'grok-voice-think-fast-1.0',
speaker: 'eve',
instructions: 'You are a concise voice assistant.',
turnDetection: {
type: 'server_vad',
threshold: 0.85,
silence_duration_ms: 1000,
prefix_padding_ms: 333,
},
audio: {
input: { format: { type: 'audio/pcm', rate: 24000 } },
output: { format: { type: 'audio/pcm', rate: 24000 } },
},
serverTools: [
{ type: 'web_search' },
{
type: 'mcp',
server_url: 'https://mcp.example.com/mcp',
server_label: 'business-tools',
},
],
})
請參閱xAI Realtime Voice Reference,了解更多有關xAI realtime 語音 Provider 的資料。
// Google Gemini Live Voice Configuration
const voice = new GeminiLiveVoice({
speechModel: {
name: 'gemini-2.0-flash-exp', // Example model name
apiKey: process.env.GOOGLE_API_KEY,
},
speaker: 'Puck', // Example speaker name
// Google Gemini Live is a realtime bidirectional API without separate speech and listening models
})
請參閱Google Gemini Live Reference,了解更多有關Google Gemini Live 語音 Provider 的資料。
// AWS Nova Sonic Voice Configuration
const voice = new NovaSonicVoice({
region: 'us-east-1',
speaker: 'matthew',
sessionConfig: {
inferenceConfiguration: {
temperature: 0.7,
maxTokens: 1024,
},
turnDetectionConfiguration: {
endpointingSensitivity: 'MEDIUM',
},
},
// AWS Nova Sonic is a realtime bidirectional API without separate speech and listening models
})
請參閱AWS Nova Sonic Reference,了解更多有關AWS Nova Sonic 語音 Provider 的資料。
// Inworld Realtime Voice Configuration
const voice = new InworldRealtimeVoice({
apiKey: process.env.INWORLD_API_KEY,
model: 'inworld/models/gemma-4-26b-a4b-it',
speaker: 'Sarah',
// Typed Inworld realtime knobs (semantic VAD, playback speed, MCP tool routing, ...)
session: {
audio: {
output: { speed: 1.1 },
input: { turn_detection: { type: 'semantic_vad', eagerness: 'high' } },
},
},
})
請參閱Inworld Realtime Reference,了解更多有關Inworld Realtime 語音 Provider 的資料。
// AI SDK Voice Configuration
import { CompositeVoice } from '@mastra/core/voice'
import { openai } from '@ai-sdk/openai'
import { elevenlabs } from '@ai-sdk/elevenlabs'
// Use AI SDK models directly - no need to install separate packages
const voice = new CompositeVoice({
input: openai.transcription('whisper-1'), // AI SDK transcription
output: elevenlabs.speech('eleven_turbo_v2'), // AI SDK speech
})
// Works seamlessly with your agent
const voiceAgent = new Agent({
id: 'aisdk-voice-agent',
name: 'AI SDK Voice Agent',
instructions: 'You are a helpful assistant with voice capabilities.',
model: 'openai/gpt-5.6-sol',
voice,
})
使用多個語音 Provider使用多個語音 Provider 的直接連結
以下範例示範如何在 Mastra 建立及使用兩個不同的語音 Provider:以 OpenAI 處理語音轉文字(STT),並以 PlayAI 處理文字轉語音(TTS)。
首先,建立語音 Provider 的實例,並加入所需設定。
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)
使用 AI SDK Model Provider使用 AI SDK Model Provider 的直接連結
你亦可直接配合 CompositeVoice 使用 AI SDK 模型:
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)
你亦可混合使用 AI SDK 模型與 Mastra Provider:
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
})
如要進一步了解 CompositeVoice,請參閱 CompositeVoice Reference。