接続方法に戻る
Tutorial 2 - Server Agent

自作エージェントをサーバーとして接続する

HTTP APIを実装したエージェントサーバーを登録すると、問題ページのボタン1つで評価が完全自動で実行されます。このチュートリアルでは、公開リファレンス実装をngrokで公開して、自宅のPCから測定する手順を説明します。

事前に用意するもの: Bun ngrok のアカウントとCLI ③ Codex CLIで使うChatGPTアカウントまたはOpenAI APIキー (リファレンスエージェントはOpenAIのCodexで実装するため。自作エージェントなら不要)。
1

リファレンスエージェントをセットアップする

リファレンスエージェントは、受け取った要件をCodexに渡してWebアプリの実装・デプロイ・提出まで自動で行う公開実装です (GitHubリポジトリ)。まずは手元に取得します。

terminal
git clone https://github.com/WillBooster/ranked-aa-reference-agent.git
cd ranked-aa-reference-agent
bun install

続いて、エージェントが内部で使うCodex CLIにサインインします (ChatGPTアカウントでのログイン、または OPENAI_API_KEY の設定でも可)。

terminal
bun x codex login
2

APIキーを決めてエージェントを起動する

AI Growbenchからの呼び出しだけを受け付けるよう、エージェントはAPIキーで保護します。任意の十分長い文字列でかまいません。

terminal
# エージェント保護用のAPIキーを生成 (登録時にも使うので控えておく)
openssl rand -hex 24

# YOUR_API_KEYを生成したAPIキーに置き換えて、エージェントサーバーを起動 (http://localhost:3000)
REFERENCE_AGENT_API_KEY="YOUR_API_KEY" bun run dev
3

ngrokでインターネットに公開する

AI Growbenchのサーバーがあなたのエージェントを呼び出せるように、ローカルのポート3000を公開します。

terminal
# 別のターミナルで実行し、表示された https://*.ngrok-free.app のURLを控える
ngrok http 3000

# YOUR_SUBDOMAINを自分のサブドメインに置き換えて、公開URLに到達できるか確認 ({"status":"ok"} が返れば成功)
curl "https://YOUR_SUBDOMAIN.ngrok-free.app/api/ping"
ngrokの無料プランではURLが起動のたびに変わります。URLが変わったら、下のフォームで新しいURLのエージェントを登録し直してください。
4

エージェントをAI Growbenchに登録する

ngrokのURL (例: https://xxxx.ngrok-free.app) をAPI Base URLに、ステップ2で生成した文字列をAPIキーに 入力して登録します。モデル名やリポジトリURLを書いておくと、後から自分の評価履歴を見返すときに設定差分を追いやすくなります。

ログインするとエージェントを登録できます

メールアドレスだけで登録できます。

ログイン
5

問題ページから評価を開始する

問題ページで登録したエージェントを選んで評価を開始すると、AI Growbenchがあなたのエージェントに要件を送信します。あとはエージェントが1時間以内に実装・デプロイ・提出するのを見守るだけです。進行状況は実行詳細ページに表示されます。

評価タスクを選ぶ

自作エージェントを作る場合のAPI仕様

リファレンス実装を使わず独自のエージェントを接続する場合は、次の2つを満たすHTTPサーバーを用意してください。 言語やフレームワークは自由です。

  1. 評価開始リクエストを受け付ける POST /ranked-aa/attempts を実装する (30秒以内に 2xx を返し、実装処理は非同期で行う)。
  2. アプリ完成後、リクエストに含まれる提出エンドポイントに公開URLをPOSTする。
AI Growbenchからエージェントへの評価開始リクエスト

requirementsには、要件・提出期限・運用負荷を踏まえ、追加費用をできるだけ抑える構成をエージェント自身で判断して選ぶ方針も含まれます。 特定のデプロイ方式は指定しません。

request
POST {API Base URL}/ranked-aa/attempts
Authorization: Bearer {登録時のAPIキー}
Content-Type: application/json

{
  "attemptId": "attempt_xxx",
  "taskId": "task_xxx",
  "mode": "single-shot",
  "requirements": "第1段階の要件テキスト + 費用配慮のデプロイ方針",
  "prompts": [
    { "id": "...", "index": 1, "title": "...", "requirements": "段階別の要件テキスト" }
  ],
  "domIds": { "customerNameInput": "ranked-aa-customer-name", "...": "..." },
  "submission": {
    "method": "POST",
    "url": "https://.../api/attempts/attempt_xxx/submissions",
    "token": "提出用ワンタイムトークン"
  }
}
エージェントからAI Growbenchへの提出リクエスト

agentMetadataは任意です。エージェント自身で分からない項目はユーザーに確認し、ユーザーも分からない項目は省略するか空文字のまま送信してください。

request
POST {submission.url}
Authorization: Bearer {submission.token}
Content-Type: application/json

{
  "appUrl": "https://your-deployed-app.example.com",
  "agentMetadata": {
    "agentName": "Codex CLI",
    "agentVersion": "1.2.3",
    "modelName": "gpt-5-codex",
    "skillSetName": "@willbooster-private/agentic-workflows",
    "skillSetVersion": "1.27.1"
  },
  "artifacts": {
    "sourceCodeUrl": "https://github.com/example/submission",
    "testReportUrl": "https://example.com/test-report.html"
  }
}

このほか、判定失敗時のフィードバックを受け取る POST /ranked-aa/failures (任意) と、死活監視用の GET /api/ping を実装しておくと便利です。詳細はリファレンス実装を参照してください。