0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ADKのParallel agentsを使ってサブエージェントを並列に動かす

Last updated at Posted at 2025-09-07

はじめに

AIエージェントの機能強化で、役割ごとにエージェントを分ける「サブエージェント」を利用するという手段がありますが、サブエージェントが増えた結果、処理が肥大化し回答までの時間が遅くなってしまうということはないでしょうか。
ADKでは、Parallel agentsという機能を利用することでエージェントを並列に実行し、回答時間を早くすることができるようです。
この記事では Parallel agents を試してみようと思います。

Parallel agents

Parallel agents は複数のエージェントを並列に動かすことができる機能です。

image.png
出典: Google ADK Docs – Parallel agents

試してみる

試してみましょう。
ジャンケンの手を考える2つのエージェントを用意し、それぞれ並列で手を考えさせます。
その後、どちらの手が良いかを考えてもらいうようなエージェントを作成してみます。

実装

というわけで、実装してみました。

import os

from google.adk.agents.llm_agent import Agent
from google.adk.agents.sequential_agent import SequentialAgent
from google.adk.agents.parallel_agent import ParallelAgent 

from dotenv import load_dotenv

load_dotenv()

# ジャンケンの手を考えるエージェントを2つ定義
instruction1 = """
    あなたはジャンケンエージェントです。
    ユーザーが入力した手(グー、チョキ、パー)に対して、何を出すかを考えてください。
    あなたは、「人は前回出した手と同じ手を出すことが多い」という理論を持っています。
    それに従って、ユーザーが前回出した手と同じ手を出すことを予測し、その手に勝つ手を出してください。
"""
instruction2 = """
    あなたはジャンケンエージェントです。
    ユーザーが入力した手(グー、チョキ、パー)に対して、何を出すかを考えてください。
    あなたは、「人は前回出した手に勝つような手を出すことが多い」という理論を持っています。
    それに従って、ユーザーが前回出した手と同じ手を出さないと予測し、その手に勝つ手を出してください。
"""

janken_agent1 = Agent(
    name="janken_agent1",
    model=os.environ.get("MODEL"),
    instruction=instruction1,
)

janken_agent2 = Agent(
    name="janken_agent2",
    model=os.environ.get("MODEL"),
    instruction=instruction2,
)

# 2つのジャンケンエージェントを並列に動作させるエージェントを定義
janken_parallel_agent = ParallelAgent(
    name="parallel_janken_agent",
    description="あなたはジャンケンの手を決めるエージェントです。2つのエージェントが並列に動作します。",
    sub_agents=[janken_agent1, janken_agent2],
)


# 並列エージェントの出力を基に最終的な手を決定するエージェントを定義
instruction3 = """
    あなたはジャンケンエージェントです。ユーザとジャンケンを行います。janken_agent1とjanken_agent2の意見を参考にし、最終的に何を出すかを決定してください。
"""

hand_decide_agent = Agent(
    name="decide_hand_agent",
    model=os.environ.get("MODEL"),
    instruction=instruction3,
)


# 手を考えるのエージェントと手を決定するエージェントを順番に動作させるように定義
root_agent = SequentialAgent(
    name="janken_agent",
    description="あなたはジャンケンの手を決めるエージェントです。",
    sub_agents=[janken_parallel_agent, hand_decide_agent],
)

動作確認

adk webコマンドで立ち上げて、ジャンケンしてみました。

image.png
動作確認では問題なく応答できてそうです。

また、adk webで立ち上げたUI上では左側のtraceから各エージェントの実行時間を見ることができます。
並列に実行したjanken_agent1janken_agent2の二つの実行時間がかぶっており、その後にhand_decide_agentが実行されていますね。
image.png

また、UI上では簡単な図も出してくれますが、それを見てもどんな関係で動いているのかが分かりやすいですね。
(黒地に黒で見づらいのと、順番が下からなのが見づらいですが)
image.png

おわりに

今回はADKのParallel agentsを試してみました。一つ一つの実行時間が長いAIエージェントでは、並列に実行することでパフォーマンスをよくすることが重要になりますね。情報を取得する場合、情報ソースごとにエージェントを分け、それぞれを並列に動かして回答時間を短くするなどはよさそうな気がしますね。

ここまでご覧いただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?