סוכן שעונה על נתוני הצפייה · AfifAI
מקרה בוחן · הנדסת AI · 2026

סוכן AI שעונה על שאלות על לוגי סטרימינג

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

Amazon Bedrock AgentCoreStrands AgentsOpenSearchPythonAWS App RunnerCloudWatch / OpenTelemetry
לקוח
ספקית טלוויזיה וסטרימינג ישראלית גדולה (חסוי)
צוות
צוות של 4 בהובלתי
התפקיד שלי
ראש צוות, ארכיטקט ומפתח בפועל, מסוף אוגוסט 2026
שלב
POC שנבדק על ידי הלקוח, על נתוני staging
סטטוס
אב־טיפוס
במבט אחד
⁦26M+⁩רשומות לוג בחלון של 5 ימים, כולן זמינות לשאילתות
7 / 7מקורות לוג נגישים, לעומת 3 (⁦24%⁩ מהקלאסטר) קודם
⁦1,000+⁩שדות ממופים שנבדקו בכל המקורות
8 / 8שאלות התרחיש של הלקוח נענו מול הסוכן החי
9כלים מבוקרים. המודל אף פעם לא כותב שאילתה בעצמו.
הבעיה

לוגים עשירים, אבל רק מהנדסים ידעו לקרוא אותם

מערך הניטור של הספקית כותב כל ניגון, קריאת API ואירוע backend ל־⁠OpenSearch. יש שבעה מקורות לוג, לכל אחד סכמה משלו, ומאות שדות שרבים מהם דלילים. כדי לענות על שאלה כמו ”באיזה מכשיר היו הכי הרבה שגיאות רישוי אתמול?” צריך היה לכתוב Query DSL ידנית. צריך היה גם להכיר מלכודות שאף אחד לא תיעד: אילו שדות ריקים, אילו ערכים קבועים, וכמה מהתעבורה היא ניטור אוטומטי.

מה הובלתי

מאב־טיפוס עובד למוכנות ללקוח

  • קיבלתי POC עובד מהצוות שבנה אותו, והובלתי את ההרחבה, החיזוק והעבודה מול הלקוח.
  • הרחבתי את הגישה מ־⁠3 ל־⁠7 מקורות לוג, והרצתי מיפוי נתונים מלא כדי לגלות מה באמת יש בכל שדה.
  • אימתתי את כל 8 תרחישי הלקוח מול הסוכן החי, ואז ניהלתי שלושה סבבי פידבק עם צוות הנתונים של הלקוח.
  • אבחנתי ותיקנתי תקלות פרודקשן באמצעות לוגים של CloudWatch, היסטוריית ECR ו־⁠traces של OpenTelemetry.
  • הובלתי פגישות לקוח וכתבתי את מילון הנתונים שנמסר ללקוח.
ארכיטקטורה

Serverless, פרטי בתוך ה־⁠VPC, וקריאה בלבד

התרשים רחב מהמסך: החליקו הצידה לצפייה בכולו →

ה־⁠IAM role של ה־⁠runtime ממופה כ־⁠backend role בהרשאות ה־⁠FGAC של OpenSearch, כך שאין סיסמת מסד נתונים שצריך לשמור או שעלולה לדלוף. ה־⁠policy מציינת במפורש את דומיין ה־⁠staging, וזה מה שמרחיק את הסוכן מהפרודקשן שנמצא באותו חשבון.

החלטות תכנון

החוקים בקוד, לא בפרומפט

כלים מבוקרים במקום Text-to-Query

המודל בוחר כלי וממלא פרמטרים מוגדרים. מה נחשב ניגון, שגיאה או צפייה, ואילו שדות מותר לפלח או להחזיר, נאכף בקוד Python. כשהיינו צריכים להחליף מודל, כל ההבטחות נשמרו.

הסתייגויות שהמודל חייב לחזור עליהן

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

חיפוש מנוי בלי אפשרות למנות מנויים

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

סוכן אחד, בלי orchestrator

כשהכיסוי גדל מ־⁠3 ל־⁠7 מקורות שקלנו להוסיף שכבת orchestrator, והחלטנו שלא. סוכן אחד עם כללי ניתוב מפורשים (צפייה, פלטפורמה, מדידה) כבר ניתב נכון, ונשאר קל יותר לדיבאג.

יומן הנדסי

מה נשבר, ואיך גילינו

רוב הערך הגיע מבעיות שהתגלו רק עם נתונים אמיתיים ומשתמשים אמיתיים. מבחר:

תשתית

מדיניות ארגונית שאף אחד לא ראה

גם Lambda URL ציבורי וגם חזית CloudFront נכשלו בגלל resource control policies ברמת הארגון, שלא נראו מתוך החשבון. גילינו אותן רק בניסוי וטעייה.

העברנו את ממשק הצ׳אט ל־⁠App Runner. בקשת HTTPS רגילה אליו היא לא קריאת API של AWS, ולכן המדיניות לא חלה עליה.

תשתית

משפחת המודלים המועדפת חסומה

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

עברנו ל־⁠Amazon Nova Pro מאחורי משתנה MODEL_ID אחד. ה־⁠IAM policy למעבר חזרה כבר מוכנה.

30.8

⁦76%⁩ מהקלאסטר היו מחוץ להישג יד

ה־⁠role של הסוכן כיסה רק 3 מתוך 7 מקורות. כמה ממצאים של ”השדה ריק” נבעו מכך שחיפשנו במקורות הלא נכונים.

הרחבנו את הגישה (קריאה בלבד), מיפינו כל שדה בכל 7 המקורות, ותיקנו את אוצר המילים של הסוכן בהתאם.

31.8

קריסה, ואחריה הסבר שגוי ובטוח בעצמו

שאילתת ”סה״כ לחלון” פשוטה קרסה, כי OpenSearch משמיט את מפתח ה־⁠aggregations. המודל אמר אז למשתמש שהנתונים ”מחוץ לתקופת השמירה”, וזה לא היה נכון.

תיקנו את הקריסה והוספנו כלל: כשכלי נכשל, אומרים שהוא נכשל ולא ממציאים סיבה.

14.9

”היום” היה ניחוש

”צפיות היום בין 10:00 ל־⁠11:00” החזיר תוצאה ריקה למרות שהיו רשומות תואמות. למודל לא היה תאריך אמיתי, והניחוש שלו היה תקין מספיק כדי לעבור ולידציה.

הזרקנו את השעה הנוכחית ב־⁠UTC לכל שאלה.

14.9

”device” הפך ל־⁠”service”

ההתאמה העמומה דירגה את service קרוב יותר ל־⁠”device” מאשר את deviceType. הסוכן פילח לפי השדה הלא נכון ודיווח על הצלחה.

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

15.9

השבתה בפרודקשן

כל שאלה נכשלה בהפעלת ה־⁠runtime. לוגי הקונטיינר הראו שמודול הסוכן חסר ב־⁠image.

שללנו סשן בחשבון הלא נכון, בדקנו את היסטוריית ה־⁠image ב־⁠ECR, בנינו מחדש ממקור מאומת והשירות חזר באותו יום.

16.9

”למה 15 ולא 58?”

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

מצאנו שהפער נובע מהחרגה מתועדת של תעבורת ניטור (כ־⁠⁦72%⁩ מרשומות הניגון ב־⁠staging) ומההבדל בין ספירת צפיות לספירת רשומות. הסברנו ללקוח, הוא בחר לכלול את תעבורת הניטור כברירת מחדל, ויישמנו את זה.

23.9

חלון זמן שהתכווץ בשקט

טווח זמן גדול החזיר פחות תוצאות מטווח קטן שנמצא בתוכו. ה־⁠trace של OpenTelemetry הראה שהמודל קיצץ טווח שחוצה חצות ליום אחד, ואז תיאר את הטווח המלא.

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

נסו בעצמכם

שאלות, קריאות לכלים ותשובות

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

תוצאה

איפה זה עומד

  • כל 8 שאלות התרחיש של הלקוח נענו מול הסוכן החי, וכל תשובה מגיעה עם הסתייגויות הכיסוי שלה.
  • שלושה סבבי בדיקות של הלקוח. לכל תקלה שדווחה נמצא שורש הבעיה, והיא תוקנה, נפרסה ואומתה בפרודקשן.
  • פילוח רב־שכבתי, חלונות זמן ברמת שעה ודקה, וטבלאות של רשומות גולמיות נוספו לפי בקשות הלקוח.
  • מילון נתונים ללקוח, שנבנה מאוצר המילים והערות הנתונים של הסוכן עצמו.
  • פיילוט של חיפוש מנוי עם audit ומגבלות, והגדרה ברורה שאימות משתמשים אמיתי הוא התנאי להרחבה.
  • צעדים הבאים ברורים: נתוני פרודקשן, התחברות אישית לכל משתמש, ומעבר למודל שהסוכן תוכנן עבורו כשהחשבון יאפשר.
טכנולוגיות

טכנולוגיות

סוכן
Strands Agents, Amazon Nova Pro על Bedrock
Runtime
Bedrock AgentCore (VPC, IAM), images ל־⁠ARM64 ב־⁠CodeBuild
נתונים
OpenSearch עם FGAC, Query DSL, SigV4
ממשק
AWS App Runner, Python, JavaScript
ניטור
CloudWatch Logs, OpenTelemetry traces, audit logging
קוד ייחוס
streaming-log-agent-demo: 28 טסטים, רץ בלי ענן

שיחת אבחון חינם · 30 דקות · ללא התחייבות

הביאו תהליך אחד. קבלו תוכנית ומספר לשפר.

כתבו בכמה שורות: איזה תהליך או מערכת, מה כואב היום (זמן, טעויות, עלויות או פיילוט AI שנתקע) ומי עובד עם זה. אחרי שיחה קצרה מקבלים תוך כ־3 ימים תוכנית כתובה והצעת מחיר סגורה.

לשיחת אבחון חינםafif.mansour@gmail.com

נפתח מייל מוכן מראש · מענה תוך יום עסקים

ה־AI קורא. הקוד סופר.

כל הפרויקטים