Slide 1

Slide 1 text

Mastra で社内業務を半自動化してみた 2025/05/19 スタートアップのTypeScript実践Tips 1

Slide 2

Slide 2 text

自己紹介 Ryoma Aoki (@dogggggo, @dogggggo11) STRACT で開発全般を担当 (フルタイムのエンジニアがまだ2名なもので) 最近は主に PLUG ショッピングの立ち上げや クラウドインフラのおもり STRACT 入社前は、EC や金融・決済周りの 新規開発やシステムリプレイスなど 最近の流行りは懸垂 (伸び悩み中) 2

Slide 3

Slide 3 text

弊社のサービスについて 3

Slide 4

Slide 4 text

弊社のサービスについて 4

Slide 5

Slide 5 text

キャッシュバックについて 配信開始・変更・終了依頼 提携企業 仲介業者 弊社 5

Slide 6

Slide 6 text

キャッシュバックについて 配信開始・変更・終了依頼 提携企業 仲介業者 弊社 メールで連絡が届き、メールの情報を元に人手でデータを修正 毎日大量に届くので対応が大変 6

Slide 7

Slide 7 text

キャッシュバックについて 配信開始・変更・終了依頼 提携企業 仲介業者 弊社 メールで連絡が届き、メールの情報を元に人手でデータを修正 毎日大量に届くので対応が大変 この作業を自動化しようというのが今回のお話 メールの文面はさまざまなので、LLM で楽にハンドリングしたい 7

Slide 8

Slide 8 text

キャッシュバックについて 配信開始・変更・終了依頼 提携企業 仲介業者 弊社 メールで連絡が届き、メールの情報を元に人手でデータを修正 毎日大量に届くので対応が大変 この作業を自動化しようというのが今回のお話 メールの文面はさまざまなので、LLM で楽にハンドリングしたい 弊社はほぼ全てで TypeScript を採用しているので、TypeScript で実装できると◯ 8

Slide 9

Slide 9 text

Mastra TypeScript で AI agents、AI workflows を定義できるフレームワーク 9

Slide 10

Slide 10 text

Mastra 2024年9月に v0.1.0 2025年2月頃からダウンロード数が伸び始め、3月頃から SNS でよく目にするように (主観) 10

Slide 11

Slide 11 text

Mastra の主な機能 Agents Tools & MCP Memory Workflows RAG Deployment Observability Evals 11

Slide 12

Slide 12 text

Mastra の主な機能 (今回利用したもの) Agents Tools & MCP Memory Workflows RAG Deployment Observability Evals 12

Slide 13

Slide 13 text

Mastra の主な機能 (Agents) Agents Tools & MCP Memory Workflows RAG Deployment Observability Evals const myAgent = new Agent({ name: "myAgent", instructions: "You are a helpful assistant.", model: openai("gpt-4o-mini"), }); const response = await myAgent.generate("..."); const stream = await myAgent.stream("..."); Vercel の AI SDK をベースに、どのプロバイダのどのモデルであっても 統一的なインタフェースで扱える。 13

Slide 14

Slide 14 text

Mastra の主な機能 (Workflows) Agents Tools & MCP Memory Workflows RAG Deployment Observability Evals const myWorkflow = createWorkflow({ id: "myWorkflow", inputSchema: z.object({ in: z.string() }), outputSchema: z.object({ out: z.string() }), steps: [step1, step2a, step2b, step3] }) .then(step1) .branch([ [async ({ inputData }) => inputData.foo, step2a], [async ({ inputData }) => !inputData.foo, step2b] ]) .then(step3) .commit(); 他に parallel, loop, foreach があったり、workflow を入れ子にできたり。 (※ 上記は最近新しく出た vNext Workflows の話) 14

Slide 15

Slide 15 text

今回作成してみたフロー 1. メール転送 2. メールの内容認識・ 必要な情報抽出 3. 下書きデータ作成 4. 通知 5. 下書き確認 + 承認 Slack Mastra LLM backend API ⼈ 管理画⾯ 15

Slide 16

Slide 16 text

実装例 (agent) const myAgent = new Agent({ name: "myAgent", instructions: ` メールの内容が以下のいずれにあてはまるかを判定してください。 - キャッシュバック案件の掲載開始依頼 - キャッシュバック案件の掲載内容変更依頼 - キャッシュバック案件の掲載終了依頼 いずれかにあてはまる場合には、次の情報を抽出してください。 ... xxx にあてはまる場合は、次の JSON 形式でレスポンスを返してください。 { ... } `, model: google("gemini-2.0-flash"), }); LLM にメールの内容がどういった 内容かを判定してもらい、それぞ れの内容に応じて必要な情報を抽 出して、指定した形式で出力する ように指示。 16

Slide 17

Slide 17 text

実装例 (workflow) const myWorkflow = createWorkflow({ id: "myWorkflow", inputSchema: z.object({ ... }), outputSchema: z.object({ ... }), steps: [filter, extract, skip, createDraft], }) .then(filter) .branch([ [async ({ inputData }) => inputData.isTarget, extract], [async ({ inputData }) => !inputData.isTarget, skip], ]) .then(createDraft) .commit(); 無関係なメールが流れてくることも あるので、あらかじめルールベース で処理不要と判断できるものは除外 して、LLM のコストを節約。 処理対象と判断されたら、先ほどの agent を使って処理。 17

Slide 18

Slide 18 text

実装例 (workflow の呼び出し) const mastra = new Mastra({ server: { apiRoutes: [ registerApiRoute("/xxx", { method: "POST", handler: async (c) => { // authentication, validation const { start } = myWorkflow.createRun(); const res = await start({ inputData: { ... }, }); return c.json(res); }, }) ] } }); Mastra インスタンスに workflow や agent を登録すると、自動で各種 API エンドポイン トが生やされるが、今回は custom API route を作成して、そちらでリクエストを受け取る (Mastra を起動すると Hono ベースの HTTP サーバが立ち上がる)。 {workflow インスタンス}.createRun() で作成 された run インスタンスを start() すると workflow を起動できる。 18

Slide 19

Slide 19 text

所感 今回ぐらいの用途であれば、Mastra を使わずとも、Vercel の AI SDK を使うぐらいでち ょうどよかった RAG とかやるのであれば、Mastra 使うと楽にサクッとできそう 評価や observability 周りも all in one なのはとっつきやすくて Good これからどんどん発展していくと思うので、今後の開発に期待 19

Slide 20

Slide 20 text

今後 トイルのような業務はまだまだ山ほどあるので、そういった業務は同様に(半)自動化し て、人間は人間がやるべき仕事に集中できるようにしていきたい LLM をプロダクトにも活用していきたく、今現在開発している PLUG ショッピングでい ろいろ仕込み中 20

Slide 21

Slide 21 text

21