条件分岐
ワークフローは条件に応じて異なる処理経路を取る必要があることがよくあります。以下の例では、ステップとワークフローの両方を使って、.branch()
による条件付きフローを作成する方法を示します。
ステップによる条件分岐ロジック
この例では、ワークフローは条件に応じて2つのステップのいずれかを実行するために .branch()
を使用します。入力の value
が10以下の場合は lessThanStep
を実行して 0
を返します。値が10より大きい場合は greaterThanStep
を実行して 20
を返します。最初に一致したブランチのみが実行され、その出力がワークフロー全体の出力になります。
src/mastra/workflows/example-branch-steps.ts
import { createWorkflow, createStep } from "@mastra/core/workflows";
import { z } from "zod";
const lessThanStep = createStep({
id: "less-than-step",
description: "if value is <=10, return 0",
inputSchema: z.object({
value: z.number()
}),
outputSchema: z.object({
value: z.number()
}),
execute: async () => {
return {
value: 0
};
}
});
const greaterThanStep = createStep({
id: "greater-than-step",
description: "if value is >10, return 20",
inputSchema: z.object({
value: z.number()
}),
outputSchema: z.object({
value: z.number()
}),
execute: async () => {
return {
value: 20
};
}
});
export const branchSteps = createWorkflow({
id: "branch-workflow",
inputSchema: z.object({
value: z.number()
}),
outputSchema: z.object({
value: z.number()
})
})
.branch([
[async ({ inputData: { value } }) => value <= 10, lessThanStep],
[async ({ inputData: { value } }) => value > 10, greaterThanStep]
])
.commit();
入力値が10以下の場合と10より大きい場合の両方で、この例を実行してみてください。
ワークフローによる条件分岐
この例では、.branch()
を使って条件に応じて2つのネストされたワークフローのいずれかを実行します。入力 value
が10以下なら lessThanWorkflow
が実行され、その中で lessThanStep
が走ります。値が10より大きい場合は greaterThanWorkflow
が実行され、その中で greaterThanStep
が走ります。
src/mastra/workflows/example-branch-workflows.ts
import { createWorkflow, createStep } from "@mastra/core/workflows";
import { z } from "zod";
const lessThanStep = createStep({
id: "less-than-step",
description: "if value is <=10, return 0",
inputSchema: z.object({
value: z.number()
}),
outputSchema: z.object({
value: z.number()
}),
execute: async () => {
return {
value: 0
};
}
});
const greaterThanStep = createStep({
id: "greater-than-step",
description: "if value is >10, return 20",
inputSchema: z.object({
value: z.number()
}),
outputSchema: z.object({
value: z.number()
}),
execute: async () => {
return {
value: 20
};
}
});
export const lessThanWorkflow = createWorkflow({
id: "less-than-workflow",
inputSchema: z.object({
value: z.number()
}),
outputSchema: z.object({
value: z.number()
})
})
.then(lessThanStep)
.commit();
export const greaterThanWorkflow = createWorkflow({
id: "greater-than-workflow",
inputSchema: z.object({
value: z.number()
}),
outputSchema: z.object({
value: z.number()
})
})
.then(greaterThanStep)
.commit();
export const branchWorkflows = createWorkflow({
id: "branch-workflow",
inputSchema: z.object({
value: z.number()
}),
outputSchema: z.object({
value: z.number()
})
})
.branch([
[async ({ inputData: { value } }) => value <= 10, lessThanWorkflow],
[async ({ inputData: { value } }) => value > 10, greaterThanWorkflow]
])
.commit();
入力値が10以下の場合と10より大きい場合の両方で、この例を実行してみてください。
関連項目
ワークフロー(レガシー)
以下のリンクは、レガシー版ワークフローのサンプルドキュメントです。