רווחים:
- הגדר בקרת גישה (ACL) המסננת אחזור על סמך סמכות המשתמש
- כתיבת תבנית הנחיה מוצקה הממקמת את ההקשר ואת שאלת המשתמש בצורה נכונה
- תרגול עצמאות שאלה וניהול היסטוריה בשיחות רב סיבוביות
הקמנו את הארכיטקטורה; עכשיו בואו נעשה את זה בטוח, עקבי ודיבורי. ישנם שלושה נושאים קריטיים ביחידה זו: (1) בקרת גישה המסננת אחזור על סמך סמכות המשתמש, (2) תבנית הנחיה חזקה המציבה את ההקשר והשאלה בצורה נכונה, (3) עצמאות שאלה וניהול היסטוריית שיחות בצ'אט מרובה סיבובים. ללא שלושת אלה, עוזר ידליף נתונים, ייתן תשובות לא עקביות או יתפרק בשאלות המשך.
בקרת גישה: נתונים לא מורשים לעולם לא אמורים להגיע
הסיכון הגדול ביותר בארגון: מסמך שמשתמש לא אמור לראות דולף לתגובה. טעות נפוצה מאוד למתחילים היא "לומר לדגם 'להראות מסמכים מוסתרים' בהנחיה." זה לא בטוח. הדוגמנית עשויה לשכוח הוראה או שהזרקה מהירה עלולה להתחמק ממנה. המקום הנכון הוא שלב השליפה: אין להכניס את היצירה הבלתי מורשית כלל.
הדרך לעשות זאת היא להחיל את המטא נתונים של הסמכות (מחלקה, תפקיד, רמת פרטיות) שאתה שם על כל חלק כמסנן במהלך החיפוש. אתה קובע בבטחה מי המשתמש (זהות ותפקידים) בשכבת האפליקציה ומוסיף מסנן ACL (Access Control List) לקריאה.
# מסונן לפי אחזור סמכות (רעיוני) משתמש = אימות (הפעלה) # מאומת ממקור מהימן = user.roles + ["כולם"] # למשל. ["HR", "admin"]result = vektor_db.search( vektor=embed(question), top_k=20, filter={"permission_group": {"in": allow}, # רק חלקים מותרים "privacy": {"lte": user.level}} # מתחת לרמה)
זהירות: לעולם אל תבקש מהדגם סמכות או תסתמך על ההנחיה. זהות וסמכות נקבעות ברובד המהימן של הבקשה; מסנן האחזור הוא חובה, ההוראה המהירה היא רק שכבה נוספת. "כתבתי את זה בהנחיה" זה לא אבטחה.
תבנית הנחיה מוצקה
תבנית ההנחיה היא השלד שמאגד את ההקשר, שאלת המשתמש והוראות ההתנהגות מהשליפה. חלקים של תבנית טובה: תיאור תפקיד/משימה, כללי התנהגות (קרקע, אני לא יודע הרשאה, בקשת משאב, טון), הקשר, שאלה.
אתה עוזר משאבי אנוש ארגוני. התפקיד שלך הוא לענות על שאלות עובדים רק על סמך ההקשר הבא. כללים:- אם התשובה אינה ברורה בהקשר כתוב "לא הצלחתי למצוא מידע על זה בתיעוד, בדוק עם צוות משאבי אנוש". אל תנחש, אל תמציא.- אם המקורות בהקשר מתנגשים, קח את המדיניות הרשמית כבסיס וציין את הסתירה.- הוסף את המקור עליו אתה מסתמך כ-[מקור: קובץ, סעיף] בסוף כל טענה.- ענה בשפה קצרה, ברורה ומקצועית. הקשר:{numbered_parts}שאלה: {user_question}
מספור חלקי ההקשר ([1], [2], ...) מקל על ציטוט המודל. כמו כן, כתוב את המקור בתחילת כל יצירה כדי שהדגם יוכל לצטט אותו בצורה נכונה.
טיפ: שמור על תבנית ההנחיה קבועה והצב תמיד משתנים (הקשר, שאלה) באותם מקומות. תבנית קבועה גם מגבירה את יכולת הבדיקה וגם מפחיתה עלויות הודות לאחסון מהיר במטמון במערכות מסוימות.
הקשר:[1] (מקור: ik_el_kitabi.pdf, סעיף 5.2) חופשה שנתית בתשלום היא 14 ימים...[2] (מקור: ik_el_kitabi.pdf, סעיף 5.4) חופשה היא 20 יום לאנשים עם שירות של יותר מ-5 שנים...
הנחיה חלשה / הנחיה חזקה
חלש (ללא הארקה, ללא מקור, זהות מעורבת):
השתמש במסמכים אלה וענו על השאלה: {חלקים}משתמש: {שאלה}# בעיה: המודל יוצא מהקשרו, ממציא, לא מצטט מקורות, # מתנהג באופן שרירותי בניגוד.
חזק (תפקיד + כללים + הקשר ממוספר + מקור חובה):
אתה... פשוט תסתמך על CONTEXT. אחרת, אמור "אני לא יודע". בעימות, בחר במדיניות רשמית. הוסף [מקור: ...] לכל טענה. CONTEXT: [1]... [2]... שאלה: {שאלה}# תוצאה: תשובה נאמנה להקשר, מקורה ומנהלת את הסתירה בצורה נכונה.
ניהול שיחות מרובה סיורים
משתמש אמיתי לא שואל שאלה אחת ומשאיר אותה בשקט; מדבר. "כמה ימי חופשה שנתית יש לי?" → "מה לגבי העובד בן 6 השנים?" → "איך אני מגיש בקשה?" השאלה השנייה והשלישית לבדן חסרות משמעות; תלוי בהקשר הקודם.
אתה צריך לפתור שתי בעיות. הראשון הוא לאחזור: הפוך את שאלת ההמשך לבלתי תלויה (שכתוב שאלה). "מה עם העובד בן 6 השנים?" → "לכמה ימי חופשה שנתית זכאי עובד בן 6 שנים?" אתה מחפש עם השאלה העצמאית הזו. השני הוא להפקה: אתה גם נותן את היסטוריית השיחה לדגם כך שהיא תמשיך באופן עקבי.
# שני שלבים: independentize → חיפוש → צור עם היסטוריה (רעיונית) independent = model.uret( "השתמש בהיסטוריית השיחה כדי להפוך את השאלה למובנת בפני עצמה:\nהיסטוריה: {history}\nשאלה: {follow_question}") context = retrieval(independent) # search with independent questionanswer = model.uret(prompt)(prompt)(
ככל שההיסטוריה גדלה (שיחה ארוכה), שליחת הכל בכל פעם הופכת ליקרה וממלאת את חלון ההקשר. פתרון: סכם את הסיבובים הקודמים או שמרו את N הסיבובים האחרונים והקטינו את הקודמים לסיכום. לפיכך, העלויות נשארות בשליטה ונשמרת עקביות.
סטטוס
בעיה
פתרון
לשאלת המשך אין הקשר
חיפושי אחזור חסרי משמעות
הפוך את השאלה לבלתי תלויה (שכתוב)
צ'אט ארוך
עלות וחלון מתנפחים
סיכום סיורים קודמים
המשתמש שינה נושא
הקשר ישן נדבק
צמצם את השפעת העבר על נושא חדש
הסמכות עשויה להשתנות בין הסיורים
סכנת דליפה
החל מסנן ACL מחדש בכל סיבוב
שלושה מיני מארזים
מקרה 1 - כשל "אבטחה" עם הנחיה. חברה הניחה מסמכי שכר חסויים על עוזר שכל אחד יכול לשאול, אבל רק כתבה "אל תיתן מידע על שכר" בהודעתה. המודל הדליף את טווח השכר כאשר משתמש שאל את השאלה באופן עוקף. כאשר נוסף מסנן ACL לשליפה (חלקי שכר רק לתפקיד HR), הדליפה נסגרה לחלוטין; כי החלק לעולם לא מובא יותר.
מקרה 2 - מעקב ללא הקשר. בעוזר תמיכה, המשתמש שואל "תקופת החזרה?" → "מה לגבי המוצר השבור?" המערכת הביאה חלקים לא רלוונטיים ל"מוצר השבור". כאשר נוספה עצמאות השאלה ("כמה זמן תקופת ההחזרה למוצר מקולקל?"), שיעור התשובה הנכונה עלה מ-44% ל-90%.
מקרה 3 - עבר נפוח. ב-30 סבבים של צ'טים עם עוזר, כל שיחה שלחה את כל ההיסטוריה; העלות גדלה פי 3 בכל סבב, והתגובות האטו. כשעברנו למבנה ששמר על 6 הסיבובים האחרונים וסיכמנו את הקודמים, העלות הסמלית ירדה ב-62% והעקביות נשמרה.
טעויות נפוצות
- השארת הסמכות להנחיה: הדגם שוכח/עוקף; מסנן ACL הוא חובה באחזור.
- לא מונה את ההקשר: המודל לא יכול לצטט את המקור הנכון.
- לא עצמאית את שאלת ההמשך: שליפה חיפושים חסרי טעם.
- שליחת כל ההיסטוריה עיוור: מתפוצץ במחיר ובעיכוב; לְסַכֵּם.
- לא כותבים את כלל הסתירה: המודל עשוי להציג את המקור הלא אמין כרשמי.
לסיכום
- בקרת הגישה מיושמת עם מסנן מטא נתונים במהלך שלב האחזור; אסור להביא חלקים לא מורשים לעולם.
- זהות וסמכות נקבעות בשכבת היישום המהימנה; ההוראה המהירה היא רק שכבת הגנה נוספת.
- תבנית הנחיה חזקה כוללת תפקיד, כללי התנהגות (התבססות, הרשאה לא יודע, מקור, קונפליקט), הקשר ממוספר ושאלה.
- בשיחה מרובה, שאלות המשך מנותקות והמודל מייצר תשובות עקביות עם ההיסטוריה.
- על ידי סיכום ההיסטוריה הארוכה, חלון העלות וההקשר נשמר בשליטה; ה-ACL מוחל מחדש בכל סיבוב.
משימת יישום
(1) הגדר לפחות שלוש קבוצות הרשאה עבור העוזר שלך (למשל כולם, מחלקה, מנהל) וכתוב בטבלה איזה סוג מסמך פתוח לאיזו קבוצה. (2) התאם וכתוב את תבנית ההנחיה שלעיל בהתאם לתפקידך ולטון שלך; הפוך את ההקשר למספר ומקור. (3) כתוב תרחיש שיחה ריאליסטי בן שלושה סיבובים (שאלה ← מעקב ← מעקב) והפק ידנית גרסאות עצמאיות של כל שאלת המשך. (4) הסבירו במשפט אחד מדוע יש להחיל מחדש את מסנן ה-ACL בכל סיבוב בתרחיש זה.
רשימת בדיקה
- [ ] אני מיישם בקרת גישה עם מסנן אחזור, אני פשוט לא מסתמך על ההנחיה.
- [ ] אני מוסיף הארקה, אני לא יודע הרשאה, מקור וכללי התנגשות לתבנית ההנחיה שלי.
- [ ] אני נותן את חלקי ההקשר ממוספרים ומסומנים.
- [ ] אני הופך שאלות המשך לבלתי תלויות לפני השליפה.
- [ ] אני מנהל את העלות והחלון על ידי סיכום היסטוריית השיחה הארוכה.