92 lines
2.4 KiB
Markdown
92 lines
2.4 KiB
Markdown
|
|
# Using Agent in Workflow
|
||
|
|
|
||
|
|
Now you'll create a workflow step that uses your AI agent to provide intelligent content analysis.
|
||
|
|
|
||
|
|
In each step, in the execute function, you have access to the `mastra` class which provides you the ability to access Agents, Tools, and even other Workflows. In this case, we use the `mastra` class to get our agent and call that agent's `generate()` function.
|
||
|
|
|
||
|
|
## Creating an AI Analysis Step
|
||
|
|
|
||
|
|
Add this step to your workflow file:
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
const aiAnalysisStep = createStep({
|
||
|
|
id: "ai-analysis",
|
||
|
|
description: "AI-powered content analysis",
|
||
|
|
inputSchema: z.object({
|
||
|
|
content: z.string(),
|
||
|
|
type: z.string(),
|
||
|
|
wordCount: z.number(),
|
||
|
|
metadata: z.object({
|
||
|
|
readingTime: z.number(),
|
||
|
|
difficulty: z.enum(["easy", "medium", "hard"]),
|
||
|
|
processedAt: z.string(),
|
||
|
|
}),
|
||
|
|
summary: z.string(),
|
||
|
|
}),
|
||
|
|
outputSchema: z.object({
|
||
|
|
content: z.string(),
|
||
|
|
type: z.string(),
|
||
|
|
wordCount: z.number(),
|
||
|
|
metadata: z.object({
|
||
|
|
readingTime: z.number(),
|
||
|
|
difficulty: z.enum(["easy", "medium", "hard"]),
|
||
|
|
processedAt: z.string(),
|
||
|
|
}),
|
||
|
|
summary: z.string(),
|
||
|
|
aiAnalysis: z.object({
|
||
|
|
score: z.number(),
|
||
|
|
feedback: z.string(),
|
||
|
|
}),
|
||
|
|
}),
|
||
|
|
execute: async ({ inputData, mastra }) => {
|
||
|
|
const { content, type, wordCount, metadata, summary } = inputData;
|
||
|
|
|
||
|
|
// Create prompt for the AI agent
|
||
|
|
const prompt = `
|
||
|
|
Analyze this ${type} content:
|
||
|
|
|
||
|
|
Content: "${content}"
|
||
|
|
Word count: ${wordCount}
|
||
|
|
Reading time: ${metadata.readingTime} minutes
|
||
|
|
Difficulty: ${metadata.difficulty}
|
||
|
|
|
||
|
|
Please provide:
|
||
|
|
1. A quality score from 1-10
|
||
|
|
2. Brief feedback on strengths and areas for improvement
|
||
|
|
|
||
|
|
Format as JSON: {"score": number, "feedback": "your feedback here"}
|
||
|
|
`;
|
||
|
|
|
||
|
|
// Get the contentAgent from the mastra instance.
|
||
|
|
const contentAgent = mastra.getAgent("contentAgent");
|
||
|
|
const { text } = await contentAgent.generate([
|
||
|
|
{ role: "user", content: prompt },
|
||
|
|
]);
|
||
|
|
|
||
|
|
// Parse AI response (with fallback)
|
||
|
|
let aiAnalysis;
|
||
|
|
try {
|
||
|
|
aiAnalysis = JSON.parse(text);
|
||
|
|
} catch {
|
||
|
|
aiAnalysis = {
|
||
|
|
score: 7,
|
||
|
|
feedback: "AI analysis completed. " + text,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log(`🤖 AI Score: ${aiAnalysis.score}/10`);
|
||
|
|
|
||
|
|
return {
|
||
|
|
content,
|
||
|
|
type,
|
||
|
|
wordCount,
|
||
|
|
metadata,
|
||
|
|
summary,
|
||
|
|
aiAnalysis,
|
||
|
|
};
|
||
|
|
},
|
||
|
|
});
|
||
|
|
```
|
||
|
|
|
||
|
|
Your agent-powered step is ready! Next, you'll add it to your workflow for complete AI-enhanced content processing.
|