Classe Step
La classe Step définit des unités de travail individuelles au sein d’un Workflow, en encapsulant la logique d’exécution, la validation des données et la gestion des entrées et sorties. Elle peut recevoir un Tool ou un Agent en paramètre afin de créer automatiquement une étape à partir de celui-ci.
Exemple d’utilisationLien direct vers Exemple d’utilisation
import { createWorkflow, createStep } from '@mastra/core/workflows'
import { z } from 'zod'
const step1 = createStep({
id: 'step-1',
description: 'passes value from input to output',
inputSchema: z.object({
value: z.number(),
}),
outputSchema: z.object({
value: z.number(),
}),
execute: async ({ inputData }) => {
const { value } = inputData
return {
value,
}
},
})
Définir des schémasLien direct vers Définir des schémas
Vous pouvez définir les inputSchema et outputSchema de l’étape avec toute bibliothèque prenant en charge Standard JSON Schema, notamment Zod, Valibot et ArkType.
- Zod
- Valibot
- ArkType
import { createStep } from '@mastra/core/workflows'
import { z } from 'zod'
const step1 = createStep({
id: 'step-1',
inputSchema: z.object({
message: z.string(),
}),
outputSchema: z.object({
formatted: z.string(),
}),
execute: async ({ inputData }) => {
const { message } = inputData
return {
formatted: message.toUpperCase(),
}
},
})
import { createStep } from '@mastra/core/workflows'
import * as v from 'valibot'
import { toStandardJsonSchema } from '@valibot/to-json-schema'
const step1 = createStep({
id: 'step-1',
inputSchema: toStandardJsonSchema(
v.object({
message: v.string(),
}),
),
outputSchema: toStandardJsonSchema(
v.object({
formatted: v.string(),
}),
),
execute: async ({ inputData }) => {
const { message } = inputData
return {
formatted: message.toUpperCase(),
}
},
})
import { createStep } from '@mastra/core/workflows'
import { type } from 'arktype'
const step1 = createStep({
id: 'step-1',
inputSchema: type({
message: 'string',
}),
outputSchema: type({
formatted: 'string',
}),
execute: async ({ inputData }) => {
const { message } = inputData
return {
formatted: message.toUpperCase(),
}
},
})
Créer des étapes à partir d’AgentsLien direct vers Créer des étapes à partir d’Agents
Vous pouvez créer une étape directement à partir d’un Agent. L’étape utilise le nom de l’Agent comme ID.
Étape d’Agent de baseLien direct vers Étape d’Agent de base
import { testAgent } from '../agents/test-agent'
const agentStep = createStep(testAgent)
// inputSchema: { prompt: string }
// outputSchema: { text: string }
Étape d’Agent avec sortie structuréeLien direct vers Étape d’Agent avec sortie structurée
Transmettez structuredOutput pour que l’Agent renvoie des données structurées typées :
const articleSchema = z.object({
title: z.string(),
summary: z.string(),
tags: z.array(z.string()),
})
const agentStep = createStep(testAgent, {
structuredOutput: { schema: articleSchema },
})
// inputSchema: { prompt: string }
// outputSchema: { title: string, summary: string, tags: string[] }
Options d’étape d’AgentLien direct vers Options d’étape d’Agent
structuredOutput:
onFinish:
Paramètres du constructeurLien direct vers Paramètres du constructeur
id:
description:
inputSchema:
outputSchema:
resumeSchema:
suspendSchema:
stateSchema:
requestContextSchema:
execute:
inputData:
resumeData:
suspendData:
mastra:
getStepResult:
getInitData:
suspend:
state:
setState:
runId:
requestContext?:
retryCount?:
scorers:
{ [name]: { scorer, sampling? } } ou une fonction qui en renvoie une. Le scoring s’exécute de manière asynchrone et ne bloque pas le Workflow. Consultez Évaluer la sortie d’une étape.retries:
execute de l’étape si elle lève une erreur.metadata:
Évaluer la sortie d’une étapeLien direct vers Évaluer la sortie d’une étape
Associez des scorers à une étape pour évaluer automatiquement la sortie de cette étape à son exécution, au lieu d’évaluer uniquement la réponse finale du Workflow. Cela est utile pour les Workflows à plusieurs étapes et RAG, lorsque vous voulez voir quelle étape a dégradé la qualité, par exemple si une étape de récupération a renvoyé des fragments pertinents avant que les étapes suivantes ne raisonnent à partir d’eux.
Chaque scorer reçoit l’input et l’output propres à l’étape. Le scoring s’exécute de manière asynchrone après la réussite de l’étape, et le résultat est stocké avec la trace de l’étape. Utilisez sampling pour contrôler la fréquence d’exécution d’un scorer.
L’exemple suivant associe un scorer à une étape de récupération afin que chaque exécution soit évaluée :
import { createStep } from '@mastra/core/workflows'
import { z } from 'zod'
import { retrievalRelevanceScorer } from '../scorers/retrieval-relevance'
const retrievalStep = createStep({
id: 'retrieval',
inputSchema: z.object({ query: z.string() }),
outputSchema: z.object({ query: z.string(), chunks: z.array(z.string()) }),
scorers: {
retrievalRelevance: {
scorer: retrievalRelevanceScorer(),
sampling: { type: 'ratio', rate: 1 },
},
},
execute: async ({ inputData }) => {
const chunks = await retrieve(inputData.query)
return { query: inputData.query, chunks }
},
})
Associez un scorer à chaque étape que vous voulez mesurer pour établir des scores par étape dans un Workflow à plusieurs étapes. Comme le scoring est limité à une seule étape, vous n’avez pas besoin d’une métrique dédiée inter-étapes pour voir où la qualité change.
Les étapes d’Agent et de Tool ajoutées avec Workflow.agent() et Workflow.tool() acceptent la même option scorers dans leurs options d’étape.
Consultez la présentation des Scorers pour savoir comment s’exécutent les évaluations en direct et où les résultats sont stockés, ainsi que les Scorers personnalisés pour créer les vôtres.