חדש בגרסה 2.0: 16 קטגוריות כוונות (במקום 8), 200+ מילות מפתח, קטגוריות חדשות (greeting, thanks, farewell), MCPValidator לאימות קלט
תהליך זיהוי כוונה
הודעת משתמש
חיפוש מילות מפתח
זיהוי Intent
חילוץ Entities
הפעלת פונקציה

קטגוריות כוונות

לקוחות (Customer) - 52 מילות מפתח
כוונות זמינות:
  • customer_lookup - חיפוש לקוח (16 מילות מפתח)
  • customer_balance - יתרת לקוח (21 מילות מפתח)
  • customer_history - היסטוריית לקוח (15 מילות מפתח)
מילות מפתח (דוגמאות):
לקוח לקוחות חפש לקוח מצא לקוח יתרה חוב כמה חייב היסטוריה פרטי לקוח מידע על לקוח חשבון לקוח פעילות לקוח
דוגמאות שאילתות:
  • "מה היתרה של 0501234567?"
  • "חפש לקוח בשם משה כהן"
  • "הצג את ההיסטוריה של לקוח 123"
  • "כמה הלקוח חייב לנו?"
חשבוניות (Invoice)
כוונות זמינות:
  • INVOICE_SEARCH - חיפוש חשבונית
  • INVOICE_DETAILS - פרטי חשבונית
  • INVOICE_STATUS - סטטוס חשבונית
  • INVOICE_SUMMARY - סיכום חשבוניות
מילות מפתח:
חשבונית חשבוניות תשלום שולם סכום מספר חשבונית פתוחות
דוגמאות שאילתות:
  • "מה הסטטוס של חשבונית 12345?"
  • "הצג חשבוניות פתוחות"
  • "כמה שילם לקוח 0501234567?"
תיקונים (Repair)
כוונות זמינות:
  • REPAIR_STATUS - סטטוס תיקון
  • REPAIR_SEARCH - חיפוש תיקונים
  • REPAIR_HISTORY - היסטוריית תיקונים
  • REPAIR_QUEUE - תור תיקונים
מילות מפתח:
תיקון תיקונים מעבדה סטטוס מוכן ממתין RMA
דוגמאות שאילתות:
  • "מה סטטוס התיקון R-2024-001?"
  • "כמה תיקונים ממתינים?"
  • "הצג תיקונים של לקוח 0501234567"
מלאי (Inventory)
כוונות זמינות:
  • INVENTORY_CHECK - בדיקת מלאי
  • INVENTORY_LOW - מלאי נמוך
  • PRODUCT_SEARCH - חיפוש מוצר
  • PRICE_CHECK - בדיקת מחיר
מילות מפתח:
מלאי מוצר כמות מחיר במלאי חסר SKU
דוגמאות שאילתות:
  • "כמה יש במלאי מוצר X?"
  • "מה המחיר של iPhone 15?"
  • "הצג מוצרים עם מלאי נמוך"
אנליטיקס (Analytics)
כוונות זמינות:
  • SALES_REPORT - דוח מכירות
  • REVENUE_STATS - סטטיסטיקות הכנסות
  • TOP_CUSTOMERS - לקוחות מובילים
  • DAILY_SUMMARY - סיכום יומי
מילות מפתח:
דוח סטטיסטיקה מכירות הכנסות היום החודש סיכום
דוגמאות שאילתות:
  • "מה המכירות היום?"
  • "הצג דוח הכנסות החודש"
  • "מי הלקוחות הכי טובים?"
כללי (General) - 39 מילות מפתח
כוונות זמינות:
  • greeting - ברכה/שלום (13 מילות מפתח) חדש!
  • thanks - תודה/הוקרה (11 מילות מפתח) חדש!
  • help - עזרה (15 מילות מפתח)
  • UNKNOWN - לא מזוהה
מילות מפתח (דוגמאות):
שלום היי בוקר טוב ערב טוב מה נשמע תודה תודה רבה מעולה אחלה עזרה מה אתה יכול איך משתמשים
דוגמאות שאילתות:
  • "שלום, בוקר טוב!"
  • "תודה רבה על העזרה"
  • "מה אתה יכול לעשות?"
  • "איך משתמשים במערכת?"
אלגוריתם זיהוי כוונות

המערכת משתמשת באלגוריתם מבוסס מילות מפתח עם תעדוף לפי דיוק:

def detect_intent(self, message: str) -> Dict: """זיהוי כוונת המשתמש מתוך הודעה""" message_lower = message.lower() # Intent patterns בסדר עדיפות intent_patterns = { # לקוחות 'CUSTOMER_BALANCE': ['יתרה', 'חוב', 'כמה חייב'], 'CUSTOMER_SEARCH': ['חפש לקוח', 'מצא לקוח', 'לקוח בשם'], 'CUSTOMER_INFO': ['פרטי לקוח', 'מידע על', 'תראה לקוח'], # חשבוניות 'INVOICE_STATUS': ['סטטוס חשבונית', 'חשבונית מספר'], 'INVOICE_SEARCH': ['חשבוניות של', 'חשבוניות פתוחות'], # תיקונים 'REPAIR_STATUS': ['סטטוס תיקון', 'תיקון מספר', 'R-'], 'REPAIR_QUEUE': ['תור תיקונים', 'ממתינים', 'תיקונים פתוחים'], # מלאי 'INVENTORY_CHECK': ['במלאי', 'כמות', 'מלאי של'], 'PRICE_CHECK': ['מחיר', 'כמה עולה', 'עלות'], # כללי 'GREETING': ['שלום', 'היי', 'הי', 'בוקר טוב'], 'HELP': ['עזרה', 'מה אתה יכול', 'איך'] } # חיפוש התאמה for intent, patterns in intent_patterns.items(): for pattern in patterns: if pattern in message_lower: return { 'intent': intent, 'confidence': 0.9, 'matched_pattern': pattern } # ברירת מחדל return { 'intent': 'UNKNOWN', 'confidence': 0.0 }
חילוץ ישויות (Entity Extraction)

המערכת מחלצת אוטומטית ישויות רלוונטיות מההודעה:

סוג ישות תבנית (Regex) דוגמה תוצאה
טלפון 0[5-9]\d{8} "לקוח 0501234567" phone: "0501234567"
סכום כסף [\d,]+(?:\.\d{2})?\s*(?:₪|ש"ח|שקל) "1,500 ₪" amount: 1500
מספר חשבונית (?:INV|חשבונית)[-#]?\d+ "חשבונית 12345" invoice_id: "12345"
מספר תיקון R-\d{4}-\d+ "תיקון R-2024-001" repair_id: "R-2024-001"
תאריך \d{1,2}[./]\d{1,2}[./]\d{2,4} "מ-01/12/2024" date: "2024-12-01"
אימייל [\w.-]+@[\w.-]+\.\w+ "user@email.com" email: "user@email.com"
def extract_entities(self, message: str) -> Dict: """חילוץ ישויות מההודעה""" entities = {} # חילוץ מספר טלפון phone_match = re.search(r'0[5-9]\d{8}', message) if phone_match: entities['phone'] = phone_match.group() # חילוץ סכום כסף amount_match = re.search(r'([\d,]+(?:\.\d{2})?)\s*(?:₪|ש"ח|שקל)', message) if amount_match: amount_str = amount_match.group(1).replace(',', '') entities['amount'] = float(amount_str) # חילוץ מספר חשבונית invoice_match = re.search(r'(?:INV|חשבונית)[-#]?(\d+)', message, re.IGNORECASE) if invoice_match: entities['invoice_id'] = invoice_match.group(1) # חילוץ מספר תיקון repair_match = re.search(r'(R-\d{4}-\d+)', message, re.IGNORECASE) if repair_match: entities['repair_id'] = repair_match.group(1) return entities
ציון ביטחון (Confidence Scoring)

המערכת מחשבת ציון ביטחון (0-1) עבור כל זיהוי כוונה:

התאמה מדויקת
0.90 - 1.00
התאמה חלקית
0.60 - 0.89
התאמה נמוכה
0.00 - 0.59
שימו לב: כאשר ציון הביטחון נמוך מ-0.5, המערכת תבקש הבהרה מהמשתמש במקום לנחש את הכוונה.
הוספת כוונות מותאמות

ניתן להוסיף כוונות חדשות דרך ממשק ניהול הפרומפטים או דרך ה-API:

# דוגמה להוספת Intent חדש דרך ה-API POST /api/mcp-chatbot/functions Content-Type: application/json { "name": "check_warranty", "description": "בדיקת אחריות למוצר", "category": "repair", "parameters": { "type": "object", "properties": { "serial_number": { "type": "string", "description": "מספר סריאלי של המוצר" } }, "required": ["serial_number"] }, "keywords": ["אחריות", "warranty", "תוקף אחריות"] }
שיטות עבודה מומלצות
מה כדאי לעשות:
  • להשתמש במילות מפתח ספציפיות ובעלות משמעות ברורה
  • לכלול וריאציות של אותה מילה (יחיד/רבים)
  • לבדוק את הזיהוי עם דוגמאות מגוונות
  • להגדיר fallback ל-intents לא מזוהים
  • לתעד את כל ה-intents והמילות מפתח
מה להימנע ממנו:
  • מילות מפתח כלליות מדי ("הצג", "מה")
  • חפיפה בין מילות מפתח של intents שונים
  • intents עם יותר מדי פרמטרים נדרשים
  • הסתמכות על סדר מילים מדויק
  • התעלמות משגיאות כתיב נפוצות
MCPValidator - אימות קלט (חדש בגרסה 2.0)

מחלקת MCPValidator מספקת אימות וניקוי קלט מקצועי:

אימות טלפון ישראלי:
# פורמטים נתמכים: 050-1234567 → ✅ (0501234567) 0501234567 → ✅ (0501234567) +972501234567 → ❌ (אורך לא תקין) xxx → ❌ (מספר לא תקין) def validate_phone(phone: str): return (is_valid, normalized, error_msg)
אימות מספר חשבונית:
# פורמטים נתמכים: INV-2024-001 → ✅ (INV-2024001) 2024-12345 → ✅ (INV-202412345) inv#123 → ✅ (INV-123)
אימות סכום:
# פורמטים נתמכים: 1234.56 → ✅ (1234.56) 1,234.56 → ✅ (1234.56) ₪1,500 → ✅ (1500.0)
ניקוי XSS:
# מסיר תגיות HTML וסקריפטים: "<script>alert(1)</script>" → "alert(1)" "Hello <b>World</b>" → "Hello World" def sanitize_input(text: str): return clean_text
מערכת Logging מקצועית (חדש בגרסה 2.0)

המערכת מתעדת את כל הפעולות בקבצי לוג מקצועיים:

קבצי לוג:
  • app/logs/mcp_chatbot.log - לוגים כלליים
  • app/logs/mcp_chatbot_errors.log - שגיאות בלבד
פורמט לוג:
2025-12-01 10:02:54 | INFO | __init__ | MCPChatbotService initialized 2025-12-01 10:03:37 | DEBUG | wrapper | CALL START: _analyze_message 2025-12-01 10:03:37 | INFO | wrapper | CALL END: _analyze_message | Duration: 15.3ms
מידע מתועד:
  • אתחול שירות
  • קריאות פונקציה (התחלה וסיום)
  • זמני ביצוע לכל פונקציה
  • שגיאות עם traceback מלא
  • Intent Detection results
  • Entity Extraction results
  • Token counts (input/output)