フォーム読み込み中
皆さん、こんにちは。ソリューションアーキテクトの長岡です。
本記事はADK解説シリーズの最終回として、自律的に回答を改善するをマルチエージェントワークフローをテーマに、ADKの LoopAgent について解説します。
第1部、第2部を通じて、安定性(Sequantial)が高く、効率的(Parallel)なワークフローを構築しました。しかし、実際の業務では「AIが提案した出張プランが、会社の経費規定(予算)を超えてしまう」ような、要件を満たさないアウトプットを出してくる可能性はゼロではないでしょう。
従来のケースでは、人が手動でプロンプトを改善して再実行をしていました。しかし、AIエージェント自身が「予算オーバーだ。もっと安いプランを再検索しよう」と判断し、試行錯誤してくれたらとても便利になると思いませんか?
このようなケースに対し、ADKは`LoopAgent`(ループエージェント)を準備しています。これは、ワークフローに「フィードバックループ」の概念をもたらし、AIが自らの実行結果を評価し、目標を達成するまで試行錯誤と改善を繰り返すことを可能にするADKの専用の組み込みのワークフローエージェントです。
LoopAgent のアーキテクチャは、「提案→検証→改善(Propose-Validate-Refine)」というフィードバックループに基づいています。ADKでは、このループの終了条件を常に検証し、条件をクリアした場合にループを脱します。
「ユーザーの要望に対し、AIが予算内に収まる最適な出張プランを自ら試行錯誤して提案する」ワークフローを構築します。
予算チェックのような明確な要件がある場合、再利用可能な`FunctionTool`として定義するのがADKのプラクティスです。ループを正常に終了させるために、`tool_context.actions.escalate = True` を呼び出します。
from google.adk.agents import LlmAgent, LoopAgent, SequentialAgent
from google.adk.tools import FunctionTool, ToolContext
import json
# 役割1: 出張プラン提案エージェント
proposer_agent = LlmAgent(
name="trip_proposer",
instruction="""あなたは出張手配のプロです。目的地、日程、予算、そして改善ヒント「{refinement_hint}」を基に、具体的な出張プラン(交通手段、ホテル)とその合計金額を見積もってください。
出力は必ず以下のJSON形式で返してください:
{"plan_details": "ひかり500号, 東横INN新大阪中央口", "total_cost": 45000}""",
model="gemini-2.5-flash",
output_key="proposal"
)
# 役割2: プラン検証(予算チェック)のためのツール
def validate_business_trip_plan(tool_context: ToolContext, proposal: str, budget: int) -> str:
"""提案された出張プランを経費規定(予算)内で検証し、成功ならループを停止、失敗なら理由を返す。"""
try:
proposal_data = json.loads(proposal)
cost = proposal_data.get("total_cost", float('inf'))
if cost <= budget:
# 検証成功: エスカレーションを発生させてループを正常終了させる
tool_context.actions.escalate = True
return f"検証成功: 予算内に収まりました。最終プラン: {proposal}"
else:
# 検証失敗: 失敗理由を返す
return f"検証失敗: 予算オーバーです。規定額{budget}円に対し、{cost}円でした。"
except (json.JSONDecodeError, AttributeError):
return "検証失敗: 提案のJSON形式が正しくありません。"
validator_tool = FunctionTool(name="plan_validator", func=validate_business_trip_plan)
# 検証ツールを呼び出すエージェント
validator_agent = LlmAgent(
name="validator",
instruction="提案されたプラン「{proposal}」を経費規定「{budget}」で検証ツールを呼び出してチェックしてください。",
tools=[validator_tool],
model="gemini-2.5-flash",
output_key="validation_result"
)
# 役割3: 改善案の策定エージェント
refiner_agent = LlmAgent(
name="cost_reduction_advisor",
instruction="""出張コスト削減アドバイザーです。元の要望と失敗理由を基に、次の提案で試すべき具体的な改善ヒント(例:『LCCの利用を検討』、『ホテルのランクを一つ下げる』など)を生成してください。
- 元の要望: {prompt}
- 失敗理由: {validation_result}""",
model="gemini-2.5-flash",
output_key="refinement_hint" # 次のループのproposer_agentがこれを参照する
)
`LoopAgent`の sub_agents に、1回のループで実行するエージェント(提案→検証→改善)を定義します。この際、オプションの max_iterations は必ず設定して無限ループを防ぎましょう。(最大値=10)
self_improving_cycle = LoopAgent(
name="self_improving_cycle",
sub_agents=[
proposer_agent, # 改善ヒントを基に再提案
validator_agent, # 検証
refiner_agent # 次の改善ヒントを生成
],
max_iterations=5 # 無限ループを避けるための安全装置
)
Runner で実行します。最初のループで proposer_agent が利用できるよう、共有ステートに初期値の refinement_hint を設定しておくのがポイントです。
from google.adk.runtime import Runner, Session
from google.adk.runtime.types import Content, Part
runner = Runner(agent=self_improving_cycle, session_service=SessionService())
session = Session(user_id="user_nagaoka")
# 共有ステートに初期値を設定
session.state = {
"prompt": "大阪への2泊3日の出張",
"budget": 50000,
"refinement_hint": "まずは標準的な新幹線とビジネスホテルで見積もってください。"
}
final_result = runner.run(
session_id=session.id,
new_message=Content(parts=[Part(text=session.state["prompt"])])
)
# 最終結果の確認
final_state = session.state
validation_result = final_state.get("validation_result", "")
if "検証成功" in validation_result:
print("予算内での最適なプランが見つかりました!")
print(validation_result)
else:
print(f"予算内で最適なプランを見つけられませんでした。最終試行の結果: {validation_result}")
3部作を通じて、ADKの主要な組み込みのワークフローエージェントを解説しました。
SequentialAgent:
→ 逐次処理専用のAIエージェントを組み込める機能。実現させたいワークフローの安定性を高める(1. 稟議起案 → 2. 承認 → 3. 通知など)
ParallelAgent:
→ 並列処理専用のAIエージェントを組み込める機能。ワークフローの効率性を高める(「ホテル検索」 と 「出張の経路検索」は互いに依存しないので、並列実行させるなど)
LoopAgent:
→ 反復専用のAIエージェントを組み込める機能。ワークフローにフィードバックループ機能を与え、自律的に要件をクリアさせる(予算10万以下を満たさない場合、再度検索のワークフローを実施させるなど)
これらを組み合わせることで、単にタスクをこなすだけの自動化ではなく、様々な変化に強く、自律的に問題を解決していく、真に「堅牢な(Robust)」なマルチエージェントシステムを構築できるでしょう。
そして、Google Cloud の ADKのマルチエージェントアーキテクチャは極めて実践的なフレームワーク ということが伝わったのではないでしょうか。
ここまで拝読いただき、ありがとうございました!
本シリーズが、皆様のAIエージェントを活用したビジネスやプロジェクトに役立てることを願っています。
Vertex AI Search を使って社内文書検索環境(RAG)を構築してみませんか?ソフトバンクのエンジニアが構築をサポートします。
Vertex AI DIY プランでは、以下の3つのことをご体験いただけます。詳細は、関連サービスにある「Vertex AI DIYプラン」をご確認ください。
Vertex AI Search を使って社内文書を検索する生成AIを構築してみませんか?
ソフトバンクのエンジニアが構築をサポートします。
Google の生成AIの導入を考えている方はもちろん、どのようなものか確認したいという方でもご活用いただけます。
Looker は定義から集計、可視化の一連のデータ分析プロセスをカバーする BI ツールを超えるデータプラットフォームです。ソフトバンクは、顧客のニーズに合わせて柔軟なサポートを提供し、Looker を活用したデータドリブンな企業変革を支援しています。
Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。
MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。
条件に該当するページがございません