גלאי ה-Claude המזויף הוא עכשיו ספריית קוד פתוח
ai-model-verifier הוא המנוע שמאחורי בודק המודלים שלנו, שפורסם ב-npm תחת רישיון AGPL-3.0. תנו לו כתובת URL בסיסית, מפתח ומודל, והוא יגיד לכם אם נקודת הקצה מספקת את מה שהיא מוכרת, ועכשיו גם עם בדיקות של חתימת החשיבה וחיוב הטוקנים.
באפריל פרסמנו את המספרים על משווקי Claude מזויפים: 183 ערוצים אצל 8 ספקים שענו בתור Kiro, Codeium או מודל אחר שעונד תג שם של Claude. הבדיקות שתפסו אותם חיו בתוך צינור הסנכרון שלנו. עכשיו הן חיות בחבילה שכל אחד יכול להתקין.
ai-model-verifier זמין ב-npm וב-GitHub תחת AGPL-3.0. הוא מקבל כתובת URL בסיסית, מפתח API ושם מודל, ומחזיר אחת משלוש הכרעות, genuine, suspicious או unverified, יחד עם הכלל שהופעל והתשובות הגולמיות של הבדיקות לצידו.
למה ספרייה
אותן בדיקות רצות עכשיו בשלושה מקומות: בדפדפן שלכם בבודק המודלים, בשרתים שלנו עבור הדירוגים הציבוריים, ובתוך צינור הסנכרון שמחליט אילו נתיבי upstream UnoRouter חושף בכלל. שלושה עותקים של רשימת תבניות מתרחקים זה מזה. חבילה אחת לא.
הוא איזומורפי בכוונה. רק ממשקי API תקניים של הווב, בלי ייבוא node:, אפס תלויות בזמן ריצה. קריאת ה-HTTP מוזרקת מבחוץ, כך שדפדפן יכול לעקוף CORS ושרת יכול לעבור דרך fetch מוגן מפני SSRF. ספקים וגלאים הם נקודות כניסה נפרדות, כך שבדיקת Anthropic לעולם לא אורזת את תצורת Gemini.
מה חדש מאז אפריל
ארבע בדיקות ההתנהגות מהפוסט הראשון הן עדיין הליבה: סיפור הגור, ההייקו, שאלת הזהות ושאלת שם המודל, ועכשיו גם לנקודות קצה בפורמט Anthropic, OpenAI ו-Gemini. סביבן יושבות בדיקות שאינן תלויות בלשאול את המודל מי הוא.
- חתימת חשיבה. Claude מצרף חתימה שנוצרת בשרת לכל בלוק חשיבה. ממסר שמספק מודל אחר לא יכול לייצר אותה. בדיקות זהות אפשר לאלף באמצעות הנחיית מערכת; חתימה אי אפשר.
- חשבונאות טוקנים. ממסר יכול להעביר Claude אמיתי ועדיין לנפח את
input_tokensבכל קריאה. שתי הנחיות שנבדלות בקטע טקסט קבוע חייבות להיבדל בטוקנים המחויבים בטווח ידוע,count_tokensחייב להתאים למה שחויב, והפלט חייב להישאר מתחת ל-max_tokens. Opus 4.7 ו-4.8 משתמשים בטוקנייזר אחר, ולכן הטווח משמש גם כבדיקת דרגה. - אי-התאמת דרגה והחלפה. חיוב על Opus ואספקת Sonnet חומקים מבדיקות ההתנהגות, כי Sonnet כותב סיפור גור טוב לגמרי. בדיקת שם המודל תופסת תשובה שנוקבת בדרגה הזולה יותר, ובדיקת המעטפת תופסת נקודת קצה שמחזירה מזהה מודל שונה מזה שהתבקש.
- ערבוב תשובות ודליפות שפה. כל הנחיה נושאת nonce. תשובה שמחזירה nonce של מישהו אחר פירושה שהפרוקסי מערבב תשובות בין משתמשים. תווי CJK בתשובה להנחיה באנגלית מצביעים על מודל סיני שהוחלף.
- מטא-נתוני מעטפת. מזהה
chatcmpl-בתוך תשובה בפורמט Anthropic, או מפתחות usage של OpenAI בתשובת Messages, פירושם ששכבת תרגום יושבת ביניכם לבין המודל. מדווח כתצפית, לא כהכרעה: השער שלנו עצמו הוא בדיוק שכבה כזאת. - תפוקה. מודלים גדולים יותר איטיים יותר לכל טוקן, ולכן נתיב שמחויב כ-Opus ורץ במהירות של Sonnet שווה מבט. נדגם, לעולם לא נמדד מול סף: ההשוואה המועילה היא בין נתיבים שמספקים את אותו מודל, ורק הקורא יכול להרכיב אותה.
מה זה לא מוכיח
חתימה תקפה מוכיחה שנתיב Anthropic אמיתי ענה. היא לא מוכיחה איזו דרגה: Sonnet מחזיר חתימה תקינה לחלוטין כשהוא נמכר כ-Opus, ולכן מעבר כאן עדיין זקוק לבדיקות הדרגה. לשלוח חזרה את בלוק החשיבה כדי ש-Anthropic תאמת מחדש את החתימה נשמע כמו המבחן המכריע. בנינו אותו, והוא לא עובד דרך ממסר. שני upstream חיים החזירו 200 גם לבלוק אמיתי וגם לאותו בלוק עם 308 בייטים של base64 אקראי במקום החתימה. ממסר מנפיק את התור מחדש אל ה-backend שלו עצמו, ולכן שום דבר לעולם לא מאמת. האפשרות כבויה כברירת מחדל ומתועדת ככזאת.
בדיקות החתימה והטוקנים הוסבו מ-veridrop, גם הוא AGPL, שהסבולות שלו כוילו מול ה-API הרשמי. שמרנו על הגבולות שנראים רופפים כי תשובות Anthropic אמיתיות ישבו קרוב אליהם.
איך משתמשים
בודק המודלים מריץ את הסט המלא בדפדפן שלכם, כולל בדיקות חתימה וטוקנים, ושום דבר לא עוזב את המחשב שלכם מלבד הקריאות לספק שלכם. דף הדירוגים מפרסם תוצאות שאנשים בחרו לשתף. לצינור משלכם:
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" ]הפעילו רק את מה שאתם צריכים. checkSignature ו-checkTokenTruth עולים בבקשות נוספות, ולכן הם נשארים כבויים אלא אם ביקשתם. מטא-נתוני המעטפת והתפוקה נקראים מתשובות שהריצה כבר ביצעה ולא עולים כלום.
בדקו ספק, קראו את פוסט אפריל למספרים שמהם הכול התחיל, או פתחו issue ב-GitHub אם נקודת קצה אמיתית מקבלת הכרעה שגויה.
שער LLM הוא נקודת קצה ומפתח אחד שמנתבים בקשות להרבה ספקי מודלים. הנה מה הוא עושה, למה הוא עוזר, ומי באמת צריך אותו.
חיברנו 18 ספקים חינמיים אל UnoRouter: יותר מ-190 שורות מודלים חינמיים, נקודת קצה אחת OpenAI-compatible, $0 per token. הם נושאים מגבלות במעלה הזרם שאיננו יכולים להעלות, בתוספת תקרה קלה של בקשה אחת לדקה שאנחנו מוסיפים כדי לשמור על הוגנות המאגרים המשותפים. הנה הגרסה הכנה.
UnoRouter רשום במדריכי כלי הבינה המלאכותית והסטארטאפים. כאן תוכלו למצוא אותנו, לאמת את הרישומים ולקרוא חוות דעת עצמאיות.