Agno : コンセプト : チーム – チーム状態

エージェントチームの共有状態について学習します。チームメンバー間で状態を共有する複数の方法があります。

Agno : ユーザガイド : コンセプト : チーム – チーム状態

作成 : クラスキャット・セールスインフォメーション
作成日時 : 07/28/2025
バージョン : Agno 1.7.5

* 本記事は docs.agno.com の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています :

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

 

Agno ユーザガイド : コンセプト : チーム – チーム状態

エージェントチームの共有状態について学習します。

チームメンバー間で状態を共有する複数の方法があります。

 

共有チーム状態

チームセッション状態は、共有状態とプライベート状態の両方の機能を持ち、エージェントのチーム全体にわたる洗練された状態管理を可能にします。

チームは、プライベートなメトリクスや設定を維持しながら、(買い物リストのような) 共有情報を調整する必要がある場合が多いです。このために Agno は洗練された 3-tier (階層) の状態システムを提供します。

Agno のチーム状態管理は 3 つの異なるレベルを提供します :

  • チームの team_session_state – すべてのチームメンバーからアクセス可能な共有状態。

  • チームの session_state – チームリーダーのみアクセス可能なプライベート状態。

  • エージェントの session_state – 各エージェントメンバー用のプライベート状態。

Note : Team state propagates through nested team structures as well

 

チーム・セッション状態の使用方法

チームの team_session_state パラメータを設定して、チームメンバー間で状態を共有することができます。この状態はすべてのチームメンバーが利用可能で、それらの間で同期されます。

例えば :

team = Team(
    members=[agent1, agent2, agent3],
    team_session_state={"shopping_list": []},
)

メンバーはツールの team_session_state 属性を使用して共有状態にアクセスできます。

例えば :

def add_item(agent: Agent, item: str) -> str:
    """Add an item to the shopping list and return confirmation.

    Args:
        item (str): The item to add to the shopping list.
    """
    # Add the item if it's not already in the list
    if item.lower() not in [
        i.lower() for i in agent.team_session_state["shopping_list"]
    ]:
        agent.team_session_state["shopping_list"].append(item)
        return f"Added '{item}' to the shopping list"
    else:
        return f"'{item}' is already in the shopping list"

 

共有買い物リストを管理するチームの単純な例が以下になります :

team_session_state.py

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.team import Team


# Define tools that work with shared team state
def add_item(agent: Agent, item: str) -> str:
    """Add an item to the shopping list."""
    if item.lower() not in [
        i.lower() for i in agent.team_session_state["shopping_list"]
    ]:
        agent.team_session_state["shopping_list"].append(item)
        return f"Added '{item}' to the shopping list"
    else:
        return f"'{item}' is already in the shopping list"


def remove_item(agent: Agent, item: str) -> str:
    """Remove an item from the shopping list."""
    for i, list_item in enumerate(agent.team_session_state["shopping_list"]):
        if list_item.lower() == item.lower():
            agent.team_session_state["shopping_list"].pop(i)
            return f"Removed '{list_item}' from the shopping list"
    
    return f"'{item}' was not found in the shopping list"


# Create an agent that manages the shopping list
shopping_agent = Agent(
    name="Shopping List Agent",
    role="Manage the shopping list",
    model=OpenAIChat(id="gpt-4o-mini"),
    tools=[add_item, remove_item],
)


# Define team-level tools
def list_items(team: Team) -> str:
    """List all items in the shopping list."""
    # Access shared state (not private state)
    shopping_list = team.team_session_state["shopping_list"]
    
    if not shopping_list:
        return "The shopping list is empty."
    
    items_text = "\n".join([f"- {item}" for item in shopping_list])
    return f"Current shopping list:\n{items_text}"


def add_chore(team: Team, chore: str) -> str:
    """Add a completed chore to the team's private log."""
    # Access team's private state
    if "chores" not in team.session_state:
        team.session_state["chores"] = []
    
    team.session_state["chores"].append(chore)
    return f"Logged chore: {chore}"


# Create a team with both shared and private state
shopping_team = Team(
    name="Shopping Team",
    mode="coordinate",
    model=OpenAIChat(id="gpt-4o-mini"),
    members=[shopping_agent],
    # Shared state - accessible by all members
    team_session_state={"shopping_list": []},
    # Team's private state - only accessible by team
    session_state={"chores": []},
    tools=[list_items, add_chore],
    instructions=[
        "You manage a shopping list.",
        "Forward add/remove requests to the Shopping List Agent.",
        "Use list_items to show the current list.",
        "Log completed tasks using add_chore.",
    ],
    show_tool_calls=True,
)

# Example usage
shopping_team.print_response("Add milk, eggs, and bread", stream=True)
print(f"Shared state: {shopping_team.team_session_state}")

shopping_team.print_response("What's on my list?", stream=True)

shopping_team.print_response("I got the eggs", stream=True)
print(f"Shared state: {shopping_team.team_session_state}")
print(f"Team private state: {shopping_team.session_state}")

出力

See a full example here.

 

エージェント型コンテキスト

チームリーダーは、エージェント的に更新されて (i.e. チームリーダーにより)、必要に応じてチームメンバーに送信される共有コンテキストを保持します。

エージェント型コンテキストは、エージェント間の効果的な情報共有とコラボレーションのために重要であり、チームの応答の品質はチームリーダーがこの共有エージェント型コンテキストをどれくらい上手く管理できるかに依存します。これは、チームの応答の品質を保証するために、チームリーダー用により高品質なモデルを要求する可能性があります。

 

エージェント型コンテキストの有効化

チームリーダーがエージェント型コンテキストを保持することを可能にするには、enable_agentic_context=True を設定します。これはチームリーダーが実行中にチームコンテキストを保持して更新することを可能にします。

team = Team(
    members=[agent1, agent2, agent3],
    enable_agentic_context=True,  # Enable Team Leader to maintain Agentic Context
)

 

チームメンバーのインタラクション

エージェントチームはメンバー間のインタラクションを共有することができて、エージェントが互いの出力から学習することを可能にします :

team = Team(
    members=[agent1, agent2, agent3],
    share_member_interactions=True,  # Share interactions
)

 

以上