はじめに
前略、ADKのLoop Agentを試してみたのでまとめます。
Loop Agent
Loop Agentはエージェントの実行を繰り返すことができる機能です。
出典: Google ADK Docs – Loop agents
試してみる
試してみましょう。
二つのエージェントにジャンケンを3回してもらうようなループエージェントを作成してみましょう。
実装
実装は以下のようになりました。
import os
from google.adk.agents.llm_agent import Agent
from google.adk.agents.sequential_agent import SequentialAgent
from google.adk.agents import LoopAgent
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つのジャンケンエージェントの手をジャンケンさせるエージェントを定義
instruction3 = """
あなたはジャンケンエージェントです。janken_agent1とjanken_agent2の手をジャンケンさせてください。
"""
buttle_agent = Agent(
name="decide_hand_agent",
model=os.environ.get("MODEL"),
instruction=instruction3,
)
# ジャンケンエージェントを複数回ジャンケンさせるループエージェントを定義
loop_agent = LoopAgent(
name="jankenLoop",
sub_agents=[
janken_agent1,
janken_agent2,
buttle_agent
],
max_iterations=3
)
# ジャンケンの始まりと終わりを担当するエージェントを定義
start_instruction = """
あなたはジャンケンエージェントのファシリテーターです。バトルの始まりを宣言してください。
"""
start_agent = Agent(
name="start_agent",
model=os.environ.get("MODEL"),
instruction=start_instruction,
)
# ジャンケンの締めくくりを担当するエージェントを定義
end_instruction = """
あなたはジャンケンエージェントの締めくくりを行います。
janken_agent1とjanken_agent2の勝ち数を比較し、最終的な勝者を決定してください。
"""
end_agent = Agent(
name="end_agent",
model=os.environ.get("MODEL"),
instruction=end_instruction,
)
# 全体を順番に動作させるエージェントを定義
root_agent = SequentialAgent(
name="janken_agent",
description="あなたはジャンケンエージェントです。janken_agent1とjanken_agent2の手をジャンケンさせてください。",
sub_agents=[start_agent, loop_agent, end_agent],
)
動作確認
ジャンケンを開始してもらいます。
1回戦
2回戦
3回戦
最終結果
いい感じですね。
おわりに
今回はADKのLoop Agentについてまとめました。AIエージェントの回答に納得感が得られない場合、Loopをさせて何度も考えさせることで回答の質などあげることができるのか、このあたりも気になるところです。
ここまでご覧いただきありがとうございました!