להסיר את המסתורין מעל ה-GenAI Stack

תכנון תוכנה מסורתי מסתמך על דטרמיניזם. אתם שולחים קלט, מאמתים אותו מול סכימה (schema), ומצפים לפלט צפוי.

GenAI משנה זאת. מודלי שפה גדולים (LLMs) הם מנועים הסתברותיים. הם חוזים טקסט על בסיס הסתברות.

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

ל-LLM יש מגבלות ספציפיות שעליכם לנהל:

  • גודל Payload: למודלים יש מגבלות קשיחות הנקראות context windows. אינכם יכולים לשלוח נתונים ללא הגבלה.
  • Latency: קריאות מבסיס נתונים לוקחות מילישניות. inference של LLM לוקח שניות. אתם זקוקים לתורים אסינכרוניים או לסטרימינג כדי לטפל בכך.
  • Hallucinations: אם למודל חסר מידע ספציפי, הוא ימציא תשובה שנשמעת הגיונית אך היא שגויה.

כדי לפתור את בעיית הנתונים ללא אימון מחדש יקר, אנו משתמשים ב-Retrieval-Augmented Generation (RAG).

RAG הוא המקבילה להבאת בסיס הנתונים שלכם אל ה-API. במקום לצפות מהמודל להכיר את הנתונים שלכם, ה-backend שלכם שולף הקשר (context) רלוונטי ומזריק אותו לתוך ה-prompt.

תהליך העבודה של RAG:

  1. המשתמש שולח prompt.
  2. המערכת שלכם מבצעת שאילתה ב-Vector Database.
  3. המערכת מוצאת מקטעי טקסט דומים מבחינה סמנטית.
  4. המערכת מזריקה את המקטעים הללו לתוך ה-prompt.
  5. ה-LLM מעבד את ההקשר המבוסס (grounded context).

זה הופך את ה-LLM ממחולל ידע למעבד הקשר. זה מפחית שגיאות באופן משמעותי.

כדי להפוך את הפלטים של ה-LLM לשימושיים עבור שירותים אוטומטיים, אתם זקוקים ל-Structured Outputs. אינכם יכולים להשתמש ב-regex כדי לנתח טקסט שיחתי עבור microservice. עליכם להעביר הגדרות schema מדויקות כמו JSON. זה מבטיח שהמודל יעקוב אחר מבנה קשיח שקוד שלכם יכול לקרוא.

בניית AI בסביבת ייצור דורשת מעבר מ-prompts ליניאריים לתכנון מערכת חסון.

מקור: https://dev.to/ingit_bhatnagar/de-mystifying-the-genai-stack-from-llms-to-rag-a-systems-perspective-4jp8

קהילת למידה אופציונלית: https://t.me/GyaanSetuAi