Classe Workflow
La classe Workflow permet de créer des machines à états pour des séquences complexes d’opérations avec branchement conditionnel et validation des données.
Exemple d’utilisationLien direct vers Exemple d’utilisation
import { createWorkflow } from '@mastra/core/workflows'
import { z } from 'zod'
export const workflow = createWorkflow({
id: 'test-workflow',
inputSchema: z.object({
value: z.string(),
}),
outputSchema: z.object({
value: z.string(),
}),
})
Définir des schémasLien direct vers Définir des schémas
Vous pouvez définir les inputSchema et outputSchema du Workflow avec toute bibliothèque prenant en charge Standard JSON Schema, notamment Zod, Valibot et ArkType.
- Zod
- Valibot
- ArkType
import { createWorkflow, createStep } from "@mastra/core/workflows";
import { z } from "zod";
const step1 = createStep({...});
export const testWorkflow = createWorkflow({
id: "test-workflow",
inputSchema: z.object({
message: z.string()
}),
outputSchema: z.object({
output: z.string()
})
})
.then(step1)
.commit();
import { createWorkflow, createStep } from "@mastra/core/workflows";
import * as v from "valibot";
import { toStandardJsonSchema } from "@valibot/to-json-schema";
const step1 = createStep({...});
export const testWorkflow = createWorkflow({
id: "test-workflow",
inputSchema: toStandardJsonSchema(v.object({
message: v.string()
})),
outputSchema: toStandardJsonSchema(v.object({
output: v.string()
}))
})
.then(step1)
.commit();
import { createWorkflow, createStep } from "@mastra/core/workflows";
import { type } from "arktype";
const step1 = createStep({...});
export const testWorkflow = createWorkflow({
id: "test-workflow",
inputSchema: type({
message: "string"
}),
outputSchema: type({
output: "string"
})
})
.then(step1)
.commit();
Paramètres du constructeurLien direct vers Paramètres du constructeur
id:
inputSchema:
outputSchema:
stateSchema?:
requestContextSchema?:
schedule?:
id?:
cron:
timezone?:
inputData?:
initialState?:
requestContext?:
metadata?:
options?:
tracingPolicy?:
validateInputs?:
shouldPersistSnapshot?:
pruneSnapshot?:
onFinish?:
status:
result?:
error?:
steps:
tripwire?:
runId:
workflowId:
resourceId?:
getInitData:
mastra?:
requestContext:
logger:
state:
onError?:
status:
error?:
steps:
tripwire?:
runId:
workflowId:
resourceId?:
getInitData:
mastra?:
requestContext:
logger:
state:
Exécuter avec un état initialLien direct vers Exécuter avec un état initial
Lors du démarrage d’une exécution de Workflow, vous pouvez transmettre initialState pour définir les valeurs de départ de l’état du Workflow :
const run = await workflow.createRun()
const result = await run.start({
inputData: { value: 'hello' },
initialState: {
counter: 0,
items: [],
},
})
L’objet initialState doit correspondre à la structure définie dans le stateSchema du Workflow. Consultez État du Workflow pour plus de détails.
État du WorkflowLien direct vers État du Workflow
Le status d’un Workflow indique son état d’exécution actuel. Les valeurs possibles sont :
success:
failed:
suspended:
tripwire:
Gérer l’état tripwireLien direct vers Gérer l’état tripwire
Lorsqu’un Workflow contient une étape d’Agent qui déclenche un tripwire, le Workflow renvoie status: 'tripwire' et inclut les détails du tripwire :
const run = await workflow.createRun()
const result = await run.start({ inputData: { message: 'Hello' } })
if (result.status === 'tripwire') {
console.log('Workflow terminated by tripwire:', result.tripwire?.reason)
console.log('Processor ID:', result.tripwire?.processorId)
console.log('Retry requested:', result.tripwire?.retry)
}
Cela diffère de status: 'failed', qui indique une erreur inattendue. Un état tripwire signifie qu’un processeur a intentionnellement arrêté l’exécution (par exemple, pour la modération du contenu).