Share
Embed
Transcript
28 slides
-
Agent Development Kitで作る マルチエージェントアプリケーション AIAgent勉強会 株式会社スリーシェイク 山田悠之介 Copyright © 3-shake,
Inc. All Rights Reserved. -
自己紹介 • 名前:山田悠之介 • 所属:株式会社スリーシェイク • 職種:フルスタックエンジニア ◦ Google Cloudを中心にWebアプリ、
生成AIアプリの開発とその支援 • 趣味:筋トレ 2 -
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スペシャライゼーションを取得) -
SREを主軸にクラウドネイティブ化/エンジニアリング内製化を支援 SRE/DevOps SecOps BizOps HR ・SRE総合支援からセキュリティ対 策を全方位支援 ・Geminiを用いた生成AIの活用支援 ・ワンストップで脆弱性診断を行う セキュリティ対策SaaS
・クラウド型ETL/データパイプ ラインSaaSの決定版 ・あらゆるSaaSをノーコードで連携 ・ハイスキルフリーランスエンジニ ア紹介エージェント IT内製化 / 高度化 クラウドネイティブ化 モダナイゼーション ITアジリティ向上 4 -
今日話すこと、話さないこと 話すこと • マルチエージェントアーキテクチャ • ADKがマルチエージェント前提で設計されていること • ADKの開発から運用までの開発者体験の良さ 話さないこと •
他のライブラリについて ◦ ぜひ教えてください 5 -
マルチエージェントの必要性 シングルエージェントの開発を進めていくと、肥大化し複雑さが増えていく • 利用可能なツールが増えていき、動作が不安定になる • コンテキストの複雑化 • 複数のドメインによる保守性低下 そのような場合には肥大化したシングルエージェントを分割し、 マルチエージェントにすることに一定のメリットがある
• フローを制御できるようになることで動作が安定 • 専門性の高いエージェントに分割することで全体の性能が向上 • モジュール化による開発の効率化 8 -
どちらが良いか • まずはSupervisorパターンがおすすめ ◦ Supervisorパターンは開発・運用の両方でシンプルかつそれなりの性能 ◦ 不要な最適化より分かりやすさ(YAGNI) ◦ 事例も多い(巨人の肩に乗る) •
性能が必要になってからSwarmパターンを検討すれば良い 12 -
マルチエージェントの必要性(再掲) シングルエージェントの開発を進めていくと、肥大化し複雑さが増えていく • 利用可能なツールが増えていき、動作が不安定になる • コンテキストの複雑化 • 複数のドメインによる保守性低下 そのような場合には肥大化したシングルエージェントを分割し、 マルチエージェントにすることに一定のメリットがある
• フローを制御できるようになることで動作が安定 • 専門性の高いエージェントに分割することで全体の性能が向上 • モジュール化による開発の効率化 14 -
ADK(Agent Development Kit) AIエージェントを実装するためのGoogle製OSS Python、Javaで利用可能 主な強み • ローカル開発からデプロイ、運用まで整備 • Google
Cloudとの様々な連携 • マルチエージェント前提の設計 こんな人におすすめ • エージェントをさくっと作ってデプロイしたい • Google Cloudを使っている 15 -
基本的な書き方 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/ -
別のエージェントを利用する方法 ①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による指定 制御は親エージェントのまま (親エージェントがユーザに返答する) -
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] -
ADKの注意点 • Agent, Agentic Workflow, Workflowなどの分類の中ではAgentの部類に近い ◦ そのため複雑な制御はLangGraphの方が書きやすい ◦ ※ADKでもWorkflow
agents, Custom agentsで複雑な制御はできる • 作り方からして小さなエージェントをたくさん作っていく方向 ◦ 数が増えたら2階層にする(Hierarchicalパターン)などが良さそう 20 -
ADK製エージェントのデプロイ先候補 ADKは以下に対してノーコード、ローコードでデプロイ可能 • Cloud Run • Google Kubernetes Engine •
Agent Engine (上記以外にもDockerfileを作成することでデプロイ可能) 22 -
Vertex AI Agent Engine AIエージェントのデプロイ、管理を行うGoogle Cloudのフルマネージドサービス サポート • ADK •
LangChain, LangGraph, etc... • カスタムコード 主な機能 • コンテキスト管理 • 評価 • オブザーバビリティ 23 -
エージェントのオブザーバビリティの必要性 AIエージェントの「難しさ」に対してオブザーバビリティを考える必要性 24 何が生成 される? どれくらい 時間がかかる? どれくらい お金がかかる? 巨大な
ワークフロー 外部サービス の呼び出し モデルの更新 -
Agent Engineとオブザーバビリティ • ログ ◦ stdout, stderrへの出力はデフォルトでCloud Loggingに送信 • メトリクス
◦ リクエスト数、レイテンシー、CPU、メモリがデフォルトでCloud Monitoringに送信 ◦ カスタムメトリクスもサポート • トレース ◦ enable_tracing=Trueを指定するとCloud Traceに送信 ◦ スパン属性として入出力などをデフォルトで提供 25