はじめに
七尾百合子さん、お誕生日 59日目 おめでとうございます! nikkieです。
BATTLE OF LLM1、開演です!
目次
Chatbot Arena
LLMのリーダーボードの1つ、Chatbot Arena。
https://lmarena.ai/
2023年6月の LLM-as-a-Judge 論文で登場しました。
日々、多くのモデルがしのぎを削っています。
ブラインドされた2つのモデルのうちどちらがよいかを、人間(クラウドソーシング)が判断して各モデルのレーティングが決まる、くらいのおぼろげな理解です(宿題事項)
ソースコードはGitHubに公開されていて、PyPIにパッケージがあることに気づきました。
https://pypi.org/project/fschat/
ここからローカル環境で動かせるのではと考えました
ローカル環境で動かす
まとめ
- Python 3.12.8
pip install "fschat[model_worker,webui]" plotly openai google-generativeai- 2つ起動する
{ "gemini-2.0-flash-001": { "model_name": "gemini-2.0-flash-001", "api_type": "gemini", "api_key": "INPUT YOUR KEY", "anony_only": false }, "gpt-4o-2024-11-20": { "model_name": "gpt-4o-2024-11-20", "api_base": "https://api.openai.com/v1", "api_type": "openai", "api_key": "INPUT YOUR KEY", "anony_only": false } }
2つのモデルの出力を比較できます4

動かしての学び
python -m fastchat.serve.gradio_web_server_multiには、openaiライブラリとOPENAI_API_KEYが常に必要なようでした。
OPENAI_API_KEYはapi_endpoint.jsonにも書くので重複と感じましたが、OpenAIのモデルでユーザ入力のチェックをまず行っているようです5。
api_endpoint.jsonでClaude v.s. Geminiと設定したときも、これらのモデルへの入力をチェックするためにOpenAIのモデルが使われるという理解です。
api_endpoint.jsonの書き方はREADMEから。
https://github.com/lm-sys/FastChat/tree/0e6d3e4beaab66f4d3f93db72541a4abab8af28d?tab=readme-ov-file#launch-chatbot-arena-side-by-side-battle-ui
- api_type: openai
- api_type: gemini
- https://github.com/lm-sys/FastChat/blob/v0.2.36/fastchat/serve/api_provider.py#L40-L48
api_baseが登場しなかったので指定せず進めています
- google-generativeaiに依存
- https://github.com/lm-sys/FastChat/blob/v0.2.36/fastchat/serve/api_provider.py#L40-L48
python -m fastchat.serve.gradio_web_server_multiのエラーの読み方はGemini 2.5 Proから教わりました。
「AttributeError: 'NoneType' object has no attribute 'skip_next'」というログを全部入れたところ、ログの前半に具体的なエラーが記載されていました。
openaiが未インストールでimportできなかったり、環境変数OPENAI_API_KEYが設定されていなかったりでエラーが送出されていました。
終わりに
Chatbot Arenaをローカル環境で動かせました。
「複数のLLMに同一のプロンプトを送ったら?」の方法はこのブログで過去にも取り上げてきました6が、Chatbot Arenaという候補が加わりました。
裏ではJSONファイルにモデルの入出力が記録されていたのもポイント高いです
おまけ:Chatbot Arenaへの疑義
There's a new paper circulating looking in detail at LMArena leaderboard: "The Leaderboard Illusion"https://t.co/LfjIII71qX
— Andrej Karpathy (@karpathy) 2025年4月30日
I first became a bit suspicious when at one point a while back, a Gemini model scored #1 way above the second best, but when I tried to switch for a few… https://t.co/ipg0t8mXNE
-
BATTLE OF THEATERならぬ
↩『BATTLE OF THEATER』について①
— ミリオンライブ! シアターデイズ【公式】 (@imasml_theater) 2025年5月15日
「本戦公演イベント」では、チームごとに獲得した「BOTファン数」によって順位が決まります。
BOTファン数は、イベント中に獲得できる「プロデュースパワー」を応援したいチームに使用することで増えていきますよ♪#ミリシタ https://t.co/lt8gX6wTdu - 執筆時の最新(v0.2.36)では指定なし https://github.com/lm-sys/FastChat/blob/v0.2.36/pyproject.toml#L23↩
- https://github.com/lm-sys/FastChat/blob/v0.2.36/fastchat/utils.py#L151 でエラー送出↩
- HotpotQAからの1問です ↩
-
「
api_endpoint.jsonのAPIキーを見ているとしたらOPENAI_API_KEYはダミーの値でもいいのでは?」と試したところ、私の入力がモデレーション7されました。「YOUR INPUT VIOLATES OUR CONTENT MODERATION GUIDELINES.」(OpenAIのモデルで判定に失敗したら、安全側に倒してモデレーションということかと思います)↩ - 過去記事2つ ↩
- もしかして、つながった!? ↩