0
1

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のLoop agentsを使ってサブエージェントを繰り返し動かす

Posted at

はじめに

前略、ADKのLoop Agentを試してみたのでまとめます。

Loop Agent

Loop Agentはエージェントの実行を繰り返すことができる機能です。

image.png
出典: 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],
)

動作確認

ジャンケンを開始してもらいます。
image.png
1回戦
image.png
2回戦
image.png
3回戦
image.png
最終結果
image.png
いい感じですね。

エージェントの関係は以下のようになっていました。
image.png

おわりに

今回はADKのLoop Agentについてまとめました。AIエージェントの回答に納得感が得られない場合、Loopをさせて何度も考えさせることで回答の質などあげることができるのか、このあたりも気になるところです。

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

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?