Agent.generate()
La méthode .generate() permet à un agent de générer des réponses sans streaming avec des fonctionnalités avancées. Elle accepte des messages et des options de génération facultatives.
Exemple d’utilisationLien direct vers Exemple d’utilisation
Appelez l’agent avec un message pour générer une réponse :
const result = await agent.generate('message for agent')
ParamètresLien direct vers Paramètres
messages:
options?:
maxSteps?:
stopWhen?:
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?:
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?:
scorers?:
scorer:
sampling?:
type:
rate?:
returnScorerData?:
onChunk?:
onError?:
onAbort?:
activeTools?:
abortSignal?:
prepareStep?:
requireToolApproval?:
finishReason: 'suspended' et inclut un suspendPayload contenant les détails de l’appel d’outil (toolCallId, toolName, args). Utilisez approveToolCallGenerate() ou declineToolCallGenerate() pour poursuivre. Consultez Approbation de l’agent pour plus de détails.autoResumeSuspendedTools?:
resumeData du message de l’utilisateur en fonction du resumeSchema de l’outil. Nécessite la configuration de la mémoire.toolCallConcurrency?:
context?:
structuredOutput?:
schema:
model?:
errorStrategy?:
fallbackValue?:
instructions?:
jsonPromptInjection?:
logger?:
providerOptions?:
{ openai: { reasoningEffort: 'low' } }).outputProcessors?:
maxProcessorRetries?:
inputProcessors?:
instructions?:
system?:
output?:
memory?:
thread:
resource:
options?:
onTitleGenerated?:
generate(). Elle n’est déclenchée que lorsque generateTitle est activé dans les options de mémoire et que le fil ne possède aucun 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?:
providerOptions?:
openai?:
anthropic?:
google?:
[providerName]?:
runId?:
requestContext?:
tracingContext?:
currentSpan?:
tracingOptions?:
metadata?:
requestContextKeys?:
traceId?:
parentSpanId?:
tags?:
versions?:
agents?:
versionId?:
status?:
includeRawChunks?:
Structure de la réponseLien direct vers Structure de la réponse
Agent.generate() renvoie les données finales collectées pendant l’exécution. steps est un tableau d’objets représentant les étapes. Les tableaux d’outils du résultat, notamment toolCalls et toolResults au niveau supérieur ainsi que les tableaux imbriqués step.toolCalls et step.toolResults, utilisent le format de fragments de Mastra.
Cela signifie que les données des outils sont encapsulées dans payload :
const response = await agent.generate('Check the weather in Lagos')
for (const toolCall of response.toolCalls) {
console.log(toolCall.type) // 'tool-call'
console.log(toolCall.runId)
console.log(toolCall.from)
console.log(toolCall.payload.toolName)
console.log(toolCall.payload.args)
}
for (const step of response.steps) {
for (const toolResult of step.toolResults) {
console.log(toolResult.type) // 'tool-result'
console.log(toolResult.payload.toolName)
console.log(toolResult.payload.result)
}
}
Pour la version en streaming de ce même format de fragment, consultez la référence ChunkType.
Valeurs renvoyéesLien direct vers Valeurs renvoyées
result:
text:
object?:
toolCalls:
type:
runId:
from:
payload:
toolCallId:
toolName:
args?:
providerExecuted?:
toolResults:
type:
runId:
from:
payload:
toolCallId:
toolName:
result:
isError?:
usage:
steps:
text:
toolCalls:
toolResults:
finishReason?:
usage:
request:
response:
finishReason:
response:
id?:
timestamp?:
modelId?:
headers?:
anthropic-ratelimit-requests-remaining et x-ratelimit-remaining-tokens) ainsi que d’autres métadonnées propres au fournisseur.messages?:
uiMessages?:
request?:
body?:
warnings?:
providerMetadata?:
reasoning?:
reasoningText?:
sources?:
files?:
suspendPayload?:
finishReason vaut 'suspended'. Contient les détails de l’appel d’outil nécessaires pour approuver ou refuser l’appel en attente.toolCallId:
toolName:
args:
runId?:
approveToolCallGenerate() ou declineToolCallGenerate() pour reprendre une exécution suspendue.traceId?:
spanId?:
messages:
rememberedMessages:
error?:
tripwire?:
scoringData?:
returnScorerData est activé.Autres exemplesLien direct vers Autres exemples
Avec les paramètres du modèleLien direct vers Avec les paramètres du modèle
Exemple de limitation des tokens de sortie et de réglage de la température :
const limitedResult = await agent.generate('Write a short poem about coding', {
modelSettings: {
maxOutputTokens: 50,
temperature: 0.7,
},
})
Avec la mémoireLien direct vers Avec la mémoire
Donnez à votre agent accès à l’historique de la conversation et à sa persistance en configurant les options de mémoire. L’agent peut ainsi mémoriser les interactions précédentes et conserver le contexte d’un message à l’autre.
const memoryResult = await agent.generate('Remember my favorite color is blue', {
memory: {
thread: 'user-123-thread',
resource: 'user-123',
},
})
Accéder aux en-têtes de réponseLien direct vers Accéder aux en-têtes de réponse
Certains fournisseurs de modèles renvoient des informations utiles dans les en-têtes de réponse, telles que le nombre de tokens restants ou l’état de la limite de débit. Vous pouvez accéder à ces en-têtes depuis l’objet de résultat une fois la génération terminée.
const result = await agent.generate('Hello!')
const remainingRequests = result.response?.headers?.['anthropic-ratelimit-requests-remaining']
const remainingTokens = result.response?.headers?.['x-ratelimit-remaining-tokens']
console.log(`Remaining requests: ${remainingRequests}, Remaining tokens: ${remainingTokens}`)
Analyser des imagesLien direct vers Analyser des images
Les agents peuvent analyser et décrire des images en traitant à la fois leur contenu visuel et le texte qu’elles contiennent. Pour activer l’analyse d’images, transmettez un objet avec type: 'image' et l’URL de l’image dans le tableau content. Vous pouvez associer le contenu de l’image à des prompts textuels pour guider l’analyse de l’agent.
const response = await agent.generate([
{
role: 'user',
content: [
{
type: 'image',
image: 'https://placebear.com/cache/395-205.jpg',
mimeType: 'image/jpeg',
},
{
type: 'text',
text: 'Describe the image in detail, and extract all the text in the image.',
},
],
},
])
console.log(response.text)
Utiliser maxStepsLien direct vers using-maxsteps
Le paramètre maxSteps contrôle le nombre maximal d’appels séquentiels au LLM qu’un agent peut effectuer. Chaque étape génère une réponse et exécute les éventuels appels d’outils avant de traiter le résultat. Limiter le nombre d’étapes aide à éviter les boucles infinies et à réduire la latence. Cela permet également de contrôler l’utilisation des tokens par les agents qui utilisent des outils. La valeur par défaut est 5, mais elle peut être augmentée :
const response = await agent.generate('Help me organize my day', {
maxSteps: 10,
})
console.log(response.text)
Utiliser onStepFinishLien direct vers using-onstepfinish
Vous pouvez suivre la progression des opérations en plusieurs étapes à l’aide de la fonction de rappel onStepFinish. Cela est utile pour le débogage ou pour communiquer la progression aux utilisateurs.
onStepFinish n’est disponible que lors du streaming ou de la génération de texte sans sortie structurée.
const response = await agent.generate('Help me organize my day', {
onStepFinish: ({ text, toolCalls, toolResults, finishReason, usage }) => {
console.log({ text, toolCalls, toolResults, finishReason, usage })
},
})
Utiliser onTitleGeneratedLien direct vers using-ontitlegenerated
Lorsque generateTitle est activé dans les options de mémoire, la génération du titre s’exécute de manière asynchrone une fois la réponse terminée. Utilisez onTitleGenerated pour réagir lorsque le titre est prêt, par exemple en l’envoyant au client via SSE.
const response = await agent.generate('What is quantum computing?', {
memory: {
thread: threadId,
resource: userId,
onTitleGenerated: title => {
console.log('Thread title:', title)
},
},
})