ラベルどおりのモデルが応答しているかを、毎日公開チェックする
RelaySwitch は全モデルに毎日 1 回、同じチェック用プロンプトを送り、応答を過去の実行と比較して、結果をモデルごとに公開しています。ある ID の裏でモデルが入れ替わると、その ID は「Changed」と表示されます。同じ考え方のテストは、どの中継 API に対しても自分で実行できます。
01毎日の公開チェックの仕組み
カタログのすべてのモデルに、1 日 1 回、同じチェック用プロンプトを送ります。応答は過去数回の実行と比較され、モデルごとに 1 つの結果が付きます。ある ID の裏側で応答するモデルが入れ替えられた場合、その変化はここに表示されます。
結果の一覧は日次チェックのページ(英語)にあり、モデルごとの結果とチェックの時刻を確認できます。閲覧に API キーは不要です。チェックの対象になっているモデルと料金はモデル一覧にあります。
同じデータは公開の JSON としても取得できます。https://api.relayswitch.io/v1/proof は API キーなしで、どのオリジンからでも読め、5 分間キャッシュされます。
023 つの結果の読み方
| Stable(変化なし) | チェック用プロンプトへの応答が、過去の実行と一致しています。 |
| Changed(変化あり) | 応答が過去の実行と変わりました。その ID に応答しているものが、以前とは別のものになっています。 |
| Not reached(応答なし) | 直近の実行で、そのモデルのどの経路もチェックに応答しませんでした。前回の結果は履歴であり、現在の状態を示すものではありません。 |
03リクエストごとの署名付きレシート
04どの中継 API にも使える 7 つのテスト
中継 API を信用する前に、少額のチャージで次の 7 項目を試します。項目ごとに、何を送るか、本物のモデルがどう答えるか、入れ替えられているとどうなるかを書いています。最初の 3 つは 30 分ほどで終わり、残りの 4 つは数日かけて実行します。
| モデルに名前を聞く | 「あなたは何のモデルで、開発元はどこですか」と聞きます。システムプロンプト 1 行でどのモデルにも任意の名前を名乗らせられるので、正しく答えても何の証明にもなりません。間違った答えや矛盾した答えだけが手がかりで、単独では結論にしません。 |
| 知識のカットオフ日 | そのモデルの学習データの期限より後に起きたことと、前に起きたことを、それぞれ 3 つずつ聞きます。本物のモデルは、期限より後のことを知らないと答えます。古いモデルに入れ替わっていると、期限の少し前のことにも答えられません。開発元が公表しているカットオフ日を控えておきます。 |
| 長いコンテキストから合言葉を探す | 無関係な文章を 2,000 から 3,000 字ほど送り、途中に合言葉を 1 文だけ埋め込んで、最後にその合言葉を聞きます。ラベルどおりのモデルは、コンテキストウィンドウの範囲内ならそのまま取り出せます。ウィンドウの小さいモデルに入れ替わっている場合や、コンテキストが切り詰められる経路では、見つけられないか、作り話を返します。文章は自分で書き、ネット上の既存の文章は使いません。 |
| 算術とコードのカナリア | 答えが 1 つに決まる多桁の掛け算か、厳密な出力を求めるコードを送ります。フラッグシップのモデルは安定して正解し、小さいモデルに格下げされると誤答が目に見えて増えます。同じ問題を 5 回聞き、1 回の結果ではなく正誤の記録で判断します。 |
| トークン数の比較 | 開発元のトークナイザーで入力のトークン数を数え、レスポンスの usage にある prompt_tokens と比べます。本来は近い値になります。大きく違う場合は、ラベルのモデルで課金されていないか、リクエストが書き換えられています。出力も同じように completion_tokens と比べます。 |
| 複数日の一貫性 | ここまでの項目をスクリプトにして、毎日同じ時刻に実行し、回答を保存します。経路が入れ替えられた日には、回答が全体として変わります。1 回合格しても、合格し続けるとは限りません。 |
| レシートの確認 | リクエスト単位のレシート(モデル ID、課金トークン数、料金、署名)を求めます。公開鍵でオフライン検証できるレシートは、サービス側があとから書き換えられません。レシートのないサービスでは、自分の記録だけが頼りです。 |
05検出ツールの 3 つの層と、ツールでは分からないこと
中継 API の検出ツールが行っているのは、このセクションの表にある 3 つの層のどれか、またはその組み合わせです。
どの層でも分からないことが 2 つあります。1 つは倍率です。リクエストを本物のモデルにそのまま転送したうえで倍率を掛けて課金するサービスは、プロトコルの確認にも文体の確認にも合格します。レシートの課金トークン数に料金表の単価を掛け、引き落とされた残高と照合して初めて分かります。もう 1 つは量子化版です。同じモデルの低精度版は 1 問なら正解できますが、能力の曲線は全体として下がります。1 問の合格は結論にならず、同じ問題のセットを数日実行する必要があります。
| プロトコルのフィールド確認 | 最小のリクエストを送り、レスポンスにある開発元固有のフィールドを見ます。フィールド名、順序、ID の形式、停止理由の書き方です。別のモデルをラベルのモデルに見せかけているサービスは、ここで食い違います。課金に倍率を掛けているだけのサービスは通過します。 |
| 文体の指紋 | 同じプロンプトのセットを何度か送り、言い回しの癖、拒否するときの文、既定の書式を比べます。ラベルと異なる開発元のモデルへの入れ替えは、数回で分かります。同じファミリーの旧バージョンや蒸留版は文体が近く、区別できません。 |
| 能力の曲線 | 多桁の掛け算、長いコンテキストからの合言葉探し、制約付きのコードなど、難度を上げていく問題のセットで正答率を集計します。小さいモデルに入れ替わると曲線全体が下がるので、1 問だけの確認より確実です。 |
06まず、キーで呼べるモデル ID を確認する
テストの最初に、そのキーで呼び出せるモデル ID の一覧を取得します。RelaySwitch では、このリクエストに料金はかかりません。以降のテストでは、ここに表示された ID を 1 文字も変えずに model に書きます。
curl https://api.relayswitch.io/v1/models \ -H "Authorization: Bearer sk-relay-..."07毎日同じ条件で 1 件送り、レシートと照合する
下の例は、Claude の ID に最小のメッセージを 1 件送る curl です。content を自分のチェック用の質問に置き換え、max_tokens を答えが収まる値にし、temperature を 0 にして、毎日同じ時刻に送ります。応答の本文と usage を保存し、日ごとに比べます。
質問の例として、「48213 × 7391 を計算し、数字だけを出力してください。続けて、学習データがいつまでのものかを 1 文で答えてください」があります。正しい答えは 356342283 の 1 つだけで、カットオフの時期は開発元が公表している日付と照らし合わせます。入れ替えられたモデルは、掛け算を間違えるか、ラベルのモデルとは違う時期を答えます。
例は -i を付けているので、レスポンスヘッダーからそのリクエストの ID が分かります。この ID でレシートを取得し、モデル ID が変わっていないかを確認します。モデル ID が同じなのに答えだけが変わったのであれば、変わったのはプロンプトではなく、応答しているモデルです。OpenAI 形式で送る場合の例は Claude API の使い方にあります。
curl -i https://api.relayswitch.io/v1/messages \ -H "Authorization: Bearer sk-relay-..." \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{"model": "claude-fable-5.1", "max_tokens": 16, "messages": [{"role": "user", "content": "Reply with ok"}]}'よくある質問
- モデルが「自分は GPT です」「Claude です」と答えれば、信用できますか?
- それだけでは根拠になりません。システムプロンプト 1 行で、どのモデルにもどんな名前でも名乗らせることができます。カットオフ日より後の出来事を知らないと答えるか、長い文章の中の合言葉を取り出せるか、計算が合うかを確認してください。
- RelaySwitch の日次チェックは、どのように行われていますか?
- カタログの全モデルに毎日同じチェック用プロンプトを送り、応答を過去数回の実行と比較します。結果は Stable、Changed、Not reached の 3 種類です。公開の JSON として GET https://api.relayswitch.io/v1/proof で取得でき、API キーは不要です。
- 署名付きレシートは、どのように検証しますか?
- GET https://api.relayswitch.io/v1/requests/:id/receipt が、Ed25519 署名付きのレシートを返します。レシートにはモデル、課金トークン数、料金が記載されています。署名は公開鍵を使って検証でき、検証にアカウントは必要ありません。
- チェックに合格していれば、必ずラベルどおりのモデルですか?
- チェックが示すのは、その ID の今日の応答が過去と一致していることと、経路が応答していることです。除外できるのは、モデルの入れ替えと応答不能です。自分の用途については、自分のプロンプトでも一度確認してください。
- モデルの入れ替えや性能の低下は、どう見分けますか?
- 答えが 1 つに決まる同じ問題を、temperature 0 で毎日 1 回聞きます。正解だった答えが誤答に変わるか、答えるカットオフの時期が変わったら、モデルが入れ替わっています。あわせてレシートを見て、モデル ID が同じなのに答えが変わっていれば、変わったのはプロンプトではなくモデルです。RelaySwitch の日次チェックで Changed と表示されるのが、この状態です。
- テストには、いくらチャージすれば足りますか?
- 目的は、信用する前に証拠を得ることです。最低額の $10 のチャージで 7 項目を一通り試せます。合格してから追加でチャージすれば、合格しなかった場合の損失も限られます。