מנתח ציות לקרנות · AfifAI
מקרה בוחן · AI לציות פיננסי · ⁦2024–2025⁩

ממסמכי מדיניות של קרנות לבדיקות ציות אוטומטיות

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

Claude on Amazon Bedrock⁦.NET 8⁩ / ⁦C#⁩EF Core · SQL ServerAmazon S3 · SNSReact · TypeScriptPython · pandas
לקוח
רגולטור פיננסי לאומי (חסוי)
התפקיד שלי
ראש צוות, ארכיטקט ומפתח בפועל
ציר זמן
יוני 2024 – יוני 2025 · 3 איטרציות עד MVP
סטטוס
נמסר
במבט מהיר
⁦38%⁩ עד ⁦0%⁩בדיקות שנשארו עם ”לא ניתן לקבוע” בלי הסבר (27 מתוך 72 בגרסה הראשונה, שבה ה־⁠LLM עשה הכול)
0סכימות או השוואות מול מגבלה שהמודל מבצע. כל החישובים בקוד.
14 / 21חשיפות שהרגולטור מדד בעצמו שוחזרו בסטייה של עד 0.05 נקודות אחוז, בסבב האימות הראשון
≈2 שע׳ עד ≈3 דק׳לבדיקת מדיניות של קרן אחת מול האחזקות שלה (הערכה)
12ממדי סינון בסכמה המוקלדת שהמודל חייב למלא
3דורות של Claude הוחלפו דרך קונפיגורציה, בלי שינוי קוד
16 · 3316 נקודות קצה ב־⁠API ו־⁠33 טבלאות במסד הנתונים של ה־⁠MVP
הבעיה

מגבלות בניסוח משפטי, אחזקות בגיליונות

כל קרן מפרסמת מדיניות השקעה בטקסט חופשי בעברית: רצפה לאג״ח ממשלתיות, תקרה ל”אפיקים אחרים בהתאם להוראות הדין”, סף דירוג, טווח חשיפה למט״ח, איסור מוחלט על מניות. בכל חודש מנהל הקרן מגיש דוח אחזקות, שורה לכל נייר ערך, בין 64 ל־⁠106 שורות לקרן בקבוצת הפיילוט. כדי לבדוק אחד מול השני היה צריך לקרוא את הניסוח המשפטי, להבין על אילו שורות הוא חל ולסכום חשיפות ידנית. ואז לעבור לקרן הבאה.

מה הובלתי

שלוש איטרציות, רעיון תכנוני אחד

  • הובלתי את הכיוון הטכני: מניסוי היתכנות שבו ה־⁠LLM עושה הכול, דרך אב־טיפוס ב־⁠Python שנבדק מול המספרים של הרגולטור עצמו, ועד ה־⁠MVP ב־⁠⁦.NET.⁩
  • תכננתי את הארכיטקטורה: צנרת משימות הרקע, מודל הנתונים (33 טבלאות), ניהול ההנחיות למודל בתוך מסד הנתונים, וסכמת הפילטר שהמודל חייב למלא.
  • כתבתי בעצמי את רוב השרת: חילוץ המדיניות, ה־⁠ETL של האחזקות, מנוע הסינון, לוגיקת החשיפה והציות, והאינטגרציה עם Bedrock.
  • הרצתי את השוואת נתוני האמת מול חשיפות שהרגולטור מדד, ואיתרתי את הסיבה לכל פער.
  • הגדרתי את חוזי ה־⁠API לאפליקציית הניהול (קרנות, מנהלים, מדיניות, תוצאות ציות, פירוט נכסים) והנחיתי את עבודת הפרונט.
ארכיטקטורה

API, שלושה סוגי משימות רקע וכלל אחד: המודל לא מחשב

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

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

החלטות תכנון

המודל קורא. הקוד סופר.

המודל כותב פילטרים, לא תשובות

בגרסה הראשונה Claude חילץ את המגבלות, חילץ את החשיפות בפועל והשווה ביניהן. 27 מתוך 72 בדיקות חזרו עם ”לא ניתן לקבוע”, ובשורה אחת ⁦1.6%⁩ סומן ”בתוך” מינימום של ⁦10%⁩. היום המודל רק הופך סעיף לפילטר JSON מעל ערכים ידועים (סוגי נכסים, מקומות מסחר, מטבעות, טווח דירוג). קוד ⁦C#⁩ מפעיל אותו, סוכם חשיפה ומשווה למגבלות. המחיר: הסכמה צריכה לגדול עם כל סוג סעיף חדש (10 ממדים באב־הטיפוס, 12 ב־⁠MVP).

”לא נבדק” עדיף על ניחוש בטוח

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

שני מעברים על המדיניות

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

Prompts הם נתונים, עם בדיקת רגרסיה

ההנחיות למודל וששת הפרמטרים שלהם (max tokens, temperature, top-k, top-p, מצב thinking ותקציב thinking) נשמרים במסד הנתונים, שורה לכל סוג prompt. כך המעבר מ־⁠Claude 3.5 ל־⁠3.7 עם extended thinking היה שינוי קונפיגורציה. כדי לתפוס סטיות, בדיקת ייחוס משווה כל חילוץ לסט מאומת: מספר מגבלות, מינימום, מקסימום, סעיף מקור, סוג ומילות מפתח נדרשות.

יומן הנדסי

מה נשבר, ומה השתנה

רוב התכנון נולד מדברים שנכשלו על דיווחים אמיתיים. מבחר:

יוני 2024

אי אפשר היה לסמוך על הגרסה שבה ה־⁠LLM עושה הכול

מסמכי המדיניות הגיעו כ־⁠PDF סרוקים, אז הרצנו OCR בעברית ב־⁠300 dpi וביקשנו מהמודל לחלץ מגבלות, לחלץ חשיפות בפועל ולהשוות. ⁦38%⁩ מהבדיקות הסתיימו ב”לא ניתן לקבוע”, וגם ההשוואות עצמן יצאו שגויות.

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

דצמבר 2024

”ו/או” ו”למעט”

סעיף כמו ”נכסים שאינם אג״ח ממשלתיות ו/או פיקדונות” לא ניתן לניסוח כפילטר יחיד.

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

דצמבר 2024

לא כל חשיפה היא סכום של שורות

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

הוספתי פילטר ”סוג נכס בודד” שקורא את שורת הסיכום ישירות.

דצמבר 2024

שתי סקאלות דירוג באותו קובץ

באחזקות מעורבבים דירוגים בסגנון S&P ובסגנון Moody's, ו”A ומעלה” חייב לכלול גם A- ו־⁠A3.

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

דצמבר 2024

סבב נתוני האמת הראשון

על 3 קרנות פיילוט ו־⁠28 מגבלות, אב־הטיפוס רץ עם 0 שגיאות. 14 מתוך 21 החשיפות שהרגולטור מדד שוחזרו בסטייה של עד 0.05 נקודות אחוז.

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

פברואר 2025

המדיניות מגיעה כטופס דיווח

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

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

מרץ 2025

הקובץ של כל מנהל שונה קצת

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

שמונה כללי נרמול כותרות רצים לפני המיפוי המוקלד של ה־⁠CSV, ועוד תיקון עמודה לפי סוג נכס. שורות שלא שייכות לקרן מוכרת מסוננות.

אפריל 2025

Extended thinking דוחה פרמטרי דגימה

במעבר ל־⁠Claude 3.7 עם extended thinking, ‏Bedrock דחה בקשות שהגדירו temperature,‏ top-k או top-p.

הספק שולח פרמטרי דגימה רק כש־⁠thinking כבוי. כשהוא פעיל, נקבעים temperature 1 ותקציב טוקנים, לפי סוג ה־⁠prompt במסד הנתונים.

נסו בעצמכם

מעקב אחרי סעיף אחד לאורך הצנרת

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

תוצאה

איפה זה נחת

היבט
לפני
אחרי
מי מחשב את החשיפה
אנליסט עם גיליון, ואחר כך המודל (גרסה 1)
הקוד. המודל רק ממלא פילטר מוקלד.
בדיקות בלי תשובה
⁦38%⁩ ”לא ניתן לקבוע” (27 מתוך 72), בלי סיבה
⁦0%⁩. כל מגבלה מקבלת מספר או מסומנת לא נבדק, והפילטר שדרש את הנתון החסר נשמר.
זמן לקרן
כ־⁠2 שעות של קריאה וסכימה ידנית (הערכה)
כ־⁠3 דקות: בערך קריאת מודל אחת לכל מגבלה, עם פירוט עד הנכסים שנמצאו (הערכה)
החלפת מודל
מזהה מודל ופרמטרים מקודדים בסקריפטים
ערך קונפיגורציה. 3 דורות של Claude לאורך הפרויקט.
רגרסיות בחילוץ
זוהו בעין
השוואה אוטומטית ב־⁠6 נקודות מול מגבלות ייחוס
יכולת מעקב
פלט קונסול מסקריפטים מקומיים
רשומת job עם 4 סטטוסים, לוג צעדים, זמן ריצה וטקסט שמור לכל שלב
  • API של MVP (16 נקודות קצה) ואפליקציית ניהול בעברית: קרנות, מנהלים, מדיניות, תוצאות ציות ופירוט נכסים.
  • משימות רקע של מדיניות, ETL אחזקות וציות רצים לקרן בודדת או לכל הקרנות, עם התראת SNS בסיום.
  • אומת מול נתונים שהרגולטור מדד בעצמו. כל פער הוסבר, ואף אחד לא ”כוונן” כדי שייעלם.
  • הצעדים הבאים ברורים: מקורות חיצוניים לנתוני פדיון, זיקה מקומית וסיכון אשראי, כדי שגם סעיפי לא נבדק ייבדקו, והרצה מקבילית על פני קרנות.
טכנולוגיות

טכנולוגיות

AI
Claude 3, ‏3.5 Sonnet ו־⁠3.7 Sonnet עם extended thinking, על Amazon Bedrock
צד שרת
⁦.NET 8⁩ Web API, ⁦C#⁩, EF Core, AutoMapper, CsvHelper, AngleSharp, NLog, JWT
נתונים
SQL Server עם 33 טבלאות ו־⁠2 views, וגם Amazon S3
הודעות
התראות Amazon SNS
צד לקוח
React 18, TypeScript, Vite, Redux Toolkit, Ant Design, i18next, עם עברית RTL ואנגלית
אב־טיפוס
Python, pandas, boto3, Tesseract OCR

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

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

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

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

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

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

כל הפרויקטים