「AIエージェントキャッチアップ #32 - The Agent Company」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #32 - The Agent Company」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

www.youtube.com

The Agent Company

今回は、LLMエージェントの実世界のタスクでのベンチマーク「The Agent Company」について、ソースコードを読んだりしてみました。

The Agent CompanyのGitHubリポジトリはこちらです。

github.com

The Agent Companyの論文はこちらです。

arxiv.org

今回のポイント

The Agent Companyとは

The Agent Companyは、LLMエージェントの現実的なタスクの遂行能力を測るためのベンチマークです。

以下のページでリーダーボードを確認することができ、2024年12月時点の実行結果として「OpenHands + Claude 3.5 Sonnet」が1位となっています。

the-agent-company.com

タスクの例

The Agent Companyのタスクは workspaces/tasksディレクトリ に保存されています。

たとえば

  • admin-arrange-meeting-rooms (会議室の手配)
  • admin-make-spreadsheet (スプレッドシートの作成)
  • sde-create-new-repo (GitLabでのリポジトリの作成)

など、全部で175個のタスクがあります。

エージェントが使用するWebアプリケーション

The Agent Companyを起動すると、以下の4つのWebアプリケーションが起動します。

  • GitLab
  • ownCloud (オンラインストレージ)
  • Plane (プロジェクト管理ツール)
  • RocketChat (チャット)

エージェントはこれらにアクセスしながらタスクを遂行します。

このように、The Agent CompanyはWebアプリケーションの操作能力を評価する要素が大きいです。

タスクの実行環境

The Agent Companyでは、タスクの実行環境としてDockerを使用しています。

README.md に記載されていますが、各タスクは以下のような構造の環境で実行されます。

/utils
├── evaluator.py.enc
├── init.sh
├── config.py
├── common.py
├── eval.py
├── npc
├── ...
/instruction
├── task.md
├── ...
/workspace
├── ...

コンテナが起動すると、以下の流れでタスクが実行されます。

  1. /utils/init.sh で環境が初期化される
  2. /instruction/task.md に記載されたタスクをエージェントが実施する
  3. /utils/eval.py 経由で /utils/evaluator.py.enc を使って評価する

評価方法はエージェントが確認できないよう、/utils/evaluator.py.enc という暗号化されたファイルに実装されています。

evaluator.py

evaluator.py.enc は、evaluator.py を暗号化したものです。 evaluator.py は、エージェントのタスク実行結果を自動的に評価するためのスクリプトです。

タスクごとに評価の方法も違うため、タスクに応じた評価方法をPythonスクリプトとして実装しているということです。

たとえば、admin-arrange-meeting-rooms (会議室の手配) というタスクの評価方法は以下のように実装されています。

    :
@grader
def grade_checkpoint_1() -> bool:
    with open('/workspace/ans.txt', 'r') as file:
        content = file.read().strip()

        # Use regex to find all numbers in the content
        numbers = re.findall(r'\b\d*\.?\d+(?:[eE][-+]?\d+)?\b', content)

        # Check if there's exactly one number
        if len(numbers) != 1:
            return False
        else:
            number = int(numbers[0])
            return number == REFERENCE_ANSWER
    :

引用元:https://github.com/TheAgentCompany/TheAgentCompany/blob/main/workspaces/tasks/admin-arrange-meeting-rooms/evaluator.py

NPC

The Agent Companyでは、タスクの一部として「NPC(ノンプレイヤーキャラクター)」が登場します。

NPCは、たとえばエージェントがチャットに投稿したときに、自動で返信するような役割を果たします。

たとえば admin-employee-info-reconciliation (従業員情報の同期) というタスクでは、エージェントがチャットでエージェントに電話番号を尋ねた際に、従業員役のNCPがどのように回答すべきかが定義されています。

{
  "Priya Sharma": {
    "extra_info": "Someone will ask you for your phone number.",
    "strategy_hint": "Tell them your phone number is 516-837-4592."
  },
  "Sophia Rodriguez": {
    "extra_info": "Someone will ask you for your phone number.",
    "strategy_hint": "Tell them your phone number is 858-624-7193."
  },
  "Zhang Wei": {
    "extra_info": "Someone will ask you for your phone number.",
    "strategy_hint": "Tell them your phone number is 425-967-3841."
  }
}

引用元:https://github.com/TheAgentCompany/TheAgentCompany/blob/main/workspaces/tasks/admin-employee-info-reconciliation/scenarios.json

次回のご案内

以上、今回は「The Agent Company」をキャッチアップしました。

次回は「AIエージェントキャッチアップ #33 - LLManager (LangGraph)」ということで、承認リクエストを管理するLangGraphのワークフロー「LLManager」がテーマです!

generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!