Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Mastraで社内業務を半自動化してみた
Search
Ryoma Aoki
May 19, 2025
410
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Mastraで社内業務を半自動化してみた
Ryoma Aoki
May 19, 2025
More Decks by Ryoma Aoki
See All by Ryoma Aoki
より意味のある監視を目指して、外形監視の有効活用
dogggggo
5
7.9k
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Skip the Path - Find Your Career Trail
mkilby
1
240
We Have a Design System, Now What?
morganepeng
55
8.4k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
310
Are puppies a ranking factor?
jonoalderson
2
4k
Facilitating Awesome Meetings
lara
57
7.2k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
610
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Transcript
Mastra で社内業務を半自動化してみた 2025/05/19 スタートアップのTypeScript実践Tips 1
自己紹介 Ryoma Aoki (@dogggggo, @dogggggo11) STRACT で開発全般を担当 (フルタイムのエンジニアがまだ2名なもので) 最近は主に PLUG
ショッピングの立ち上げや クラウドインフラのおもり STRACT 入社前は、EC や金融・決済周りの 新規開発やシステムリプレイスなど 最近の流行りは懸垂 (伸び悩み中) 2
弊社のサービスについて 3
弊社のサービスについて 4
キャッシュバックについて 配信開始・変更・終了依頼 提携企業 仲介業者 弊社 5
キャッシュバックについて 配信開始・変更・終了依頼 提携企業 仲介業者 弊社 メールで連絡が届き、メールの情報を元に人手でデータを修正 毎日大量に届くので対応が大変 6
キャッシュバックについて 配信開始・変更・終了依頼 提携企業 仲介業者 弊社 メールで連絡が届き、メールの情報を元に人手でデータを修正 毎日大量に届くので対応が大変 この作業を自動化しようというのが今回のお話 メールの文面はさまざまなので、LLM で楽にハンドリングしたい
7
キャッシュバックについて 配信開始・変更・終了依頼 提携企業 仲介業者 弊社 メールで連絡が届き、メールの情報を元に人手でデータを修正 毎日大量に届くので対応が大変 この作業を自動化しようというのが今回のお話 メールの文面はさまざまなので、LLM で楽にハンドリングしたい
弊社はほぼ全てで TypeScript を採用しているので、TypeScript で実装できると◯ 8
Mastra TypeScript で AI agents、AI workflows を定義できるフレームワーク 9
Mastra 2024年9月に v0.1.0 2025年2月頃からダウンロード数が伸び始め、3月頃から SNS でよく目にするように (主観) 10
Mastra の主な機能 Agents Tools & MCP Memory Workflows RAG Deployment
Observability Evals 11
Mastra の主な機能 (今回利用したもの) Agents Tools & MCP Memory Workflows RAG
Deployment Observability Evals 12
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
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
今回作成してみたフロー 1. メール転送 2. メールの内容認識・ 必要な情報抽出 3. 下書きデータ作成 4. 通知
5. 下書き確認 + 承認 Slack Mastra LLM backend API ⼈ 管理画⾯ 15
実装例 (agent) const myAgent = new Agent({ name: "myAgent", instructions:
` メールの内容が以下のいずれにあてはまるかを判定してください。 - キャッシュバック案件の掲載開始依頼 - キャッシュバック案件の掲載内容変更依頼 - キャッシュバック案件の掲載終了依頼 いずれかにあてはまる場合には、次の情報を抽出してください。 ... xxx にあてはまる場合は、次の JSON 形式でレスポンスを返してください。 { ... } `, model: google("gemini-2.0-flash"), }); LLM にメールの内容がどういった 内容かを判定してもらい、それぞ れの内容に応じて必要な情報を抽 出して、指定した形式で出力する ように指示。 16
実装例 (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
実装例 (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
所感 今回ぐらいの用途であれば、Mastra を使わずとも、Vercel の AI SDK を使うぐらいでち ょうどよかった RAG とかやるのであれば、Mastra
使うと楽にサクッとできそう 評価や observability 周りも all in one なのはとっつきやすくて Good これからどんどん発展していくと思うので、今後の開発に期待 19
今後 トイルのような業務はまだまだ山ほどあるので、そういった業務は同様に(半)自動化し て、人間は人間がやるべき仕事に集中できるようにしていきたい LLM をプロダクトにも活用していきたく、今現在開発している PLUG ショッピングでい ろいろ仕込み中 20
21