Agent.stream()
La méthode .stream() permet de diffuser en temps réel les réponses d’un agent, avec des fonctionnalités avancées et une grande souplesse de format. Cette méthode accepte des messages et des options de streaming facultatives, offrant une expérience de streaming moderne compatible à la fois avec le format natif de Mastra et avec AI SDK v5+.
Exemple d’utilisationLien direct vers Exemple d’utilisation
const stream = await agent.stream('message for agent')
Compatibilité des modèles : cette méthode est conçue pour les modèles V2. Les modèles V1 doivent utiliser la méthode .streamLegacy(). Mastra détecte automatiquement la version de votre modèle et génère une erreur en cas d’incompatibilité.
ParamètresLien direct vers Paramètres
messages:
options?:
maxSteps?:
scorers?:
scorer:
sampling?:
type:
rate?:
onIterationComplete?:
context.iteration:
context.maxIterations:
context.text:
context.isFinal:
context.finishReason:
context.toolCalls:
context.messages:
return.continue?:
return.feedback?:
isTaskComplete?:
scorers:
strategy?:
onComplete?:
parallel?:
timeout?:
suppressFeedback?:
delegation?:
onDelegationStart?:
context.requestContext afin d’ajouter des entrées au contexte de requête de l’exécution du sous-agent.onDelegationComplete?:
bail() permettant d’arrêter la suite de l’exécution, et vous pouvez renvoyer { feedback } pour guider l’action suivante du superviseur. Le retour est enregistré dans la mémoire du superviseur sous forme de message de l’assistant.messageFilter?:
tracingContext?:
returnScorerData?:
onChunk?:
onError?:
onAbort?:
abortSignal?:
activeTools?:
prepareStep?:
context?:
structuredOutput?:
schema:
model?:
errorStrategy?:
fallbackValue?:
instructions?:
jsonPromptInjection?:
providerOptions?:
{ openai: { reasoningEffort: 'low' } }).outputProcessors?:
processOutputResult et processOutputStream, ou les deux.includeRawChunks?:
inputProcessors?:
processInput.instructions?:
system?:
output?:
memory?:
thread:
id et des metadata facultatives.resource:
options?:
onTitleGenerated?:
generateTitle est activé dans les options de mémoire et que le thread ne possède pas encore de titre.onFinish?:
onStepFinish?:
telemetry?:
isEnabled?:
recordInputs?:
recordOutputs?:
functionId?:
modelSettings?:
temperature?:
maxOutputTokens?:
maxRetries?:
topP?:
topK?:
presencePenalty?:
frequencyPenalty?:
stopSequences?:
toolChoice?:
'auto':
'none':
'required':
{ type: 'tool'; toolName: string }:
toolsets?:
clientTools?:
hooks?:
beforeToolCall peut renvoyer { proceed: false, output } pour ignorer l’appel d’outil.savePerStep?:
requireToolApproval?:
tool-call-approval et se met en pause jusqu’à l’appel de approveToolCall() ou declineToolCall().autoResumeSuspendedTools?:
resumeData du message de l’utilisateur selon le resumeSchema de l’outil. Nécessite la configuration de la mémoire.toolCallConcurrency?:
providerOptions?:
{ providerName: { optionKey: value } }. Par exemple : { openai: { reasoningEffort: 'high' }, anthropic: { maxTokens: 1000 } }.openai?:
{ reasoningEffort: 'high' }anthropic?:
{ maxTokens: 1000 }google?:
{ safetySettings: [...] }[providerName]?:
runId?:
requestContext?:
tracingContext?:
currentSpan?:
tracingOptions?:
metadata?:
requestContextKeys?:
traceId?:
parentSpanId?:
tags?:
versions?:
agents?:
versionId?:
status?:
untilIdle?:
fullStream. Transmettez true pour utiliser les paramètres par défaut (délai d’inactivité de 5 min), ou un objet avec maxIdleMs pour les configurer. Nécessite la mémoire. Remplace la méthode autonome streamUntilIdle().maxIdleMs?:
Valeurs renvoyéesLien direct vers Valeurs renvoyées
stream:
traceId?:
spanId?:
Exemple d’utilisation détailléLien direct vers Exemple d’utilisation détaillé
Format Mastra (par défaut)Lien direct vers Format Mastra (par défaut)
import { stepCountIs } from 'ai-v5'
const stream = await agent.stream('Tell me a story', {
stopWhen: stepCountIs(3), // Stop after 3 steps
modelSettings: {
temperature: 0.7,
},
})
// Access text stream
for await (const chunk of stream.textStream) {
console.log(chunk)
}
// or access full stream
for await (const chunk of stream.fullStream) {
console.log(chunk)
}
// Get full text after streaming
const fullText = await stream.text
Format AI SDK v5+Lien direct vers Format AI SDK v5+
Pour utiliser le flux avec AI SDK v5 (et les versions ultérieures), vous pouvez le convertir à l’aide de notre fonction utilitaire toAISdkStream.
import { stepCountIs, createUIMessageStreamResponse } from 'ai'
import { toAISdkStream } from '@mastra/ai-sdk'
const stream = await agent.stream('Tell me a story', {
stopWhen: stepCountIs(3), // Stop after 3 steps
modelSettings: {
temperature: 0.7,
},
})
// In an API route for frontend integration
return createUIMessageStreamResponse({
stream: toAISdkStream(stream, { from: 'agent' }),
})
Utilisation des fonctions de rappelLien direct vers Utilisation des fonctions de rappel
Toutes les fonctions de rappel sont désormais disponibles en tant que propriétés de premier niveau, pour une utilisation plus claire de l’API.
const stream = await agent.stream('Tell me a story', {
onFinish: result => {
console.log('Streaming finished:', result)
},
onStepFinish: step => {
console.log('Step completed:', step)
},
onChunk: chunk => {
console.log('Received chunk:', chunk)
},
onError: ({ error }) => {
console.error('Streaming error:', error)
},
onAbort: event => {
console.log('Stream aborted:', event)
},
})
// Process the stream
for await (const chunk of stream.textStream) {
console.log(chunk)
}
Exemple avancé avec des optionsLien direct vers Exemple avancé avec des options
import { z } from 'zod'
import { stepCountIs } from 'ai'
await agent.stream('message for agent', {
stopWhen: stepCountIs(3), // Stop after 3 steps
modelSettings: {
temperature: 0.7,
},
memory: {
thread: 'user-123',
resource: 'test-app',
},
toolChoice: 'auto',
// Structured output with better DX
structuredOutput: {
schema: z.object({
sentiment: z.enum(['positive', 'negative', 'neutral']),
confidence: z.number(),
}),
model: 'openai/gpt-5.6-sol',
errorStrategy: 'warn',
},
// Output processors for streaming response validation
outputProcessors: [
new ModerationProcessor({ model: 'openrouter/openai/gpt-oss-safeguard-20b' }),
new BatchPartsProcessor({ maxBatchSize: 3, maxWaitTime: 100 }),
],
})
Transport WebSocket de ResponsesLien direct vers Transport WebSocket de Responses
Activez le streaming WebSocket de Responses avec les options du fournisseur. Cela ne s’applique qu’aux appels en streaming et est pris en charge pour les modèles OpenAI directs ainsi que pour les déploiements Responses d’Azure OpenAI. Si le streaming WebSocket n’est pas disponible, Mastra utilise le streaming HTTP comme solution de repli. Par défaut, Mastra ferme le WebSocket à la fin du flux.
const stream = await agent.stream('Hello', {
providerOptions: {
openai: {
transport: 'websocket', // 'websocket' | 'fetch' | 'auto'
websocket: {
url: 'wss://api.openai.com/v1/responses',
closeOnFinish: true, // default
},
},
},
})
Pour Azure OpenAI, configurez la passerelle avec useResponsesAPI: true, puis utilisez providerOptions.azure.transport.
const stream = await agent.stream('Hello', {
providerOptions: {
azure: {
transport: 'websocket',
store: false,
websocket: { closeOnFinish: true },
},
},
})
Pour garder la connexion ouverte après la fin du flux, définissez closeOnFinish: false et fermez-la manuellement.
const stream = await agent.stream('Hello', {
providerOptions: {
openai: {
transport: 'websocket',
websocket: { closeOnFinish: false },
},
},
})
// Later, when you're done with the connection:
stream.transport?.close()
Les connexions WebSocket de Responses traitent une seule réponse à la fois. Mastra rejette les requêtes de continuation qui se chevauchent et incluent previous_response_id sur le même transport WebSocket. Attendez la fin du flux actif avant d’envoyer le tour suivant de la chaîne de réponses.