Files
legal-ai/docs/spec/07-learning.md
Chaim f79c46a352 feat(learning): מסלול נקי להעלאת החלטה סופית + פאנל-סגנון דו-סוכני (DeepSeek+Gemini)
מוסיף מסלול ייעודי לקליטת ההחלטה החתומה של היו"ר, ומפעיל אותו דרך שני
שלבים אוטומטיים מדורגים עם פאנלי-סוכנים (אוטו-אישור + אסקלציה ליו"ר).

Backend (web/):
- POST /api/cases/{case}/final/upload — קליטת final חיצוני: שמירה קנונית
  (סופי-{case}.docx + עותק קורפוס-סגנון תחת case_number מלא כדי שבל"מ לא
  יתנגש עם ערר באותו מספר), פתיחת draft_final_pairs (final_received). לא נוגע
  ב-active_draft ולא מריץ retrofit (נבדל מ-exports/upload ו-mark-final → לא G2).
- POST .../final/run-learning + .../final/run-halacha — שלבים מדורגים שמעירים
  worker מקומי (claude/DeepSeek/Gemini מקומיים בלבד) דרך הרחבת
  wake_curator_for_final עם param task=learning|halacha.

פאנל-סגנון חדש (scripts/style_lesson_panel.py): שני שופטים (DeepSeek+Gemini)
על-גבי דיסטילציית-ה-Opus; הסכמה 2/2-keep → decision_lesson
(source=panel:deepseek+gemini); substance מדולג (INV-LRN5); הפיך + גיבוי CSV.
פאנל-הלכות: docstring/SCRIPTS.md עודכנו (--apply מחווט).

Frontend (web-ui/): כפתור "העלאת החלטה סופית של היו"ר" + שני כפתורים מדורגים
"הרץ למידת-קול"/"הרץ אימות-הלכות" ב-drafts-panel; כל התוויות בעברית
(badge מקור-לקח: "פאנל: דיפסיק+גמיני", "הרמס (סקירה)"...).

Spec: docs/spec/07-learning.md §0.6. Invariants: INV-LRN1/LRN4/LRN5, G10
(שער-יו"ר ידני להטמעה ל-SKILL.md/lessons.md — הפאנלים יוצרים הצעות בלבד);
G2 (מסלול-סופי הוא יכולת חסרה, לא מסלול-מקביל).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 09:03:26 +00:00

20 KiB
Raw Blame History

07 — לולאת הלמידה (Learning Loop)

קובץ-תחום זה כפוף ל-חוקת המערכת ומפרט כיצד המערכת לומדת לאורך זמן — מהחלטות סופיות (Hermes), מפידבק-היו"ר, ומצמיחת-הקורפוס — באופן שמזין חזרה את הכתיבה (04-analysis-writing.md) ואת שערי-האיכות (05-qa-review.md). הוא אוכף את INV-G10 (שערים אנושיים — אישור היו"ר על כל עדכון-ידע) ואת INV-G4 / כלל-ההנדסה quality-at-source (האחריות לאיכות יושבת במקור, לא בטלאי במורד הזרם).

⚠ קובץ מעורב — שני מודלי-סמכות (לפי החוקה §3, §5):

  • שער-הממשל (Hermes מציע — היו"ר מאשרת ידנית; אין auto-commit ל-SKILL/lessons) הוא invariant הנדסי במודל הממשל-שיפוטי → נושא מקורות: (NCSC/JTC · CEPEJ 2018 · FJC) + סטטוס: verified.
  • כלל-ההנדסה quality-at-source (היכן יושבת האחריות לאיכות-הידע) → invariant הנדסי במודל הנדסת-הנתונים → נושא מקורות: (Fowler — Data Mesh / quality-at-source · DAMA-UK · ISO 8000) + סטטוס: verified.

0. תת-מערכת רכישת-הסגנון (Style Acquisition) — יעד-העל וההפרדה מהכתיבה

יעד-העל של legal-ai: שהסוכנים יכתבו וינתחו עררים בדיוק כמו עו"ד דפנה תמיר — להפנים את הקול והשיטה, לא רק לייצר טיוטה תקנית. ל-end זה מחייב הפרדה מובהקת בין שתי תת-מערכות:

Writing Subsystem Style-Acquisition Subsystem
שאלה "איך אכתוב את התיק כמו דפנה?" "מה למדנו מהפער בין מה שכתבנו למה שדפנה חתמה?"
טריגר issue כתיבה mark-final
פלט 12 בלוקים עדכוני-קול מאושרים + מדד-מרחק
סוכנים writer/analyst/qa/ceo hermes-curator (מורחב)
יחס ל-artifacts-הקול צרכן read-only היחיד שכותב (דרך שער INV-G10)

0.1 הגישה: Authorial Style Profiling, לא fine-tuning

היעד הוא Text Style Transfer מבוסס פרופיל-סגנון מופשט — להכליל את סגנון/שיטת דפנה ולהתאים לתיק הספציפי. fine-tuning של משקולות לא רלוונטי: המודל (Opus) סגור, והקורפוס (~48 החלטות, יו"ר חדשה) קטן מדי — מצב שבו הספרות מראה שפרופיל-מופשט + דוגמאות מנצח (≈+15% מעל RAG-בלבד). מדיניות-העתקה לפי סוג-תוכן: קבוע/נוסחאי (פתיחים דוקטרינליים, תבניות-סיום) → מותר להעתיק; ניתוח/טענות ספציפיים → להכליל ולהתאים; מהות (הלכה/עובדה מתיק אחר) → אסור (INV-LRN5).

0.2 שלושת ערוצי-ההזנה לכותב

  1. A — פרופיל-מופשט (ראשי): voice-fingerprint + author-features כמותיים, מוזרק לכתיבה.
  2. B — דוגמאות + תבניות (תומך): פסקאות-בלוק אמיתיות + Copy-Paste Templates + contrastive.
  3. C — deep-read (נקודתי): voice-XXXX.md — worked example לתיק-מופת.

0.3 הצינור החוזר per-final (7 שלבים)

mark-final → [1] INTAKE (snapshot של הטיוטה) → [2] PAIRING (בלוק↔בלוק) → [3] ALIGNMENT (diff פר-בלוק) → [4] DISTILLATION (מפריד סגנון↔מהות) → [5] CURATION (Hermes + שער-יו"ר) → [6] FEEDBACK (ניתוב לערוץ A/B/C) → [7] MEASUREMENT (מדד-מרחק-סגנון).

0.4 ניהול ב-UI

/methodology = עורך-הפרופיל (declarative: יחסי-זהב, כללי-דיון, צ׳קליסטים, ביטויי-מעבר, אנטי-דפוסים, voice-invariants). /training = שולחן-הלמידה (קורפוס, פורטרט-סגנון, השוואת draft↔final, curator, מדד-מרחק, פנקס-התאמה).

0.5 Invariants חדשים

INV-LRN4 (ניגוד-אמת → G10/G9): למידת-קול מבוססת pairing draft↔final ברמת-בלוק, לא קריאת-final בלבד. כל החלטה אינה "סגורה" עד שהושוותה מול הסופי; כל סופי מנותח מול הטיוטה. נשמר פנקס-התאמה (draft_final_pairs) עם מצב-חיים draft_done → final_received → analyzed → lessons_folded. מקורות: imitation-learning-from-expert-edits · contrastive personalization (arxiv 2504.08745) · author-profiling. סטטוס: verified.

INV-LRN5 (טוהר-הקול → G4/G11): שכבת-ידע-הקול (voice-fingerprint, style_patterns, exemplars) לא תכיל הלכות/עובדות ספציפיות — רק סגנון ושיטה. מהות מנותבת ל-precedent_library/halacha. ה-distillation מפריד במקור. מקורות: quality-at-source (Data Mesh) · separation-of-concerns. סטטוס: verified.

0.6 מסלול-העלאת-סופי נקי + פאנלים אוטומטיים (מדורג)

היו"ר מעלה את ההחלטה החתומה שלה דרך מסלול ייעודי — POST /api/cases/{case}/final/upload (כפתור "העלאת החלטה סופית של היו"ר" בלשונית-הטיוטות). נבדל מ-exports/upload (גרסה-מתוקנת-שלנו+retrofit) ומ-mark-final (סימון export-שלנו), ולכן אינו מסלול-מקביל (G2) אלא יכולת חסרה: קליטת final חיצוני, פתיחת draft_final_pairs (final_received), והכנסה לקורפוס-הסגנון תחת ה-case_number המלא (בל"מ≠ערר — מונע התנגשות-מספר). ואז שני שלבים אוטומטיים נפרדים (run-learning / run-halacha) המעירים worker מקומי (claude/DeepSeek/Gemini מקומיים בלבד):

  • למידה: ingest_final_version (Opus distillation) → פאנל-סגנון דו-סוכני (DeepSeek+Gemini, "למידה כפולה") שמצביע על כל לקח-style_method; הסכמה 2/2 → decision_lesson (source=panel:deepseek+gemini); פיצול → ליו"ר.
  • הלכות: extract_internal_citationsprecedent_extract_halachotcorroboration_rebuildפאנל-הלכות תלת-סוכני (halacha_panel_approve.py --apply). שני הפאנלים הפיכים (גיבוי-CSV ל-data/audit/) ומסלימים מחלוקות. ההטמעה הסופית ל-SKILL.md/legal-decision-lessons.md נשארת אישור-יו"ר ידני (INV-LRN1/G10) — הפאנל יוצר הצעות בלבד.

1. שלוש לולאות-המשנה

הלמידה אינה אירוע יחיד אלא שלוש לולאות המתנקזות לאותם מסמכי-ידע מוסמכים (legal-decision-lessons.md, skills/decision/SKILL.md) ולקורפוסים:

1.1 לולאת-Hermes (post-export → הצעה → אישור)

הסוכן hermes-curator (adapter deepseek_local, פרופילים curator-cmp / curator-cmpa) נקרא אחרי שדפנה מסמנת קובץ כסופי ב-UI (POST /api/cases/{case_number}/exports/{filename}/mark-finalpc_wake_curator_for_final() ב-web/paperclip_client.py → sub-issue + wakeup; חיבור ישיר מה-UI, לא דרך CEOhermes-curator.md:27-35). הוא:

  • קורא בלבד את הטקסט הסופי (case_get_final_text), get_style_guide, ואת SKILL.md / legal-decision-lessons.md / corpus-analysis.md המקומיים (hermes-curator.md:60-70).
  • מזהה 35 דפוסים/פערים חדשים, כל ממצא מתויג [סגנון] / [מבנה] / [לקסיקון משפטי] / [טבלאי] (hermes-curator.md:99-108).
  • מציע — comment ב-Paperclip + רישום כל ממצא כ-decision_lesson דרך POST /api/training/corpus/{corpus_id}/lessons (source:"curator") שמופיע ב-UI תחת הטאב "מה למדנו" (hermes-curator.md:73-96).
  • אינו מעדכן קבצים בעצמו (skills/, lessons.py, DB) — רק מציע (hermes-curator.md:125-130).

1.2 לולאת-פידבק-היו"ר (capture → ניתוח שבועי → לקחים)

  • לכידה מובנית: record_chair_feedback שומר הערת-דפנה בטבלת chair_feedback (category ∈ {missing_content, wrong_tone, wrong_structure, factual_error, style, other}) — tools/workflow.py:348, ראה 05-qa-review.md §2.3.
  • ניתוח שבועי: ה-scheduled job weekly-feedback-analysis (ראשון 19:00, plugin-legal-ai/src/manifest.ts:175-179) מושך GET /api/chair-feedback/weekly-summary, ואם יש פריטים — מעיר את ה-CEO לעדכן את legal-decision-lessons.md עם הלקחים החדשים (worker.ts:784-837; הוראת ה-prompt: "הוסף רק לקחים חדשים… קבץ לפי נושא" — worker.ts:830).
  • אין פריטים → הג'וב מדלג בשקט (worker.ts:805). ל-CEO שמתעורר מ-weekly-feedback-job אין issueId — הוא כותב לקובץ בלבד, לא מפרסם comment ולא סוגר issue (כלל מ-CLAUDE.md "Scheduled Jobs").

1.3 לולאת-צמיחת-הקורפוס (החלטה סופית → קורפוס → אחזור)

החלטה סופית נקלטת לקורפוס-הסגנון (ingest_final_version — ראה 06-export.md § Hermes), ופסיקה/החלטות-ועדה חדשות נקלטות דרך המסלול הקנוני של 01-ingest.md. כך הקורפוס שמזין את האחזור (03-retrieval.md) גדל מהפלט עצמו — והדיון הבא נשען על תקדים עשיר יותר. צמיחה זו כפופה לאותו חוזה-שלמות (G4) כמו כל קליטה.


2. הלולאה במלואה (הציור)

                 ┌──────────────────────────────────────────────────────┐
                 │                                                      │
   ┌─────────────▼─────────────┐         ┌────────────────────────┐     │
   │  כתיבה (04)               │  ───▶   │  QA + שערים אנושיים (05)│     │
   │  12 בלוקים · סגנון דפנה   │         │  validate_decision +    │     │
   │  ← lessons.py CONTENT_    │         │  פידבק-היו"ר            │     │
   │    CHECKLISTS · SKILL.md  │         └───────────┬────────────┘     │
   └───────────────────────────┘                     │ ייצוא (06)        │
            ▲                                         ▼                   │
            │                              ┌──────────────────────┐      │
   ┌────────┴──────────────┐               │  סימון "סופי" (UI)    │      │
   │ legal-decision-       │               │  mark-final           │      │
   │ lessons.md + SKILL.md │               └───────┬──────────────┘      │
   │ (מסמכי-ידע מוסמכים)   │                       │                      │
   └────────▲──────────────┘            ┌──────────┴───────────┐         │
            │                           ▼                      ▼         │
            │  ✋ אישור-יו"ר ידני  ┌───────────────┐   ┌────────────────┐│
            └──────────────────────│ Hermes curator │   │ ingest_final → ││
            (commit ידני בלבד)     │ → הצעות(comment)│   │ קורפוס-סגנון → ┘│
                                   └───────────────┘   │ אחזור (03)      │
   ┌───────────────────────────┐                       └────────────────┘
   │ פידבק-היו"ר (05) ──┐       │
   │ chair_feedback     │       │
   └────────────────────┼───────┘
                        ▼
              weekly-feedback-analysis (job)
                        │ מעיר CEO
                        ▼
              עדכון legal-decision-lessons.md  ──┐
                                                 └──▶ (חזרה ל-04 / lessons.py)

הקשר לכתיבה: הלקחים והצ'קליסטים שב-CONTENT_CHECKLISTS (mcp-server/src/legal_mcp/services/lessons.py:355, בורר get_content_checklist :509-555) ו-get_lessons_for_outcome (lessons.py:309) מוזרקים ל-prompt-הכתיבה לפי סוג-ערר ותוצאה — ראה 04-analysis-writing.md §5. כל סגירה של לולאה (Hermes או פידבק) שמשנה את legal-decision-lessons.md / SKILL.md משפיעה ישירות על הכתיבה הבאה.


3. Invariants של התחום

INV-LRN1: עדכון-ידע דורש אישור-יו"ר ידני — אין auto-commit (governance →G10)

כלל: מנגנוני-הלמידה (Hermes, ניתוח-פידבק שבועי) מציעים בלבד. כל שינוי ב- SKILL.md או ב-legal-decision-lessons.md מחייב בחינה ואישור ידניים של היו"ר/חיים ואז commit ידני — לעולם לא auto-committed. Hermes כותב comment + decision_lesson, לא קבצים; ה-CEO השבועי כותב לקובץ אך הצעותיו מאומתות ידנית לפני קיבוע. זהו פֶּאֶט של INV-G10 על שכבת-הידע: גם הלמידה כפופה לשיקול-הדעת האנושי. מקורות: NCSC/JTC — Principles & Practices for AI Use in Courts (human-in-the-loop; never replace human judgment) · Council of Europe / CEPEJ (2018, under user control) · Federal Judicial Center — Judicial Writing Manual (2d ed.) | סטטוס: verified אכיפה: הסוכן read-only על תוכן ו-write רק על comments (hermes-curator.md:1-3, 125-130); תהליך-האישור — הצעת-curator כ-comment ב-Paperclip → חיים בוחן ומאשר ידנית → commit ל- SKILL.md ו-docs/legal-decision-lessons.md (מ-CLAUDE.md "Hermes Curator"); ה-CEO השבועי מתעורר בלי issueId וכותב לקובץ בלבד (CLAUDE.md "Scheduled Jobs"). הפרה ידועה:

INV-LRN2: האחריות לאיכות יושבת במקור — quality-at-source (engineering →G4)

כלל: האחריות לאיכות-הידע (לקחים, הלכות, metadata של פריטים מואנדקסים) נאכפת קרוב ככל האפשר לנקודת-היצירה/הקליטה — בעת ניסוח-ההחלטה, בעת לכידת-הפידבק, ובעת קליטת-פריט — לא מתוקנת בדיעבד במורד-הזרם (re-OCR, טלאי-קריאה, ניחוש בזמן-חיפוש). פריט-ידע חסר-שלמות מסומן ומדווח בנקודת-הכניסה, לא מתקבל בשקט. מקורות: Martin Fowler — Data Mesh (quality-at-source: domain owns data quality at the point of creation) · DAMA-UK Six Primary Dimensions for Data Quality (2013, completeness) · ISO 8000 (Data quality) | סטטוס: verified אכיפה: חוזה-שלמות בקליטה (01-ingest.md §2, 02-data-model.md)

  • "אין בליעה שקטה" (חוקה §6); לכידת-פידבק מובנית בנקודת-ההערה (record_chair_feedback, tools/workflow.py:348); לקחים נשמרים מבני ולא ad-hoc (lessons.py, legal-decision-lessons.md). הפרה ידועה: ראה INV-G4 (ערן סופר 8046/24 אונדקס עם headnote/summary/tags ריקים — שלמות לא נאכפה במקור) → ממצא ל-audit.

INV-LRN3: ידע נלכד באופן מובנה — לא ad-hoc (engineering →G9)

כלל: פידבק ולקחים נלכדים במבנה דטרמיניסטי ועקיבchair_feedback (עם category ו-block_id), decision_lessons (עם category/source), ו-CONTENT_CHECKLISTS בקוד — כך שהלמידה עמידה וניתנת-לביקורת, לא פזורה בהערות חופשיות. מקור-הלקח (source:"curator" מול פידבק-יו"ר) משומר לעקיבוּת. מקורות: ISO 15489-1:2016 (records reliability/authenticity) · DAMA-UK Six Primary Dimensions for Data Quality (2013) · ISO 8000 (Data quality) | סטטוס: verified אכיפה: טבלת chair_feedback + record_chair_feedback/list_chair_feedback (tools/workflow.py:348, 393); decision_lessons עם source+category (hermes-curator.md:79-96); CONTENT_CHECKLISTS/get_lessons_for_outcome (lessons.py:355, 309). עקיבוּת-מקור קושרת ל-X5-audit-provenance.md. הפרה ידועה:


4. הג'ובים המתוזמנים (תמיכת-תשתית ללולאה)

Job (manifest.ts) לוח-זמנים תפקיד בלולאה
weekly-feedback-analysis ראשון 19:00 (:175-179) מסכם פידבק-יו"ר → מעיר CEO לעדכון legal-decision-lessons.md (worker.ts:784-837)
stale-case-reminder יומי 08:00 (:169-172) תזכורת על תיקים תקועים 30+ ימים (worker.ts:710-780) — היגיינת-תהליך, לא ידע
sync-case-status כל 15 דק' (:162-166) מסנכרן סטטוסי-תיקים legal-ai↔Paperclip (worker.ts:624) — תשתית, לא ידע

רק weekly-feedback-analysis הוא חלק מלולאת-הלמידה; שני האחרים הם היגיינת-תהליך/סנכרון.


5. הפניות-אחיות