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,
}
},
})
定义 schema定义 schema的直接链接
可以使用任何支持 Standard JSON Schema 的库定义步骤的 inputSchema 和 outputSchema,包括 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 创建步骤。该步骤会使用 agent 的名称作为 ID。
基本 agent 步骤基本 agent 步骤的直接链接
import { testAgent } from '../agents/test-agent'
const agentStep = createStep(testAgent)
// inputSchema: { prompt: string }
// outputSchema: { text: string }
带结构化输出的 agent 步骤带结构化输出的 agent 步骤的直接链接
传入 structuredOutput 可让 agent 返回带类型的结构化数据:
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 的最终答案评分。这适用于多步骤和 RAG workflow,例如,你可以在后续步骤对检索结果进行推理之前,判断检索步骤是否返回了相关 chunk,从而了解是哪个步骤降低了质量。
每个 scorer 都会接收该步骤自身的 input 和 output。步骤成功后会异步运行评分,并将结果存储到步骤的 trace 中。使用 sampling 控制 scorer 的运行频率。
以下示例将 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 构建逐步骤评分。由于评分范围限定在单个步骤内,因此无需专用的跨步骤指标也能了解质量在何处发生变化。
通过 Workflow.agent() 和 Workflow.tool() 添加的 agent 和 tool 步骤,在其步骤选项中也接受相同的 scorers 选项。
请访问 Scorers 概览,了解实时评估如何运行以及结果存储在哪里;请参阅自定义 scorers,了解如何构建自己的 scorer。