nikkie-ftnextの日記

イベントレポートや読書メモを発信

Chatbot Arenaをローカル環境で動かす(GPT v.s. Geminiの設定)

はじめに

七尾百合子さん、お誕生日 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
    • plotlyはwebui extra2で入らず
    • openaiは常に必要な認識(後述)
    • google-generativeaiはGemini用
  • 2つ起動する
    • python -m fastchat.serve.controller
    • python -m fastchat.serve.gradio_web_server_multi --register-api-endpoint-file api_endpoint.json
{
    "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_KEYapi_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

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への疑義


  1. BATTLE OF THEATERならぬ
  2. 執筆時の最新(v0.2.36)では指定なし https://github.com/lm-sys/FastChat/blob/v0.2.36/pyproject.toml#L23
  3. https://github.com/lm-sys/FastChat/blob/v0.2.36/fastchat/utils.py#L151 でエラー送出
  4. HotpotQAからの1問です
  5. api_endpoint.jsonAPIキーを見ているとしたらOPENAI_API_KEYはダミーの値でもいいのでは?」と試したところ、私の入力がモデレーション7されました。「YOUR INPUT VIOLATES OUR CONTENT MODERATION GUIDELINES.」(OpenAIのモデルで判定に失敗したら、安全側に倒してモデレーションということかと思います)
  6. 過去記事2つ
  7. もしかして、つながった!?