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
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
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Skip the Path - Find Your Career Trail
mkilby
1
150
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
55k
The Curse of the Amulet
leimatthew05
2
13k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
360
30 Presentation Tips
portentint
PRO
1
330
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
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