Calling an Agent Inside a Step
Workflows can call agents to generate dynamic responses from within a step. This example shows how to define an agent, register it with the Mastra instance, and invoke it using .generate() inside a workflow step. The workflow takes a city name as input and returns a fact about the corresponding city.
Creating an agent
Create a simple agent that returns facts about a city.
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";
export const cityAgent = new Agent({
name: "city-agent",
description: "Create facts for a city",
instructions: `Return an interesting fact based on the city provided`,
model: openai("gpt-4o"),
});
Registering an agent
To call an agent from a workflow, the agent must be registered in the Mastra instance.
import { Mastra } from "@mastra/core/mastra";
import { cityAgent } from "./agents/example-city-agent";
export const mastra = new Mastra({
// ...
agents: { cityAgent },
});
Calling an agent
Get a reference to the registered agent using getAgent(), then call .generate() inside the step, passing in the input data.
import { createWorkflow, createStep } from "@mastra/core/workflows";
import { z } from "zod";
const step1 = createStep({
id: "step-1",
description: "passes value from input to agent",
inputSchema: z.object({
city: z.string(),
}),
outputSchema: z.object({
facts: z.string(),
}),
execute: async ({ inputData, mastra }) => {
const { city } = inputData;
const agent = mastra.getAgent("cityAgent");
const response = await agent.generate(
`Create an interesting fact about ${city}`,
);
return {
facts: response.text,
};
},
});
export const callAgent = createWorkflow({
id: "agent-workflow",
inputSchema: z.object({
city: z.string(),
}),
outputSchema: z.object({
facts: z.string(),
}),
})
.then(step1)
.commit();