Dipublikasikan
Engineering

Pendeteksi Claude palsu kini menjadi pustaka sumber terbuka

ai-model-verifier adalah mesin di balik penguji model kami, diterbitkan di npm dengan lisensi AGPL-3.0. Beri dia URL dasar, kunci, dan model, lalu dia memberi tahu apakah endpoint menyajikan apa yang dijualnya, kini dengan pemeriksaan tanda tangan penalaran dan penagihan token.

·4 mnt baca·Oleh Tim UnoRouter
engineeringpengumuman

Pada bulan April kami menerbitkan angka-angka tentang penjual ulang Claude palsu: 183 kanal di 8 penyedia yang menjawab sebagai Kiro, Codeium, atau model lain yang memakai label nama Claude. Probe yang menangkap mereka hidup di dalam pipeline sinkronisasi kami. Kini probe itu hidup dalam paket yang bisa dipasang siapa saja.

ai-model-verifier tersedia di npm dan GitHub dengan lisensi AGPL-3.0. Ia menerima URL dasar, kunci API, dan nama model, lalu mengembalikan satu dari tiga vonis, genuine, suspicious, atau unverified, bersama aturan yang terpicu dan respons mentah probe di sampingnya.

Mengapa pustaka

Pemeriksaan yang sama kini berjalan di tiga tempat: di peramban Anda pada penguji model, di server kami untuk peringkat publik, dan di dalam pipeline sinkronisasi yang memutuskan jalur upstream mana yang ditampilkan UnoRouter. Tiga salinan daftar pola akan saling menyimpang. Satu paket tidak.

Ia sengaja dibuat isomorfis. Hanya API standar web, tanpa impor node:, nol dependensi runtime. Panggilan HTTP disuntikkan, sehingga peramban bisa mengakali CORS dan server bisa lewat fetch yang aman dari SSRF. Penyedia dan detektor adalah titik masuk terpisah, jadi memeriksa Anthropic tidak pernah ikut membundel konfigurasi Gemini.

Apa yang baru sejak April

Empat probe perilaku dari tulisan pertama masih menjadi inti: cerita anak kucing, haiku, pertanyaan identitas, dan pertanyaan nama model, kini untuk endpoint berformat Anthropic, OpenAI, dan Gemini. Di sekelilingnya ada pemeriksaan yang tidak bergantung pada bertanya kepada model siapa dirinya.

  • Tanda tangan penalaran. Claude melampirkan tanda tangan yang dibuat server pada setiap blok penalaran. Relay yang menyajikan model lain tidak bisa membuatnya. Probe identitas bisa diarahkan dengan prompt sistem; tanda tangan tidak.
  • Pembukuan token. Relay bisa meneruskan Claude asli namun tetap menggelembungkan input_tokens pada setiap panggilan. Dua prompt yang berbeda oleh potongan teks tetap harus berbeda dalam token yang ditagih dalam rentang yang diketahui, count_tokens harus cocok dengan yang ditagih, dan keluaran harus tetap di bawah max_tokens. Opus 4.7 dan 4.8 memakai tokenizer berbeda, sehingga rentang itu sekaligus menjadi pemeriksaan tingkatan.
  • Ketidaksesuaian tingkatan dan substitusi. Ditagih Opus tetapi disajikan Sonnet lolos dari probe perilaku, karena Sonnet menulis cerita anak kucing yang sangat baik. Probe nama model menangkap jawaban yang menyebut tingkatan yang lebih murah, dan pemeriksaan amplop menangkap endpoint yang mengembalikan id model berbeda dari yang diminta.
  • Percampuran respons dan kebocoran bahasa. Setiap prompt membawa nonce. Jawaban yang mengembalikan nonce milik orang lain berarti proxy mencampur respons antar pengguna. Karakter CJK dalam jawaban atas prompt berbahasa Inggris menunjuk ke model Tiongkok yang disubstitusi.
  • Metadata amplop. Id chatcmpl- di dalam jawaban berformat Anthropic, atau kunci usage OpenAI dalam respons Messages, berarti ada lapisan penerjemah di antara Anda dan model. Dilaporkan sebagai pengamatan, bukan vonis: gateway kami sendiri persis lapisan seperti itu.
  • Throughput. Model yang lebih besar lebih lambat per token, sehingga jalur yang ditagih sebagai Opus tetapi berjalan secepat Sonnet layak dilihat. Disampel, tidak pernah diberi ambang: perbandingan yang berguna adalah antar jalur yang menyajikan model yang sama, dan hanya pemanggil yang bisa menyusunnya.

Apa yang tidak dibuktikannya

Tanda tangan yang valid membuktikan bahwa jalur Anthropic asli yang menjawab. Ia tidak membuktikan tingkatan mana: Sonnet mengembalikan tanda tangan yang sepenuhnya sah ketika dijual sebagai Opus, jadi lolos di sini tetap butuh pemeriksaan tingkatan. Memutar ulang blok penalaran agar Anthropic memvalidasi ulang tanda tangan terdengar seperti uji pamungkas. Kami membangunnya, dan itu tidak bekerja lewat relay. Dua upstream aktif mengembalikan 200 untuk blok asli dan untuk blok yang sama dengan 308 byte base64 acak menggantikan tanda tangannya. Relay mengirim ulang giliran ke backend-nya sendiri, jadi tidak ada yang pernah memvalidasinya. Opsi ini mati secara bawaan dan didokumentasikan demikian.

Pemeriksaan tanda tangan dan token diporting dari veridrop, juga AGPL, yang toleransinya dikalibrasi terhadap API resmi. Kami mempertahankan batas yang tampak longgar itu karena respons Anthropic yang asli berada dekat dengannya.

Gunakan

Penguji model menjalankan seluruh rangkaian di peramban Anda, termasuk pemeriksaan tanda tangan dan token, dan tidak ada yang keluar dari mesin Anda selain panggilan ke penyedia Anda. Halaman peringkat menerbitkan hasil yang orang pilih untuk dibagikan. Untuk pipeline Anda sendiri:

typescript
import { runVerification } from "ai-model-verifier";

const result = await runVerification({
  provider: "anthropic",
  baseUrl: "https://YOUR-PROVIDER",
  apiKey: process.env.YOUR_KEY,
  model: "claude-opus-4-8",
  mode: "server",
  checkSignature: true,
  checkTokenTruth: true,
});

console.log(result.verdict, result.reasons);
// "suspicious" [ "tier-mismatch: requested claude-opus-4-8, served sonnet" ]

Aktifkan yang Anda butuhkan. checkSignature dan checkTokenTruth masing-masing memakan permintaan tambahan, jadi tetap mati kecuali diminta. Metadata amplop dan throughput dibaca dari respons yang sudah dibuat oleh proses dan tidak memakan biaya apa pun.

Uji sebuah penyedia, baca tulisan bulan April untuk angka-angka yang memulai semua ini, atau buka issue di GitHub jika endpoint asli mendapat vonis yang salah.

Postingan terkait