בניית סוכן AI מקומי עבור OSM

הקדשתי 21 ימים לבניית סוכן AI מקומי. הוא הופך שפה טבעית ל-JSON של מסנני OSM.

רציתי שזה ירוץ כולו על GPU מקומי. ללא קריאות API. ללא סיכוני פרטיות. ללא מגבלות קצב (rate limits).

הנה איך בניתי אותו ומה למדתי.

The Architecture

השתמשתי ב-RAG pipeline כדי לספק למודל הקשר (context).

• Embeddings: השתמשתי ב-bge-small-en-v1.5 כדי להפוך תיאורי תגיות OSM לווקטורים. • Database: שמרתי את ה-embeddings הללו ב-SQLite. • Retrieval: כששואלים שאלה, המערכת מוצאת את תגיות ה-OSM ודוגמאות המסננים הרלוונטיות ביותר. • Generation: ה-LLM מקבל את השאילתה שלך בתוספת הדוגמאות שנשלפו כדי ליצור את ה-JSON.

The Failures

הבנייה לא הייתה חלקה. נתקלתי בכמה מכשולים.

• באג ה-Stop Token: ההרצות הראשונות שלי החזירו תוצאות ריקות. המודל הוסיף שורה ריקה לפני ה-JSON. זה הפעיל את ה-stop token שלי וקיטע את הפלט. נאלצתי להסיר את ה-stop token כדי לתקן זאת. • העתקה עיוורת: ה-LLM נטה לעיתים קרובות להעתיק דוגמאות בדיוק כפי שהן במקום להתאים אותן. כתבתי מחדש את ה-prompts כדי לאלץ את המודל לסנתז מסננים חדשים. • בלבול בתחום (Domain Confusion): המודל בלבל בין תגיות ימיות לתגיות יבשתיות. הוספתי שלב אימות (validation) כדי לסנן תגיות מועמדות לפי רלוונטיות.

The Lessons

• הימנעו מ-stop tokens: אלא אם כן אתם בטוחים, אל תשתמשו בהם. הם לעיתים קרובות שוברים את הפלט שלכם. • איכות הנתונים היא המלך: ביצוע Embedding למשפטי שפה טבעית עובד טוב יותר מאשר ביצוע Embedding למחרוזות JSON גולמיות. • הלולאה היא הקסם: הוספתי לולאה פשוטה. אם מסנן מחזיר אפס תוצאות, הסוכן מרחיב את הבקשה ומנסה שוב. זה הופך כלי סטטי למערכת אדפטיבית.

The Result

המערכת רצה על GPU בודד עם פחות מ-8 GB VRAM. היא מטפלת ברוב השאילתות הפשוטות ומסתגלת כאשר היא נכשלת. היא עדיין זקוקה לעבודה על שלילה (negation) מורכבת וסינתזה של תגיות, אך הליבה עובדת.

איך אתם מטפלים בעמימות של תגיות בתהליכי העבודה הגיאו-מרחביים שלכם?

Source: https://dev.to/gisfromscratch/building-a-local-ai-agent-for-osm-21-days-of-iteration-2fc4

Optional learning community: https://t.me/GyaanSetuAi