Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Mastraで社内業務を半自動化してみた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ryoma Aoki
May 19, 2025
380
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.8k
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
How GitHub (no longer) Works
holman
316
150k
The Spectacular Lies of Maps
axbom
PRO
1
820
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Mind Mapping
helmedeiros
PRO
1
260
Exploring anti-patterns in Rails
aemeredith
3
420
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
HDC tutorial
michielstock
2
720
Embracing the Ebb and Flow
colly
88
5.1k
How to Talk to Developers About Accessibility
jct
2
240
Typedesign – Prime Four
hannesfritz
42
3.1k
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