Upgrade to Pro — share decks privately, control downloads, hide ads and more …

toB SaaSに導入したAI Agent機能開発奮闘記

toB SaaSに導入したAI Agent機能開発奮闘記

toB SaaSに導入したAI Agent機能開発奮闘記 @Kodeveloper 2025.07.24

Avatar for unsu0707

unsu0707

July 24, 2025
Tweet

More Decks by unsu0707

Other Decks in Technology

Transcript

  1. toB SaaS に導入した AI Agent 機能開発奮闘記 第64 回 Kodeveloper @Unsu

    2025 年7 月24 日 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 1
  2. 自己紹介 @unsu 経歴 2025.01 ~ : Lead GenAI/LLM Application Engineer

    @ EXPLAZA, Inc. 2022.02 ~ : Head of Engineering(Senior Manager) (CS プラットフォーム開発) @ Mercari, Inc. 2021.02 ~ : Technical Project Manager ( 銀行サービス開発) @ LINE 2016.04 ~ : Software Engineer / Engineering Manager (C2C サービス開発) @ Rakuten Group 2012.07 ~ 2014.12 : Web Developer @ 韓国 LinkedIn X(Twitter) toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 2
  3. 現在の業務 1. 会社広報活動 全社員がエバンジェリストとして登壇・発表・ テックブログ執筆・SNS 活動を推進中 最近執筆した記事 Cursor とのチャット履歴でブログ記事を自動生 成してみた

    社内でAI 開発ツール調査したら、たった1 週間 で'Claude Code' 一択になった話 Zenn ウィークリーランキング登場 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 3
  4. 現在の業務 2. マーケティングコンテンツ生成AI サービス "Mark" 開発リード https://welcome.mark-ai.jp/ 最近開発中の機能 LLM-as-a-judge 社内ツール開発

    AI Agent 機能開発 音声・映像からの記事・コンテンツ変換機能 Agent Framework 導入プロトタイプ(mastra ) など toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 4
  5. プロジェクトの始まり 2025 年4 月、入社3 ヶ月。AI Application エンジニアとして3 ヶ月目... お客様から興味深いご要望をいただきました。 お客様からのご要望(VoC

    ) " 機能を選ぶのではなく自由な文章で指示すれば、AI が自動的に: 記事内容をファクトチェックしたり 指示に合わせて部分的に編集したり 長い記事を読んで質問に答えたり こういった機能が欲しい" toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 7
  6. AI Agent とは? 基本的なLLM " 質問に答えるAI" ユーザー: " この文章を要約して" AI:

    " はい、要約すると..." 単純な応答生成 AI Agent " 目標を達成するAI" ユーザー: " この記事を事実確認して修正して" AI が自動的に: ウェブ検索実行 事実確認 修正案生成 結果伝達 重要な違い: Agent は「どうやるか」を自分で判断し、利用可能なツールを使って複数のステップで目標を達 成する toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 9
  7. 設計・検証開始 実装方法の検討 結論: OpenAI Agents SDK を採用 選択理由 リリース直後にSlack Bot

    でエージェント実装経験あり Multi-agent システム構築に最適化されていることを期待 公式SDK による安定性への期待 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 10
  8. OpenAI Agents SDK の基本概念 Agents 指示とツールを持つ実行単位 特定の目的ごとに構成 例) ファクトチェック、編 集、検索など

    agent = Agent( instruction = "...", tools = [tool1, tool2, ...], handoff = [agentA, agentB, ...], ... ) Handoffs Agent 間のタスク委譲 以下の定義により、Agent が 自動的にタスクを委譲 triage_agent = Agent( instruction = "...", handoff = [AgentA, AgentB, ...], ... ) Tools Agent が実行可能なアクション ウェブ検索、API 呼び出し、 コンピューター制御、MCP 使 用など Agents-as-tools エージェントがサブエー ジェントをツールとして 使用 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 11
  9. Multi-Agent 構造 Triage Agent エージェントを統括するオーケストレーター ユーザーリクエストを分析して適切なAgent にタスク委譲 学術用語では"Orchestrator" (指揮者)とも呼ばれる Sub

    Agents 特定のタスクを実行するエージェント Triage Agent から委譲されたタスクを実行 特定の指示とツールを持つ専門エージェント toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 12
  10. Multi-Agent 構造の実装例 triage_agent = Agent( name='Triage Agent', instruction=( 'ユーザーのリクエストを処理します。' '予約希望の場合は、Booking

    Agentに委譲します。' '返金希望の場合は、Refund Agentに委譲します。' ... ), handoff=[booking_agent, refund_agent] ) booking_agent = Agent( name='Booking Agent', instruction=( 'ユーザーの予約リクエストを処理します。' '予約情報を確認し、処理を進めます。' '処理完了後、Triage Agentに結果を返します。' ... ), tools=[booking_tool], handoff=[triage_agent] ) 処理フロー 1. ユーザー:「このホテルに7 月30 日シングルルーム予約してください」 2. Triage Agent :「予約リクエストを確認しました。Booking Agent に処理を委譲します」 3. Booking Agent :「予約処理を実行します」 4. Triage Agent :「予約が完了しました」 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 13
  11. 初期設計フロー 設計方針 Triage がユーザーメッセージを解析して適切なAgent にHandoff 「ファクトチェック・ウェブ検索して」→ Fact Check Agent 「一部修正して」→

    Edit Agent 「ファクトチェック後、事実を基に内容を修正して」 Triage Agent がFact Check Agent にHandoff Fact Check Agent がウェブ検索後、事実確認内容と共にEdit Agent にHandoff toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 16
  12. 初期設計: 実際の結果 Handoff が制御困難:動作が不安定 [Case 1] User: " ファクトチェックして" (

    成功) Triage → Fact Check → ウェブ検索後、事 実確認結果返却 ( 失敗) Triage がHandoff せずに回答生成 ( 想定外) Triage → Fact Check → Edit Agent まで 実行して編集提案が生成される場合も toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 17
  13. 試行1: 実際の結果 Handoff が制御困難:動作が不安定 [Case 2] User: " ファクトチェックして事実通りに修正して" (

    成功) Triage → Fact Check → Edit Agent で編集提案生成 ( 失敗) Triage → Fact Check Handoff 後、Edit Agent に渡さずウェブ検索結果のみ返却(頻発) toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 18
  14. 試行2: 各Agent が作業後Triage に復帰 改善アイデア 各Sub Agent は作業完了後、結果をTriage に返却 Triage

    がユーザーチャットと直前の作業結果を基に次の処理を判断 期待フロー ユーザー → Triage → Sub Agent A → Triage → Sub Agent B → Triage → ... → 最終回答 結果 Handoff が多すぎて処理時間が増大 より効率的な方法を模索 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 19
  15. 試行3: Plan as LLM, Handoff by sub-agents 設計背景と仮説 最初に全体計画を立てて、各Sub-Agents に伝達すれば改善されるのでは?

    改善アイデア Triage が全体計画を策定後、最初のSub-agent に計画を伝達 Triage がSub agent A にHandoff Sub agent A が作業完了後、Sub agent B にHandoff … Sub agent X が作業完了後、Triage に結果を返却 Triage が最終結果を返却 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 20
  16. 試行3: 実際の結果 計画を伝えても... Triage の計画 { "steps": [ {"agent": "fact_check",

    "task": "ウェブ検索で事実確認", ...}, {"agent": "edit", "task": "検索結果を基に編集", ...} ], ... } toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 21
  17. 試行3: 実際の結果 実際の動作 Fact Check Agent :「ウェブ検索完了しました。検索結果は以下の通りです… (終了) 」 →

    Edit Agent にHandoff しない 問題点 Handoff 連携が依然として不安定 タスク完了と判断して終了してしまうAgent Sub-agent の指示特性上、計画に従った次エージェントへの引き継ぎが優先度低 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 22
  18. 試行4: Single Agent with Agents-as-tools 設計背景と期待 シングルエージェントなら、より安定的にツールを活用できるのでは? 改善アイデア SingleAgent がすべてのSub-agent

    をツールとして使用(Agents-as-tools パターン) Handoff なしで中央制御 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 23
  19. 試行4: Single Agent with Agents-as-tools 実装例 single_agent = Agent( instruction='xxx',

    tools=[ agent_a_as_tool, agent_b_as_tool, # ... 各Agentをtoolとして登録 ], handoff=[] # handoffなし ) toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 24
  20. 試行4: 実行結果 一見成功したように見えたが... Input: " 検索して事実通りに編集して" [Streamed response] Thinking message:

    " 作業中..." [Streamed response] Thinking message: " 作業完了" [Streamed response] Result message: " この部分が事実と異なるため、以下の編集を提案します: xxx... " 処理時間が通常より大幅に増加 ログを確認したところ... toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 25
  21. 試行4: 実際の結果 非同期実行の問題 - [00:00:00] SingleAgent -> call tool: AgentA-as-tool

    - [00:00:03] SingleAgent -> call tool: AgentA-as-tool - [00:00:07] SingleAgent -> call tool: AgentB-as-tool - [00:00:07] SingleAgent -> call tool: AgentB-as-tool - [00:00:11] SingleAgent -> call tool: AgentA-as-tool - ... (計10回以上呼び出し) 制御不能の非同期実行:同じ処理を3 ~4 回ずつ繰り返し ウェブ検索が完了前に編集Agent-as-tool を呼び出し 編集完了後に再度ウェブ検索を実行 Tool 使用回数上限まで実行後、結果返却 それでも... 期待した複合的なタスクはほぼ完了 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 26
  22. 試行5: "Plan as LLM, Execute as Code" 設計背景と期待: OpenAI Agents

    SDK だけでは要件に合わない LLM が計画を立て、コードで順次実行を制御する独自設計 Plan: LLM による計画策定 Planner Agent がユーザー要求を分析 ExecutionPlan 作成(実行順序の決定) Execute: コードによる実行制御 計画に従って順次実行 依存関係と実行順序を確実に保証 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 27
  23. 試行5: "Plan as LLM, Execute as Code" 主要な設計要素 独自Agent クラス定義:

    OpenAI Agents SDK を使わず、マルチエージェントシステムの概念(Tools 、 Handoffs 等)を実装 依存関係管理: 前のエージェントの結果を次のステップのコンテキストとして確実に伝達 検索品質保証: 検索結果をLLM が評価し、不十分な場合は自動再検索(最大4 回) toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 28
  24. 試行5: ついに安定動作を実現 [Step1] Planner Agent 要求分析: 検索 + 編集計画生成 [Step2]

    Search Agent ウェブ検索実行、結果を文字列で返却 検索結果をLLM が評価 → 不十分?Step2 繰り返し(最大4 回) [Step3] Edit Agent 検索結果を基に編集案生成 [Step4] 最終回答 編集案をストリーミングで伝達 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 29
  25. 検証結果の比較 試行 成功率 ( 概算) 処理時間 ( 相対値) API 呼び出し回数

    試行1 ( マルチエージェント: Sub-Agent 間Handoff) 30% 基準値 少 試行2 ( マルチエージェント: 毎回Triage に復帰) 70~80% 2~3 倍 多 試行3 (Plan as LLM, Execute by sub-agents) 50~60% 1.5 倍 中 試行4 (Agents-as-tools) 90~95% 3~4 倍 非常に多 試行5 (Plan as LLM, Execute as Code) 95~99% 1 倍 最小 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 31
  26. 実際の動作デモ AI Agent 機能 1. エディターでテキスト選択 2. 自然言語で指示 3. AI

    が自動的に: 指示分析 必要に応じてウェブ検索 編集提案生成 結果ストリーミング toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 32
  27. 後日談: 再検証してみたら... Slack に実装済みのOpenAI Agents SDK 基盤ボット 最近、マルチエージェントシステム(試行1 と類似設計)で複雑なタスクをテスト 「Slack

    内のプロジェクト関連議論を探して要約し、音声生成後、関連イラストも生成して」 4~5 個のサブエージェントHandoff 後、すべてのタスク完了 複数回テストでも安定動作 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 34
  28. まとめ 1. AI Agent 開発はまだベストプラクティスが確立されていない分野 - 試行錯誤が必要で、技術トレンドも急 速に変化 2. LLM

    の創造性とコードの確実性を組み合わせることで良い結果を得られる 3. AI ツール活用開発が効率的 - 今回の開発では手作業でのコーディングはほとんどなし(ただし0 →1 開発で はないため時間はかかった) toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 36
  29. 株式会社エクスプラザ (EXPLAZA, Inc.) 生成AI プロダクト/ ソリューション開発スタートアップ 生成AI パートナー開発、ソリューションコンサルティング BtoB マーケティングコンテンツ生成AI

    サービス "Mark" 開発・運営 急成長中 入社時より社員も2 倍近く急増 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 38
  30. 福利厚生 1. 全社員 Cursor Pro プラン提供 非エンジニアもCursor 積極活用中 2. エンジニア全員

    Claude Pro Max 20x プラン提供 3. AI Boost 手当: その他AI サービス/ アプリ利用料を月5 万円まで補助 エンジニアは上記Cursor 、Claude プランに加えて月5 万円! 4. 1 階カフェ(Common ROPPONGI) コーヒー無料、食事20% 割引 5. ランチチームビルディング(2 人以上昼食) 1 人当たり1500 円まで補助 toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 39
  31. 募集ポジション リードAI プロデューサー AI/DX コンサルタント リード AI アプリケーションエンジニア 周りに生成AI プロダクト/

    ソリューション開発に携わりたい方がいらっしゃいましたら、ぜひご紹介くださ い! https://lifeat.explaza.jp/ toB SaaS に導入したAI Agent 機能開発奮闘記 © 2025 EXPLAZA Inc. 40