はじめに
AIエージェントの機能強化で、役割ごとにエージェントを分ける「サブエージェント」を利用するという手段がありますが、サブエージェントが増えた結果、処理が肥大化し回答までの時間が遅くなってしまうということはないでしょうか。
ADKでは、Parallel agentsという機能を利用することでエージェントを並列に実行し、回答時間を早くすることができるようです。
この記事では Parallel agents を試してみようと思います。
Parallel agents
Parallel agents は複数のエージェントを並列に動かすことができる機能です。
出典: 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
コマンドで立ち上げて、ジャンケンしてみました。
また、adk web
で立ち上げたUI上では左側のtraceから各エージェントの実行時間を見ることができます。
並列に実行したjanken_agent1
とjanken_agent2
の二つの実行時間がかぶっており、その後にhand_decide_agent
が実行されていますね。
また、UI上では簡単な図も出してくれますが、それを見てもどんな関係で動いているのかが分かりやすいですね。
(黒地に黒で見づらいのと、順番が下からなのが見づらいですが)
おわりに
今回はADKのParallel agentsを試してみました。一つ一つの実行時間が長いAIエージェントでは、並列に実行することでパフォーマンスをよくすることが重要になりますね。情報を取得する場合、情報ソースごとにエージェントを分け、それぞれを並列に動かして回答時間を短くするなどはよさそうな気がしますね。
ここまでご覧いただきありがとうございました!