その他

【SWE-bench】LLMやAI agentの評価って、どうするの?

その他
この記事は約12分で読めます。

はじめに

みなさん、最近いろいろなLLMが出てきてますよね。いろいろなLLMには、能力の差やエージェントによる依頼内容の得意不得意があると思います。

そのような中で、LLMの能力を評価できるSWE-benchというものがあります。

SWE-bench Leaderboard

SWE-benchとは

くわしく

SWE-bench(Software Engineering Benchmark)は、LLMのようなAIが本物のソフトウェア開発タスクをどれだけ正しく正確に評価できるかベンチマークを出してくれるものです。2023年にMITとUCバークレー、Meta AIらによって開発され、GitHub上で公開されています。

ここでは、GitHubに実在するバグ修正タスク(issue)+パッチ(PR)を元に構成されており、約2,300件以上のPythonコードベースのタスクを含む大規模ベンチマークです。バグが修正できるか?というのが基準になっており、さまざまなLLMが対象になっています。

できること

LLMの評価

先ほどから書いているように、SWE-benchは、LLMのソフトウェア開発を定量評価できます。英語で書かれたGitHubのissueを読み、対象のPythonのプロジェクトソースコードを読ませて、PR作成までAIが自動生成し、修正が正確かどうか、単体テストを通して評価されます。

総合的な能力評価

上記の修正は、複数のファイルにまたがることもあります。つまり、単純に一つのファイルを見て修正するのではなく、複数のファイルをみて修正しなければいけない総合力が求められています。LLMがいくつもの工程がある課題に対して、ステップを踏みながら修正できるかの実力が評価できます。

他ツール使用前提での評価指標にも

以前、ゴミ出しLMの記事でRAGについて少し書いたのを覚えているでしょうか?

この記事でも記載したように、近年ではRAGやツール連携を導入したAIエージェントも普及してきています。その代表的なツールとして、Devinがいますね。

じつはDevinもSWE-benchのベンチマークに挑戦しています。Devinは、RAG的なコード検索やファイル閲覧を通して、コード修正やテスト実行などを行っています。つまり、ツールを統合したAIエージェントの比較指標としてもSWE-benchが使われ始めているということです。

セットアップ

セットアップについては、GitHubのREADMEに日本語版のセットアップの方法が書いてあるので、これを参考に進めていきます。

SWE-bench/docs/other_languages/README_JP.md at main · SWE-bench/SWE-bench
SWE-bench : Can Language Models Resolve Real-world Github Issues? - SWE-bench/SWE-bench

Dockerの準備

まず、SWE-benchをGitHubからクローンしてくる前に、Dockerの準備をしましょう。
セットアップについての詳しい説明はここでは割愛させていただきます。今回は、下記サイトを参考にしながら準備をしました。よければご覧ください。

Docker Desktop の Mac へのインストール
Docker Desktop の Mac へのインストール方法を説明します。
Docker for Macをインストールする方法は?導入手順や使い方を初心者向けに解説 - カゴヤのサーバー研究室
Dockerは、アプリケーションの開発、配布、実行を効率化するためのオープンソースプラットフォームです。 本記事では、Macユーザー向けのDocker Dockerは、アプリケーションの開発、配布、実行を効率化するためのオープンソースプラットフォームです。本記事では、Macユーザー向けのDocker Desktopのイ...

GitHubからリポジトリーをクローン

まずはリポジトリーをクローンします。
クローンできたら、SWE-benchのファイルの中に入りましょう。

git clone https://github.com/princeton-nlp/SWE-bench.git

cd SWE-bench

ちょっと寄り道。Pythonのバージョンを確認する。

続いて、SWE-benchをインストールしていきます。
ここで注意が必要なのが、Python3.10以上が必要なことです。まだインストールされていないがいたら、以下の手順でインストールしていきましょう。

最新のPython 3.10または3.11をインストールしてください。

brew install python@3.10

インストール後、新しい仮想環境を作ります。

python3.10 -m venv venv

source venv/bin/activate

ついてにpipのアップデートもしておきましょう。

pip install --upgrade pip

セットアップの続き

クローン・Pythonの準備・Dockerの準備が完了したら、セットアップの続きをしていきましょう。
以下のコマンドを使用して、いくつかライブラリをインストールしていきます。

pip install -e .

その後、インストールのテストをコマンドを実行して確認するのですが、エラーが何回か発生しました。その原因として、ライブラリがインストールされていないものがありましたので、必要であれば参考にしてください。

pip install beautifulsoup4
pip install ghapi
pip install unidiff
pip install dotenv
pip install docker
pip install datasets
pip install modal
pip install tenacity

その後、以下のコマンドを実行すると、インストールのテストが実行されます。

python -m swebench.harness.run_evaluation \
    --predictions_path gold \
    --max_workers 1 \
    --instance_ids sympy__sympy-20590 \
    --run_id validate-gold

# \は含めずに、コマンドは一行で一度に実行してください。

公式の手順では、これでインストールのテストも無事に完了し、問題なく終了するはずでした。
しかし、このコマンドを実行した後のテスト結果は、おかしな結果(期待していた結果と違う結果)で終わっています。

Removed 0 images.
Total instances: 1
Instances submitted: 1
Instances completed: 0          # 本来ならここに1がつくはずなのに、
Instances incomplete: 0
Instances resolved: 0
Instances unresolved: 0
Instances with empty patches: 0
Instances with errors: 1          # ここに1がついている。
Unstopped containers: 0
Unremoved images: 0
Report written to gold.validate-gold.json

原因究明(問題ない人は飛ばしてください)

ログを確認しながら進めていくと、いくつかの問題がみつかりました。同じように問題が発生した人は、参考にしてみてください。

Dockerイメージが見つからないエラー

まず、上記の結果が表示された上に、下記のようなエラーが出ているかと思います。

Running 1 instances...
  0%|                                                                             | 0/1 [00:00<?, ?it/s]
Error building image sympy__sympy-20590:
404 Client Error ... pull access denied for swebench/...

これは、Dockerイメージが見つからないエラーです。
SWE-benchは、バグ修正を検証するために「Docker」という仕組みを使って、それぞれのプロジェクト専用の仮想環境を自動で作成しようとします。
ですが、このときに参照されていた「イメージ(環境の元になるもの)」が、SWE-benchの公式レジストリ上に存在しないまたは、認証(ログイン)が必要な状態だったため、エラーになりました。

そこで、実行する際のコマンドに、以下を追加しました。
このコマンドを追加することによって、Dockerイメージを外部から取ってくるのではなく、自分の環境で手元でビルド(構築)するように設定を変更しました。

--namespace none

これにより、SWE-benchは公式イメージを探しにいかず、自分の環境で構築してくれるようになりました。

amd64を指定したのにエラーが出る

これは、Appleシリコンで環境構築している人に出てくるかもしれないエラーですが、M1以降のMacでは、CPUのアーキテクチャが “arm64″と呼ばれるタイプです。しかし、しかし、SWE-benchでは「x86_64」というタイプの環境をエミュレート(仮想的に動かす)必要がありました。

ここでx86_64と同じで別名の、amd64を間違えて指定すると、SWE-benchの内部で「そのようなアーキテクチャは知らない!」と怒られてしまいました。
そこで、アーキテクチャをx86_64に設定することで、正しくコマンドが実行されるようになりました。

TARGET_ARCH=x86_64

アーキテクチャなどは、専門外すぎて全くわからなかったので、chatGPTが詳しい表にまとめてくれました。Appleシリコンを搭載しているMac以外の人も、よければ参考にしてください。

名前説明誰が作った?使われている例
x86昔からあるIntelのCPU設計(32bit)Intel古いWindows、古いLinuxなど
x86_64x86の64bit版。現在のIntel/AMDの主流AMD(初出)、Intelも採用ほとんどのPC(Windows, Linux, etc)
amd64= x86_64の別名(Linuxなどでよく使う)AMD(名前由来)Ubuntu, Docker, Pythonのビルド表記等
arm64ARMの64bit版。モバイルやApple SiliconのMacで使われるARM HoldingsiPhone, iPad, M1〜M4 Mac, Raspberry Pi
主なアーキテクチャの種類と違い
特徴x86_64 / amd64(Intel/AMD)arm64(Apple Siliconなど)
命令の種類複雑でパワフルシンプルで省電力
主な用途デスクトップPC、サーバースマホ、タブレット、Apple製品など
対応OSやソフト古いソフトも多く対応している最近のソフトは対応増(でもまだ少なめ)
Dockerイメージ名amd64 または x86_64arm64
それぞれの用途や違い
表記意味よくある場面
x86_64Intel/AMDの64bit設計通常のPCやサーバー
amd64x86_64と同じ(別名)DockerやLinuxでよく見る
arm64ARM系の64bit設計(Appleなど)iPhone, M1-M4 Mac など
今回使用しているアーキテクチャなどのまとめ

最終的にうまくいったコマンド

上記の課題を踏まえ、最終的には下記のコマンドでうまくテストを実行させることができました。

TARGET_ARCH=x86_64 \
python -m swebench.harness.run_evaluation \
--predictions_path gold \
--max_workers 1 \
--instance_ids sympy__sympy-20590 \
--run_id validate-gold \
--namespace none

# \は含めずに、コマンドは一行で一度に実行してください。

このコマンドを実行することで、無事にDockerからイメージが作られ、対象のバグ修正の検証まで完了しました。

Base images built successfully.
Total environment images to build: 1
1 ran successfully, 0 failed: 100%|████████████████████| 1/1 [01:12<00:00, 72.83s/it]
All environment images built successfully.
Running 1 instances...
1 ran successfully, 0 failed: 100%|████████████████████| 1/1 [00:55<00:00, 55.31s/it]
All instances run.
Cleaning cached images...
Removed 0 images.
Total instances: 1
Instances submitted: 1
Instances completed: 1             # 完了に1件ついた
Instances incomplete: 0
Instances resolved: 1
Instances unresolved: 0
Instances with empty patches: 0
Instances with errors: 0            # エラーが消えた
Unstopped containers: 0
Unremoved images: 0
Report written to gold.validate-gold.json

いろいろな評価方法

さて、ここまでSWE-benchの評価方法について紹介をしてきましたが、いかがでしたでしょうか。

しかし、この記事を作成している間にも、例えば画像生成であったり外部連携に特化したAIだったりと、日々いろいろなAIが出てきています。それらは、今回紹介したSWE-benchのように、issueをやらせた正答率では評価できない場合もありますよね。

このように、AI agentの評価にはいくつか指標を用いながら評価することが良さそうで、今回紹介したSWE-benchの評価以外にも、これらの指標も活用すると良さそうです。
こちらの記事にわかりやすく指標がまとめられていたので、共有させていただきます。

AI Agentの評価指標まとめ

コスト的な評価

さて、ここまでは能力的な部分を語ってきましたが、導入するのであれば、コスパよく行きたいですよね!
たとえば、簡単な修正をするのに、Devinのような高価なAIエージェントを使うか、Cursorをつかうか、というのは、わかりやすい選択肢になってくると思います。

さらに言えば、人間がもう少し頑張って指示を作れば、高いコストを払って任せていたものが、安いコストで済むことも考えられますよね。(といっても、頑張る部分にコストをかけているという見方もできると思いますが・・・。)

もし企業や組織への導入を検討する際には、このような考え方(指標)も大切になってくるのかもしれません。

まとめ

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

今回はSWE-benchを使ってLLMやAI agentの能力を測ってみました。AI agentの能力を測るには、これ以外にもさまざまなツールがあり、指標もありますから、それらも参考にして、AI agentの能力を測ってましょう!

また、賢いAI agentを使うに越したことはないですが、どこまで人間がやる作業なのかや、どこまでコストをかけたほうが質が良くなるかなど、評価以外の部分も導入に際しては検討する必要がありそうです。導入計画を立てる際には、これらの点についても考慮してみましょう。