マルチエージェントワークフロー
この例では、ワーカーエージェントとスーパーバイザーエージェントを使用して、複数のエージェント間で作業成果物を受け渡すエージェンティックワークフローの作成方法を示します。
この例では、2つのエージェントを順番に呼び出すシーケンシャルワークフローを作成します:
- 初期のブログ投稿を書くCopywriterエージェント
- コンテンツを洗練するEditorエージェント
まず、必要な依存関係をインポートします:
import { openai } from "@ai-sdk/openai";
import { anthropic } from "@ai-sdk/anthropic";
import { Agent } from "@mastra/core/agent";
import { createStep, createWorkflow } from "@mastra/core/workflows";
import { z } from "zod";
初期のブログ投稿を生成するcopywriterエージェントを作成します:
const copywriterAgent = new Agent({
name: "Copywriter",
instructions: "You are a copywriter agent that writes blog post copy.",
model: anthropic("claude-3-5-sonnet-20241022"),
});
エージェントを実行し、レスポンスを処理するcopywriterステップを定義します:
const copywriterStep = createStep({
id: "copywriterStep",
inputSchema: z.object({
topic: z.string(),
}),
outputSchema: z.object({
copy: z.string(),
}),
execute: async ({ inputData }) => {
if (!inputData?.topic) {
throw new Error("Topic not found in trigger data");
}
const result = await copywriterAgent.generate(
`Create a blog post about ${inputData.topic}`,
);
console.log("copywriter result", result.text);
return {
copy: result.text,
};
},
});
copywriterのコンテンツを洗練するeditorエージェントを設定します:
const editorAgent = new Agent({
name: "Editor",
instructions: "You are an editor agent that edits blog post copy.",
model: openai("gpt-4o-mini"),
});
copywriterの出力を処理するeditorステップを作成します:
const editorStep = createStep({
id: "editorStep",
inputSchema: z.object({
copy: z.string(),
}),
outputSchema: z.object({
finalCopy: z.string(),
}),
execute: async ({ inputData }) => {
const copy = inputData?.copy;
const result = await editorAgent.generate(
`Edit the following blog post only returning the edited copy: ${copy}`,
);
console.log("editor result", result.text);
return {
finalCopy: result.text,
};
},
});
ワークフローを設定し、ステップを実行します:
const myWorkflow = createWorkflow({
id: "my-workflow",
inputSchema: z.object({
topic: z.string(),
}),
outputSchema: z.object({
finalCopy: z.string(),
}),
});
// Run steps sequentially.
myWorkflow.then(copywriterStep).then(editorStep).commit();
const run = await myWorkflow.createRunAsync();
const res = await run.start({
inputData: { topic: "React JavaScript frameworks" },
});
console.log("Response: ", res);
GitHubで例を見る