3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Agentariumの `Agent` クラスをコード読みしてみた(2025年1月時点)

Posted at

はじめに

  • Agentarium は、複数のAIエージェントを手軽に操作・連携させるためのPythonライブラリ。
  • この記事では、その中心となる Agent クラスのコードを実際に読んでみます。
  • 「コードを追いながら、どんな仕組みで動いているのかをざっくり把握する」ことが目的です。
  • 2025年1月時点の状況なので、将来的に変更される可能性があります。

image.png


Agentクラス全体の役割

  • エージェント(AIキャラクター)の作成・管理
  • 他エージェントとの会話・思考などのアクション
  • LLM(大規模言語モデル)を活用したテキスト生成・自動化
  • CheckpointManager での状態保存
  • faker と組み合わせたプロフィール自動生成

要するに、1体の「AIキャラクター」を表現するためのクラスになっています。

image.png


コードの構成をざっくり眺める

class Agent:
    """
    A class representing an autonomous agent in the environment.
    """

    _interaction_manager = AgentInteractionManager()
    _allow_init = False

    def __init__(self, **kwargs):
        ...
    
    @staticmethod
    @cache_w_checkpoint_manager
    def create_agent(...):
        ...
    
    @property
    def name(self) -> str:
        ...
    
    @cache_w_checkpoint_manager
    def act(self) -> str:
        ...
    
    def talk_to(self, receiver: Agent, message: str) -> None:
        ...
    
    def think(self, message: str) -> None:
        ...
    
    def ask(self, message: str) -> None:
        ...
    
    def add_new_action(self, action_descriptor: dict, action_function: Callable) -> None:
        ...
    
    def reset(self) -> None:
        ...
  • コード全体を見ると、Agentを初期化するメソッド群、プロパティによる情報参照、act/talk_to/thinkなどの行動メソッド拡張用add_new_action などが並んでいます。
  • それぞれの流れを順を追って見てみましょう。

__init__create_agent 周り

def __init__(self, **kwargs):
    if not Agent._allow_init:
        raise RuntimeError("Agent instances should be created using Agent.create_agent()")
    ...
    # fakerなどを用いて各種プロフィール情報を生成
    # _interaction_managerにエージェントを登録
    ...
  • __init__ では直接 Agent(...) できないようにしているのがポイント。
  • かわりに create_agent(...) を使って生成する流れになっています。
@staticmethod
@cache_w_checkpoint_manager
def create_agent(...):
    try:
        Agent._allow_init = True
        return Agent(...)  # コンストラクタ呼び出し
    finally:
        Agent._allow_init = False
  • create_agent() の中で Agent._allow_init = True にしてから __init__ を呼び出すことで、「コンストラクタを使わないとダメだよ」を実現しています。
  • cache_w_checkpoint_manager デコレータが付いているので、このメソッドの呼び出し履歴がチェックポイントに記録される形です。

faker と LLM の組み合わせ

self.agent_id = self.agent_id if self.agent_id != DefaultValue.NOT_PROVIDED else faker.uuid4()
self.agent_informations: dict = kwargs or {}
if "gender" not in kwargs or kwargs["gender"] == DefaultValue.NOT_PROVIDED:
    self.agent_informations["gender"] = faker.random_element(elements=["male", "female"])
...
if "bio" not in kwargs or kwargs["bio"] == DefaultValue.NOT_PROVIDED:
    self.agent_informations["bio"] = Agent._generate_agent_bio(self.agent_informations)
  • gender/name/age/occupationなどを、指定がなければ faker で自動生成しています。
  • bio(エージェントの紹介文)は _generate_agent_bio という静的メソッドでLLMを使って生成。

_interaction_manager とやりとり管理

_interaction_manager = AgentInteractionManager()
  • クラス変数として存在。複数のAgentがいる場合でも、このマネージャは一つだけ。
  • AgentInteractionManagerrecord_interaction(...) などを通じて各エージェント間のメッセージ履歴を管理します。

ざっくりまとめ

  • Agent クラスは「AIキャラ一体分の状態・やりとりを管理するための基盤」
  • faker+LLM で手軽に初期プロフィールを作成できるので、すぐに動く。
  • カスタムアクションも追加できるので、いろいろ拡張して遊べそう。

2025年1月時点ではまだ仕様が変わる可能性があるため、最新のドキュメントやGitHubリポジトリをチェックして活用してみてください。

image.png


参考リンク

以上、「AgentariumのAgentクラスをコード読んでみた」記事でした。何かの参考になれば幸いです!

Agentarium 関数一覧

関数名 説明 備考
__init__ インスタンス初期化 - 直接は使用不可
- プロフィール情報の初期化
- エージェントの登録
create_agent エージェント生成 - 静的メソッド
- チェックポイントに記録
- エージェント作成の正式な方法
name エージェント名の取得 - プロパティ
- 読み取り専用
act 行動の実行 - チェックポイントに記録
- エージェントの活動を管理
talk_to 他エージェントとの会話 - メッセージの送信
- 対話履歴の記録
think 内部思考の処理 - 思考プロセスの実行
- 内部状態の更新
ask 質問の処理 - 他エージェントへの問いかけ
- 応答の待機
add_new_action 新規アクション追加 - カスタム機能の追加
- 拡張性の提供
reset 状態のリセット - エージェントの初期化
- 履歴のクリア

注意:この内容は2025年1月時点のものです。実装は変更される可能性があります。

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?