זיהוי כוונות (Intent Detection) v2.0
מערכת זיהוי כוונות מתקדמת עם 16 קטגוריות ו-200+ מילות מפתח בעברית. מאפשרת לצ'אטבוט להבין את כוונת המשתמש בדיוק גבוה ולהפעיל את הפונקציה המתאימה.
חדש בגרסה 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.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)