ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #32 - The Agent Company」という勉強会を開催しました。
generative-agents.connpass.com
アーカイブ動画はこちらです。
The Agent Company
今回は、LLMエージェントの実世界のタスクでのベンチマーク「The Agent Company」について、ソースコードを読んだりしてみました。
The Agent CompanyのGitHubリポジトリはこちらです。
The Agent Companyの論文はこちらです。
今回のポイント
The Agent Companyとは
The Agent Companyは、LLMエージェントの現実的なタスクの遂行能力を測るためのベンチマークです。
以下のページでリーダーボードを確認することができ、2024年12月時点の実行結果として「OpenHands + Claude 3.5 Sonnet」が1位となっています。
タスクの例
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 ├── ...
コンテナが起動すると、以下の流れでタスクが実行されます。
/utils/init.sh
で環境が初期化される/instruction/task.md
に記載されたタスクをエージェントが実施する/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 :
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." } }
次回のご案内
以上、今回は「The Agent Company」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #33 - LLManager (LangGraph)」ということで、承認リクエストを管理するLangGraphのワークフロー「LLManager」がテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!