
SuperMCP
אוסף מחירי סופרמרקטים מעשר רשתות בישראל, כדי שעוזר AI יוכל להשוות רשימת קניות אמיתית
6.7Mשורות מחיר במאגר האחרון שנמדד
הבעיה
החוק בישראל מחייב כל רשת מזון גדולה לפרסם את מחירון המלא שלה. המידע ציבורי והוא חינמי. הוא גם בלתי שמיש: קובצי XML גולמיים בעשרה פורטלים שונים, לכל אחד השיגעונות שלו, בלי זהות מוצר משותפת בין הרשתות ובלי דרך לשאול אותו שאלה. אתרי השוואת מחירים לצרכנים קוראים אותו בשביל בני אדם. אף אחד לא קורא אותו בשביל תוכנה.
אז כל מפתח שרוצה שעוזר AI יענה על "איפה הסל הזה הכי זול" צריך לנקות מחדש את אותם פידים, ורובם פשוט מוותרים על הרעיון.
מה בניתי
SuperMCP מושך את הפידים האלה לקטלוג מוצרים אחד ונקי, שאתרים ועוזרי AI יכולים לחפש בו ישירות. כרגע יש בו עשר רשתות, 898 סניפים, 122,575 מוצרים, 249,106 רישומי מוצר ברשתות, 6.7 מיליון מחירים ו-1.07 מיליון מבצעים.
הקריאה המרכזית היא optimize_basket. נותנים לה רשימת קניות בעברית חופשית ומיקום, והיא מחזירה תוכנית: החנות הבודדת הטובה ביותר, החנות הזולה ביותר שיש בה את כל הרשימה, הקרובה ביותר, וחלוקה בין כמה חנויות, עם פירוט שורות לכל אחת.
הבאג שעיצב את המוצר
הגרסה הראשונה דירגה חנויות לפי מה שהן גבו. זה שגוי, והטעות לא נראית לעין.
חנות מתמחרת רק את הפריטים שיש לה. אם מדרגים לפי הסכום הזה, החנות שחסר לה הפריט היקר ביותר בסל נראית הכי זולה. סל אמיתי בהרצליה המליץ על חנות ב-92.86 שקלים על פני חנות ב-171.42, רק כי לא הייתה בה שורת טונה של 71.60.
היום כל תוכנית נושאת גם comparableTotal: אותו סל מתומחר בכל חנות, לפי המחיר של החנות עצמה כשיש לה אחד ולפי מחיר השוק החציוני כשאין. שורות משוערות נספרות ומדווחות, והדירוג מוסיף תוספת כשחנות משאירה שורות בלי מחיר, כי להשלים את הרשימה במקום אחר זו נסיעה שנייה. לכל שורה יש גם מחיר מנורמל ל-100 גרם, ל-100 מ"ל או ליחידה, כך שאריזה קטנה לא יכולה לנצח רק על מחיר המדף.
מחירים מותנים
בפידים יש בערך 54,000 מבצעי קופון פעילים, ורק כ-250 מהם מסומנים כמחירי מועדון. כל השאר הוחלו בשקט. במקרה אמיתי אחד קוטג' של 5.90 שקלים תומחר בשקל אחד בזכות מבצע של קופון גזיר, מה שמנצח כל השוואה של החנות הזולה ביותר ואז מפתיע את הקונה בקופה.
היום שורות של מועדון בלבד ושל קופון בלבד מסומנות בכל תוכנית, ואפשר לכבות אותן לגמרי. בסל אמיתי בהרצליה, כיבוי שלהן משנה גם את החנות המנצחת וגם את המחיר.
נבנה בשביל מודל, לא בשביל דפדפן
התשובה בנויה בגודל שמתאים לחלון ההקשר של סוכן. רמת הפירוט שבברירת המחדל שומרת את פירוט השורות המלא לתוכנית אחת, מוותרת על אבחון לכל שורה, ומגבילה את התוכנית ל-25 שורות תוך דיווח על המספר האמיתי. במדידה: 12 פריטים הם בערך 12KB, 30 פריטים בערך 26KB, 50 פריטים בערך 32KB.
החיפוש מתאים גם מילים מדויקות וגם מוצרים דומים, כך שניסוח שונה עדיין מוצא את הפריט הנכון. התאמות המוצרים מוכנות מראש וחיפושים חוזרים נשמרים, וזה מה ששומר על חיפושים מהירים.
המרחקים מתויגים ולא מזויפים. כל חנות מציינת אם המרחק שלה מדויק, לפי כתובת הסניף, או משוער, לפי מרכז העיר. הסרת המיקומים המשוערים הייתה מורידה בערך 45 אחוז מהקטלוג, כולל רשתות דיסקאונט שלמות, ולכן הם נשארים עם מרווח אי-ודאות ברור.
קוד פתוח
רישיון Apache-2.0, ואפשר להריץ את הכול על השרתים שלכם. במאגר אין שום נתיב לסביבה מתארחת: שמות השרתים והסודות של הפרודקשן נמצאים רק בסביבת האירוח. תיעוד הנתונים ישיר בכוונה לגבי הדבר היחיד שעוד לא מוכרע, והוא האם מותר להפיץ מסחרית API שנבנה על מידע ציבורי שפרסומו מחויב בחוק.



