目的
Mastra の Agent 概念を最小構成で体験し、友人の古着屋の SNS 投稿を自動化する - 150〜300 文字の商品説明 を1コマンドで生成できるようにする。
1. なぜ作ったのか?
前回記事を投稿した後もMastraをそこそこ触っていまして、まずは全体把握はできたので、次は機能について一個ずつ深く理解していこうと思いました。
前回の記事↓
そして、せっかくなら何か作りながら勉強したいと思い、
今回は、友人が経営する古着屋さんにて、Instagramに商品写真を載せるたびに説明文を毎回手打ちしていたのでそこを効率化できるサービスを作ろうと決めました。
そこでまずはAgentの理解をすることを勉強の目的として
“ブランド + 年代 + 色 + シルエット” などのキーワードを投げるだけで、
専門家っぽい説明文を返す AIエージェント を実装してみました。
2. Mastra と Agent とは?
概念 | 自分の解釈 |
---|---|
Mastra | TypeScriptで使用できるAIエージェント開発のためのオープンソースフレームワーク |
Agent | あらかじめ設定された「指示(Instructions)」に従って自律的に動作し、外部APIやワークフローと連携しながらAI処理を実行する仕組み |
ポイント
- instructions に振る舞い・入力形式・出力制約を全部書ける
- model を指定するだけで OpenAI / その他 LLM を切り替え可能
- Mastra 側は
agents: { ... }
と渡すだけで実行環境が出来あがる
3. ディレクトリ構成と環境
# ディレクトリ構成
src/
└ mastra/
├ agents/
│ └ index.ts ← ★Agent 定義
└ index.ts ← ★Mastra エントリポイント
.env ← OPENAI_API_KEY を格納
package.json
tsconfig.json
OPENAI_API_KEY=your_openai_key
4. Agent 実装
import { Agent } from "@mastra/core";
import { openai } from "@ai-sdk/openai";
export const vintageAgent = new Agent({
name: "Vintage Agent",
instructions: `
あなたはファッションに精通したAIアシスタントです。以下を必ず守ってください。
【振る舞い・トーン】
- 専門知識を “詳しく・的確に・魅力的に” 伝える
- 親しみやすく信頼感のある語り口
- 専門用語にはカッコ書きで補足
【入力】
- ブランド名 / 年代 / 色 / フィット感 / 素材 など複数キーワード
- 不足・曖昧な場合も推測して説明
【出力】
- 日本語、約300文字(±10文字OK)
- 2〜3文で特徴・素材・シルエット・着こなしを網羅
- 具体名(例:タグ、加工、コーデ提案)を入れる
`,
model: openai("gpt-4.1-nano"),
});
import { Mastra } from "@mastra/core";
import { vintageAgent } from "./agents";
const mastra = new Mastra({
agents: { vintageAgent },
});
(async () => {
const keyword = process.argv.slice(2).join(" ");
const res = await mastra.agents.vintageAgent.run(keyword);
console.log(res.message);
})();
5. 実行結果
モデルは"gpt-4.1-nano"を使用しました(一番安くて少しでも節約するために...笑)
結果として、入力した単語から割と古着屋の店員さんがよく記載している説明文に近い文章が生成されました。
6. おわりに
今回はMastraの習得を目的としていたため、ローカルでサクッと動かす程度の開発でしたが、Reactと紐付けてアプリとして実際にお店で使ってもらえるように完成させようと思っています。
また、Mastraに関しては他にもワークフローやツール、RAGなどもあるので、今回と同じようにサクッと動かす程度の開発をしてQiitaでアウトプットをして学んでいこうと思います。