Step クラス
Step クラスは、実行ロジック、データ検証、入出力処理をカプセル化し、Workflow 内の個々の処理単位を定義します。 Tool または Agent をパラメーターとして受け取り、それらからステップを自動的に作成することもできます。
使用例使用例への直接リンク
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,
}
},
})
スキーマを定義するスキーマを定義するへの直接リンク
ステップの inputSchema と outputSchema は、Standard JSON Schema をサポートする任意のライブラリで定義できます。Zod、Valibot、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(),
}
},
})
Agent からステップを作成するAgent からステップを作成するへの直接リンク
Agent からステップを直接作成できます。ステップの ID には Agent の名前が使用されます。
基本的な Agent ステップ基本的な Agent ステップへの直接リンク
import { testAgent } from '../agents/test-agent'
const agentStep = createStep(testAgent)
// inputSchema: { prompt: string }
// outputSchema: { text: string }
構造化出力を使用する Agent ステップ構造化出力を使用する Agent ステップへの直接リンク
Agent が型付きの構造化データを返すようにするには、structuredOutput を渡します。
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[] }
Agent ステップのオプションAgent ステップのオプションへの直接リンク
structuredOutput:
onFinish:
コンストラクターのパラメーターコンストラクターのパラメーターへの直接リンク
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? } } のマップ、またはこのマップを返す関数を指定します。スコアリングは非同期で実行され、Workflow をブロックしません。ステップ出力をスコアリングするを参照してください。retries:
execute 関数が例外をスローした場合の再試行回数。metadata:
ステップ出力をスコアリングするステップ出力をスコアリングするへの直接リンク
scorers をステップに付加すると、Workflow の最終回答だけをスコアリングするのではなく、ステップの実行時にその出力を自動的に評価できます。複数ステップの Workflow や RAG Workflow で品質が低下したステップを特定したい場合に役立ちます。たとえば、後続のステップが取得結果について推論する前に、取得ステップが関連性のあるチャンクを返したかどうかを確認できます。
各 Scorer は、そのステップ自身の input と output を受け取ります。スコアリングはステップが成功した後に非同期で実行され、結果はそのステップの trace に保存されます。Scorer の実行頻度を制御するには sampling を使用します。
次の例では、すべての実行がスコアリングされるよう、取得ステップに Scorer を付加します。
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 }
},
})
測定する各ステップに Scorer を付加すると、複数ステップの Workflow 全体でステップ単位のスコアを構築できます。スコアリングの対象は 1 つのステップに限定されるため、品質の変化箇所を確認するためにステップをまたぐ専用の指標を用意する必要はありません。
Workflow.agent() と Workflow.tool() で追加した Agent ステップと Tool ステップも、ステップオプションで同じ scorers オプションを受け取ります。
Scorer の概要では live evaluation の実行方法と結果の保存場所を、カスタム Scorerでは独自の Scorer の構築方法を確認できます。