סם אלטמן – עזוב אותי! – ממצאים

בפוסט סם אלטמן – עזוב אותי! הנחנו את בור הזפת לזחלנים סוררים שלא מצייתים להנחיות ב-robots.txt.

הבטחתי להביא קצת סטטיסטיקה וממצאים, והנה התוצאות, נכון ל-4 במרץ 2025:

הביקורים החלו ב-16 בפברואר ונמשכו עד היום, ה-4 במרץ 2025.

סה"כ היו כ-204 אלף ביקורים, ע"י 7 זחלנים שהזדהו עם מזהה דפדפן ו-465 זחלנים ללא מזהה (עם IP בלבד).

כמות ביקורים לפי זחלנים (עם מזהה דפדפן או רק עם IP)
השיאן הינו הזחלן של אמאזון

שיאן ההגעות הוא הזחלן של אמזון המזדהה כ:

"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot) Chrome/119.0.6045.214 Safari/537.36"

עם כ-140 אלף ביקורים.

חלק מהזחלנים הפסיקו לבקר לאחר כמה ימים:

ואלו המתמידים:

תמונת השער יוצרה באמצעות AI באתר tensor.art

חיפוש עבודה בעזרת סוכנים חכמים – חלק 3

בחלקים הקודמים (חלק 1, חלק 2) נתקל סוכן המשרות החכם שלנו בבעיה של כמות הטוקנים הגדולה בפרומפט, בגלל גודלו של קובץ המשרות.

בחלק הזה ננסה למצוא דרך לעזור לסוכן החכם לאתר קרבה סמנטית של המשרה(ות) לפרומפט המבוקש. אחת הדרכים הנפוצות בדוגמאות רבות של RAG ומערכות סוכנים חכמים היא השימוש בהטמעות (embeddings) בכדי לאתר קרבה סמנטית. התהליך כולל בדרך כלל ייצור וקטורי הטמעות למסמכי החיפוש ולפרומפט (אני מסרב להשתמש במילה העברית מנחה) ומציאת הקרבה ביניהם. הסבר על התיאוריה וכל נושא ההטמעות הוא מעבר למתוכנן עבור פוסט זה – אבל ניתן למצוא מידע רב ברשת. יש כאלו הטוענים לחסרונות בשיטה זו (למשל: The Insanity of Relying on Vector Embeddings: Why RAG Fails) אבל לצורך הדוגמה שלנו זו כנראה שיטה לגיטימית לבדוק האם היא תניב תוצאות קבילות.

בהרבה מאוד דוגמאות, וכנראה במערכות פרודקשן, נעשה שימוש באכסון של וקטורי ההטמעות – בדרך כלל בבסיסי נתונים ייעודיים לנושא כמו Chroma DB ודומיו. אבל בדוגמה הפשוטה שלנו נייצר את ההטמעות בכל הרצה.

לצורך בדיקה, נשתמש בשתי משרות לדוגמה. האחת מתאימה מאוד לפרומפט של "Cloud Architect" , והאחרת פחות.

job-1.json
משרה זו מתאימה – job-1.json
job-2.json
משרה זו אינה מתאימה – job-2.json

נריץ את הקוד הזה למציאת מידת הקרבה לפרומפט:

כשמריצים מתקבלת התוצאה הבאה:

Cosine similarity to job1: 0.5836322943367188
Cosine similarity to job2: 0.5218661225791285
    

Cosine similarity to job1 title: 0.7767796108694911
Cosine similarity to job2 title: 0.46854531550568995

ניתן לראות ששתי המשרות קרובות מאוד בהתאמתן לפרומפט אם ההטמעות נעשות על כל הטקסט של המשרה, אבל אם ההטמעה נעשית רק על התואר של המשרה יש העדפה מובחנת למשרה שבאמת מתאימה יותר לפרומפט.

בחלק הבא ננסה לתת לסוכן החכם כלים שיזרו לו לחפש באופן יעיל יותר במאגר המשרות.

תמונת השער יוצרה באמצעות AI באתר tensor.art

חיפוש עבודה בעזרת סוכנים חכמים – חלק 2

בחלק הקודם הכנו את אוסף המשרות ואת קורות החיים לעבודתם של הסוכנים.

בחלק הזה נגייס את הסוכן הראשון לצוות שלנו – סוכן החיפוש. נשתמש בספריית CrewAI לצורך כך.

יצירת הסוכן + בדיקה התחלתית פשטנית

מבנה הקבצים לחלק הזה הינו:

בספריית קונפיגורציה נגדיר את הסוכנים והמשימות, בספריית דאטה יהיו קו"ח וקבצי עזר לבדיקה, ובספריית jobs יהיו כל קו"ח שאספנו בחלק הקודם.

אלו הגדרות הסוכן והמשימה:

וזה מה שנריץ:

ואלו התוצאות. הפרומפט שביקשנו בהרצה היה Cloud Architect:

זה עובד, בערך…

יש כמה בעיות שניתן לציין ביישום הזה:

  1. הקוד רץ על קובץ משרות לדוגמה שכלל מספר קטן של משרות שחוברו לקובץ json יחיד. אנחנו רוצים לעבור על כל המשרות שכל אחת מהן נמצאת בקובץ משלה.
  2. הפרומפט שבחרנו נבחר כך שיניב תוצאות לעבודת הסוכן. פרומפטים אחרים או מורכבים יותר לא מצאו תוצאות בחיפוש.
  3. אם נסתכל על הלוגים של ollama נבחין באזהרה מטרידה:

זה עשוי לרמז על בעייה בהפעלת ה-LLM שכן יתכן והפרומפט שלנו לא יובן במלואו.

שימוש בכל המשרות

נסיון אפשרי לפתור את הבעיות הנ"ל יהיה לאחד את כל המשרות שלנו לקובץ אחד, ולהשתמש בו. זה רק מחריף את בעיית כמות הטוקנים בפרומפט:

ןהפרומפט "Cloud Architect" שמצא משרות בקובץ הבדיקה, לא מחזיר תוצאות רלוונטיות – אלא משרות מפתח iOS. ??? כנראה שהסוכן לא נחשף לכל המשרות, בגלל הבעייה הנ"ל.

כדי לפתור את הבעיות הללו, ננסה להשתמש בדמיון סמנטי שישתמש באמבדינגים ווקטוריים. אך על כך בפרק הבא.

תמונת השער יוצרה באמצעות AI באתר tensor.art