Open1
LLMが生成するGoコードの質的評価 - HTTPサーバーの実装から
大規模言語モデルによるコード生成の評価
単体コード生成の定番セット
- 代表的な評価データセット
- 代表的な評価指標
- pass@1
- その他の定番セット
この発表でやりたいこと
- プログラミング言語に依存したタスク設定と評価指標
- Goの典型的なタスクを用意する
- Gopherから見て妥当・自然な実装になっているか検証する
やってみた
対象モデル
- Google
- Gemini 2.5 Flash
- Gemini 2.5 Pro
- Anthropic
- Claude 4 Sonnet
- Claude 4 Opus
- OpenAI
- GPT-5
- Alibaba(中国勢 / オープンウェイト)
- Qwen2.5 Coder 32B Instruct
- Moonshot AI(中国勢 / オープンウェイト)
- Kimi K2
プロンプト
Write a function in Go that returns an http.Handler. This http.Handler should have two endpoints: / should return "Hello, world!", and /health should return a JSON object {"status": "ok"}. The server should listen on port 8080. Include proper error handling when starting the server and logging indicating the port it's listening on in the code.
参考訳(Plamo翻訳による)
Go言語でhttp.Handlerを返す関数を作成してください。このhttp.Handlerには以下の2つのエンドポイントが必要です:
/ にアクセスすると "Hello, world!" という文字列を返す
/health にアクセスすると JSONオブジェクト {"status": "ok"} を返す
サーバーはポート8080で待機するようにしてください。サーバー起動時の適切なエラー処理と、コード内で待機中のポートをログに記録する機能を含めてください。
結果
--- PASS: TestServer/Human (0.00s)
--- PASS: TestServer/Human/GET_/notfound (0.00s)
--- PASS: TestServer/Human/GET_/ (0.00s)
--- PASS: TestServer/Human/GET_/health (0.00s)
--- FAIL: TestServer/Gemini_2.5_Flash (0.00s)
--- FAIL: TestServer/Gemini_2.5_Flash/GET_/notfound (0.00s)
--- PASS: TestServer/Gemini_2.5_Flash/GET_/ (0.00s)
--- PASS: TestServer/Gemini_2.5_Flash/GET_/health (0.00s)
--- PASS: TestServer/Gemini_2.5_Pro (0.00s)
--- PASS: TestServer/Gemini_2.5_Pro/GET_/notfound (0.00s)
--- PASS: TestServer/Gemini_2.5_Pro/GET_/ (0.00s)
--- PASS: TestServer/Gemini_2.5_Pro/GET_/health (0.00s)
--- FAIL: TestServer/Claude_4_Sonnet (0.00s)
--- FAIL: TestServer/Claude_4_Sonnet/GET_/notfound (0.00s)
--- PASS: TestServer/Claude_4_Sonnet/GET_/ (0.00s)
--- PASS: TestServer/Claude_4_Sonnet/GET_/health (0.00s)
--- PASS: TestServer/Claude_4_Opus (0.00s)
--- PASS: TestServer/Claude_4_Opus/GET_/notfound (0.00s)
--- PASS: TestServer/Claude_4_Opus/GET_/ (0.00s)
--- PASS: TestServer/Claude_4_Opus/GET_/health (0.00s)
--- FAIL: TestServer/GPT-5 (0.00s)
--- FAIL: TestServer/GPT-5/GET_/notfound (0.00s)
--- FAIL: TestServer/GPT-5/GET_/ (0.00s)
--- PASS: TestServer/GPT-5/GET_/health (0.00s)
--- PASS: TestServer/Qwen2.5_Coder_32B_Instruct (0.00s)
--- PASS: TestServer/Qwen2.5_Coder_32B_Instruct/GET_/notfound (0.00s)
--- PASS: TestServer/Qwen2.5_Coder_32B_Instruct/GET_/ (0.00s)
--- PASS: TestServer/Qwen2.5_Coder_32B_Instruct/GET_/health (0.00s)
--- PASS: TestServer/Kimi-K2 (0.00s)
--- PASS: TestServer/Kimi-K2/GET_/notfound (0.00s)
--- PASS: TestServer/Kimi-K2/GET_/ (0.00s)
--- PASS: TestServer/Kimi-K2/GET_/health (0.00s)
所感
- だいたい動いているが…
-
/
が/notfound
にマッチするという仕様の把握が抜けがち - HTTPメソッドを限定する仕様が落ちがち
-
- 新しい仕様は把握できてない
- net/httpのPattern
- 不要な処理が散見される
- 片方のエンドポイントだけに
w.WriteHeader(http.StatusOK)
を差し込んでいるなど
- 片方のエンドポイントだけに
- 微妙に効率の悪い実装方針を取りがち
-
fmt.Fprintf()
よりもio.WriteString()
のほうが効率よい
-