Slide 1

Slide 1 text

Agent Development Kitで作る マルチエージェントアプリケーション AIAgent勉強会 株式会社スリーシェイク 山田悠之介 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 2

Slide 2 text

自己紹介 ● 名前:山田悠之介 ● 所属:株式会社スリーシェイク ● 職種:フルスタックエンジニア ○ Google Cloudを中心にWebアプリ、 生成AIアプリの開発とその支援 ● 趣味:筋トレ 2

Slide 3

Slide 3 text

About US 3 会社名 株式会社スリーシェイク 設立日 2015/1/15 Mission: インフラをシンプルにして イノベーションが起こりやすい世界を作る Vision: 労苦〈Toil〉を無くすサービスを適正な価格で提供し続ける Value: エンジニアリングレイヤーに横たわる人、手法、ツールが サイロ化されて労苦が発生しているプロセスをシンプルにし サービス機能開発に集中できるソリューション (SRE、DevSecOps、DataOps、HROps)を提供する 2015 2016 2017 2018 2019 2020 2021 2022 0 50 100 従業員: 200名over Engineer 60% 所在地 東京都新宿区大京町22-1 グランファースト新宿御苑3F・4F  代表者 代表取締役社長 吉田 拓真 沿革 2021年1月 JAFCOから総額5億円の資金調達 2022年8月 自動脆弱性診断ツール「Securify Scan」をリ リース。JAFCO、MUCAPから総額8.48億円の資金調達 Googleクラウド・AWSの両方のエンジニアリングに強みを持つ (2024年8月に国内2例目の、GoogleCloudのDevOpsスペシャライゼーションを取得)

Slide 4

Slide 4 text

SREを主軸にクラウドネイティブ化/エンジニアリング内製化を支援 SRE/DevOps SecOps BizOps HR ・SRE総合支援からセキュリティ対 策を全方位支援 ・Geminiを用いた生成AIの活用支援 ・ワンストップで脆弱性診断を行う セキュリティ対策SaaS ・クラウド型ETL/データパイプ ラインSaaSの決定版 ・あらゆるSaaSをノーコードで連携 ・ハイスキルフリーランスエンジニ ア紹介エージェント IT内製化 / 高度化 クラウドネイティブ化 モダナイゼーション ITアジリティ向上 4

Slide 5

Slide 5 text

今日話すこと、話さないこと 話すこと ● マルチエージェントアーキテクチャ ● ADKがマルチエージェント前提で設計されていること ● ADKの開発から運用までの開発者体験の良さ 話さないこと ● 他のライブラリについて ○ ぜひ教えてください 5

Slide 6

Slide 6 text

目次 1. マルチエージェントアーキテクチャ 2. ADKとマルチエージェント 3. ADKと運用 6

Slide 7

Slide 7 text

マルチエージェントアーキテクチャ 01 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 8

Slide 8 text

マルチエージェントの必要性 シングルエージェントの開発を進めていくと、肥大化し複雑さが増えていく ● 利用可能なツールが増えていき、動作が不安定になる ● コンテキストの複雑化 ● 複数のドメインによる保守性低下 そのような場合には肥大化したシングルエージェントを分割し、 マルチエージェントにすることに一定のメリットがある ● フローを制御できるようになることで動作が安定 ● 専門性の高いエージェントに分割することで全体の性能が向上 ● モジュール化による開発の効率化 8

Slide 9

Slide 9 text

Supervisorパターン 監督役のエージェントが専門家のエージェントを呼び出す 現在はこのパターンのエージェントが多い メリット:制御がわかりやすい デメリット:Supervisorを仲介する分のオーバーヘッド 9 https://speakerdeck.com/os1ma/langchain-interrupt-and-langchain-ambassadors-meetingrepoto

Slide 10

Slide 10 text

Swarmパターン 各エージェントは他の全てのエージェントと通信 メリット:パフォーマンス デメリット:個々のエージェントの判断に依存 10

Slide 11

Slide 11 text

ベンチマーク 複数ドメインの課題に対するスコアとコスト(トークン数)の調査 ● シングルエージェントはスコア、コストともに劣化 ● SwarmパターンはSupervisorパターンより若干良い ○ Supervisorを仲介するオーバーヘッド 11 https://blog.langchain.com/benchmarking-multi-agent-architectures/

Slide 12

Slide 12 text

どちらが良いか ● まずはSupervisorパターンがおすすめ ○ Supervisorパターンは開発・運用の両方でシンプルかつそれなりの性能 ○ 不要な最適化より分かりやすさ(YAGNI) ○ 事例も多い(巨人の肩に乗る) ● 性能が必要になってからSwarmパターンを検討すれば良い 12

Slide 13

Slide 13 text

ADKとマルチエージェント 02 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 14

Slide 14 text

マルチエージェントの必要性(再掲) シングルエージェントの開発を進めていくと、肥大化し複雑さが増えていく ● 利用可能なツールが増えていき、動作が不安定になる ● コンテキストの複雑化 ● 複数のドメインによる保守性低下 そのような場合には肥大化したシングルエージェントを分割し、 マルチエージェントにすることに一定のメリットがある ● フローを制御できるようになることで動作が安定 ● 専門性の高いエージェントに分割することで全体の性能が向上 ● モジュール化による開発の効率化 14

Slide 15

Slide 15 text

ADK(Agent Development Kit) AIエージェントを実装するためのGoogle製OSS Python、Javaで利用可能 主な強み ● ローカル開発からデプロイ、運用まで整備 ● Google Cloudとの様々な連携 ● マルチエージェント前提の設計 こんな人におすすめ ● エージェントをさくっと作ってデプロイしたい ● Google Cloudを使っている 15

Slide 16

Slide 16 text

基本的な書き方 Agentに色々指定するだけ 16 root_agent = Agent( name="weather_time_agent", model="gemini-2.0-flash", description=( "Agent to answer questions about the time and weather in a city." ), instruction=( "You are a helpful agent who can answer user questions about the time and weather in a city." ), tools=[get_weather, get_current_time], ) https://google.github.io/adk-docs/get-started/quickstart/

Slide 17

Slide 17 text

別のエージェントを利用する方法 ①sub_agentsによる指定 制御はサブエージェントに移る (サブエージェントがユーザに返答する) 17 parent_agent = LlmAgent( name="parent_agent", model="gemini-2.5-flash", sub_agents=[child_agent_1, child_agent_2], ) parent_agent = LlmAgent( name="parent_agent", model="gemini-2.5-flash", tools=[ AgentTool(child_agent_1), AgentTool(child_agent_2), ], ) ②Agent-as-a-Toolによる指定 制御は親エージェントのまま (親エージェントがユーザに返答する)

Slide 18

Slide 18 text

ADKでのSupervisorパターンの実装 ADKではAgent-as-a-Toolにより自然とSupervisorパターンになる 18 supervisor_agent = LlmAgent( name="supervisor_agent", model="gemini-2.5-flash", tools=[ AgentTool(hotel_agent), AgentTool(flight_agent), ... ], )

Slide 19

Slide 19 text

ADKでのSwarmパターンの実装 ADKでは自然には実装できない(sub_agentsに自身以外のエージェントを全て指定する) 問題点というよりは階層化を強制する「Pit of Success」 19 hotel_agent = LlmAgent( name="hotel_agent", model="gemini-2.5-flash", ) flight_agent = LlmAgent( name="flight_agent", model="gemini-2.5-flash", ) hotel_agent.sub_agents = [flight_agent] flight_agent.sub_agents = [hotel_agent]

Slide 20

Slide 20 text

ADKの注意点 ● Agent, Agentic Workflow, Workflowなどの分類の中ではAgentの部類に近い ○ そのため複雑な制御はLangGraphの方が書きやすい ○ ※ADKでもWorkflow agents, Custom agentsで複雑な制御はできる ● 作り方からして小さなエージェントをたくさん作っていく方向 ○ 数が増えたら2階層にする(Hierarchicalパターン)などが良さそう 20

Slide 21

Slide 21 text

ADKと運用 03 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 22

Slide 22 text

ADK製エージェントのデプロイ先候補 ADKは以下に対してノーコード、ローコードでデプロイ可能 ● Cloud Run ● Google Kubernetes Engine ● Agent Engine (上記以外にもDockerfileを作成することでデプロイ可能) 22

Slide 23

Slide 23 text

Vertex AI Agent Engine AIエージェントのデプロイ、管理を行うGoogle Cloudのフルマネージドサービス サポート ● ADK ● LangChain, LangGraph, etc... ● カスタムコード 主な機能 ● コンテキスト管理 ● 評価 ● オブザーバビリティ 23

Slide 24

Slide 24 text

エージェントのオブザーバビリティの必要性 AIエージェントの「難しさ」に対してオブザーバビリティを考える必要性 24 何が生成 される? どれくらい 時間がかかる? どれくらい お金がかかる? 巨大な ワークフロー 外部サービス の呼び出し モデルの更新

Slide 25

Slide 25 text

Agent Engineとオブザーバビリティ ● ログ ○ stdout, stderrへの出力はデフォルトでCloud Loggingに送信 ● メトリクス ○ リクエスト数、レイテンシー、CPU、メモリがデフォルトでCloud Monitoringに送信 ○ カスタムメトリクスもサポート ● トレース ○ enable_tracing=Trueを指定するとCloud Traceに送信 ○ スパン属性として入出力などをデフォルトで提供 25

Slide 26

Slide 26 text

エージェントのトレース 26

Slide 27

Slide 27 text

Agent Engineの注意点 ● Agent Engine自体はGAだが、プレビュー機能も多い ○ コンテキスト管理、評価の部分 ● Cloud Runの方が成熟しているため機能は多い ○ 例えばトラフィック分割とか 27

Slide 28

Slide 28 text

まとめ ● シングルエージェントの課題に対し、マルチエージェントアーキテクチャがある ● 今回はSupervisorパターンとSwarmパターンを紹介 ● ADKではSupervisorパターンが自然に実装 ● デプロイ、運用をAgent Engineに任せると楽そう 28