Pubblicato
Ingegneria

Il rilevatore di falsi Claude ora è una libreria open source

ai-model-verifier è il motore dietro il nostro tester di modelli, pubblicato su npm con licenza AGPL-3.0. Dagli un URL base, una chiave e un modello e ti dice se l'endpoint serve ciò che vende, ora con verifica della firma di ragionamento e della fatturazione dei token.

·4 min di lettura·Di Team UnoRouter
ingegneriaannuncio

Ad aprile abbiamo pubblicato i numeri sui rivenditori di Claude falsi: 183 canali su 8 fornitori che rispondevano come Kiro, Codeium o un altro modello con l'etichetta di Claude. Le sonde che li hanno scoperti vivevano dentro la nostra pipeline di sincronizzazione. Ora vivono in un pacchetto che chiunque può installare.

ai-model-verifier è su npm e su GitHub con licenza AGPL-3.0. Prende un URL base, una chiave API e un nome di modello e restituisce uno di tre verdetti, genuine, suspicious o unverified, insieme alla regola scattata e alle risposte grezze delle sonde.

Perché una libreria

Gli stessi controlli girano ora in tre posti: nel tuo browser sul tester di modelli, sui nostri server per le classifiche pubbliche e dentro la pipeline di sincronizzazione che decide quali corsie upstream UnoRouter espone. Tre copie di una lista di pattern finiscono per divergere. Un solo pacchetto no.

È isomorfo di proposito. Solo API standard del web, nessun import node:, zero dipendenze a runtime. La chiamata HTTP è iniettata, così un browser può aggirare CORS e un server può passare da un fetch protetto contro SSRF. Fornitori e rilevatori sono punti di ingresso separati, quindi controllare Anthropic non impacchetta mai la configurazione di Gemini.

Cosa c'è di nuovo da aprile

Le quattro sonde comportamentali del primo articolo restano il nucleo: la storia del gattino, l'haiku, la domanda di identità e la domanda sul nome del modello, ora per endpoint in formato Anthropic, OpenAI e Gemini. Intorno a loro ci sono controlli che non dipendono dal chiedere al modello chi è.

  • Firma di ragionamento. Claude allega una firma generata dal server a ogni blocco di ragionamento. Un relay che serve un altro modello non può produrla. Le sonde di identità si possono istruire con un prompt di sistema; una firma no.
  • Contabilità dei token. Un relay può inoltrare Claude autentico e gonfiare comunque input_tokens a ogni chiamata. Due prompt che differiscono per un blocco fisso di testo devono differire nei token fatturati entro una fascia nota, count_tokens deve concordare con quanto fatturato e l'output deve restare sotto max_tokens. Opus 4.7 e 4.8 usano un tokenizer diverso, quindi la fascia funge anche da controllo di livello.
  • Livello sbagliato e sostituzione. Fatturare Opus e servire Sonnet sfugge alle sonde comportamentali, perché Sonnet scrive una storia di gattino perfettamente buona. La sonda del nome del modello coglie una risposta che nomina il livello più economico, e il controllo della busta coglie un endpoint che restituisce un id di modello diverso da quello richiesto.
  • Mescolamento delle risposte e fughe di lingua. Ogni prompt porta un nonce. Una risposta che restituisce il nonce di qualcun altro significa che il proxy mescola le risposte tra utenti. Caratteri CJK nella risposta a un prompt in inglese indicano un modello cinese sostituito.
  • Metadati della busta. Un id chatcmpl- dentro una risposta in formato Anthropic, o chiavi di utilizzo OpenAI in una risposta Messages, significa che tra te e il modello c'è uno strato di traduzione. Riportato come osservazione, non come verdetto: il nostro stesso gateway è esattamente uno strato del genere.
  • Velocità di generazione. I modelli più grandi sono più lenti per token, quindi una corsia fatturata come Opus che gira alla velocità di Sonnet merita un'occhiata. Campionata, mai con soglie: il confronto utile è tra corsie che servono lo stesso modello, e solo il chiamante può metterlo insieme.

Cosa non dimostra

Una firma valida dimostra che ha risposto un percorso Anthropic autentico. Non dimostra quale livello: Sonnet restituisce una firma perfettamente valida quando viene venduto come Opus, quindi un esito positivo lì ha ancora bisogno dei controlli di livello. Rimandare il blocco di ragionamento perché Anthropic riconvalidi la firma sembra il test definitivo. L'abbiamo costruito, e non funziona attraverso un relay. Due upstream in produzione hanno restituito 200 per un blocco autentico e per lo stesso blocco con 308 byte di base64 casuale al posto della firma. Un relay riemette il turno verso il proprio backend, quindi niente lo convalida mai. L'opzione è disattivata per impostazione predefinita e documentata come tale.

I controlli di firma e di token sono portati da veridrop, anch'esso AGPL, le cui tolleranze sono state calibrate sull'API ufficiale. Abbiamo mantenuto quei limiti apparentemente larghi perché le risposte reali di Anthropic ci si avvicinavano.

Usalo

Il tester di modelli esegue l'insieme completo nel tuo browser, controlli di firma e di token inclusi, e nulla lascia la tua macchina tranne le chiamate al tuo fornitore. La pagina delle classifiche pubblica i risultati che le persone hanno scelto di condividere. Per la tua pipeline:

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" ]

Attiva ciò che ti serve. checkSignature e checkTokenTruth costano richieste aggiuntive, quindi restano disattivati se non richiesti. Metadati della busta e velocità di generazione si leggono dalle risposte che l'esecuzione ha già fatto e non costano nulla.

Testa un fornitore, leggi l'articolo di aprile per i numeri da cui è partito tutto, oppure apri una issue su GitHub se un endpoint reale riceve un verdetto sbagliato.

Post correlati