File size: 8,709 Bytes
9c30c74
05db85e
9c30c74
05db85e
9c30c74
05db85e
9c30c74
05db85e
9c30c74
05db85e
9c30c74
 
 
 
05db85e
9c30c74
05db85e
9c30c74
05db85e
9c30c74
 
 
 
 
 
 
 
05db85e
9c30c74
 
 
 
 
 
05db85e
9c30c74
 
 
 
 
 
 
 
 
05db85e
9c30c74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
05db85e
9c30c74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
05db85e
9c30c74
05db85e
9c30c74
05db85e
9c30c74
 
 
05db85e
9c30c74
 
 
05db85e
9c30c74
 
 
 
05db85e
9c30c74
05db85e
9c30c74
05db85e
9c30c74
05db85e
9c30c74
 
 
 
 
 
 
05db85e
9c30c74
 
 
 
05db85e
9c30c74
05db85e
9c30c74
05db85e
9c30c74
 
 
 
05db85e
9c30c74
 
 
 
05db85e
9c30c74
05db85e
b7c1a41
05db85e
9c30c74
b7c1a41
9c30c74
 
 
 
9a7cb3e
 
 
 
 
 
9c30c74
05db85e
 
9c30c74
05db85e
9c30c74
 
 
05db85e
9c30c74
05db85e
9c30c74
 
 
 
05db85e
9c30c74
05db85e
9c30c74
 
 
 
 
05db85e
9c30c74
05db85e
9c30c74
 
 
 
 
05db85e
9c30c74
 
 
 
 
05db85e
9c30c74
 
 
 
 
 
 
 
 
05db85e
9c30c74
 
05db85e
9c30c74
05db85e
9c30c74
 
 
05db85e
9c30c74
 
05db85e
9c30c74
 
 
05db85e
9c30c74
05db85e
9c30c74
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
# ארכיטקטורת המערכת - Feedback Analysis Agent

## סקירה כללית

המערכת היא **SQL-based Feedback Analysis Agent** שמאפשרת לשאול שאלות בשפה טבעית על משובי משתמשים ולקבל תשובות מפורטות ומבוססות נתונים.

## עקרונות הארכיטקטורה

המערכת מבוססת על **4 שלבים עיקריים**:

1. **ניתוח שאילתה** - LLM מנתח את שאלת המשתמש
2. **יצירת שאילתות SQL** - LLM יוצר 1-5 שאילתות SQL רלוונטיות
3. **ביצוע שאילתות** - שאילתות SQL מבוצעות על הנתונים
4. **סינתזה ותשובה** - LLM יוצר תשובה מפורטת מהתוצאות, כולל בדיקת איכות אוטומטית

## רכיבי המערכת

### 1. Backend (Python/FastAPI)

#### `app/api.py`
- **תפקיד**: FastAPI application - נקודת הכניסה הראשית
- **Endpoints**:
  - `POST /query-sql` - שאילתות עיקריות (הגישה היחידה)
  - `POST /health` - בדיקת תקינות השרת
  - `GET /history` - היסטוריית שאלות
  - `POST /history/clear` - ניקוי היסטוריה
  - `GET /` - ממשק משתמש (frontend)

#### `app/sql_service.py`
- **תפקיד**: הליבה של המערכת - מטפל בכל תהליך הניתוח
- **מחלקות**:
  - `SQLFeedbackService` - השירות הראשי
  - `SQLQueryResult` - תוצאה של שאילתת SQL אחת
  - `AnalysisResult` - תוצאה מלאה של ניתוח

**תהליך העבודה**:
```python
analyze_query(query) _generate_sql_queries()      # שלב 1: יצירת שאילתות SQL
  → _execute_sql_queries()       # שלב 2: ביצוע שאילתות
  → _synthesize_answer()         # שלב 3: יצירת תשובה
    → _evaluate_answer_quality() # בדיקת איכות (אם < 80, שיפור אוטומטי)
  → _generate_visualizations()   # שלב 4: יצירת גרפים
```

**פונקציות מפתח**:
- `_generate_sql_queries()` - משתמש ב-LLM ליצירת שאילתות SQL
- `_execute_sql_queries()` - מריץ שאילתות על SQLite in-memory
- `_synthesize_answer()` - יוצר תשובה מפורטת מהתוצאות
- `_evaluate_answer_quality()` - בודק איכות תשובה (0-100)
- `_generate_visualizations()` - יוצר מפרטי גרפים

#### `app/data_loader.py`
- **תפקיד**: טעינת נתונים מ-CSV
- **פונקציה**: `load_feedback()` - טוען ומנקה את קובץ ה-CSV

#### `app/config.py`
- **תפקיד**: הגדרות מערכת
- **מכיל**: API keys, נתיבי קבצים, שמות עמודות

### 2. Frontend (HTML/CSS/JavaScript)

#### `app/static/index.html`
- **תפקיד**: ממשק משתמש
- **תכונות**:
  - שדה שאילתה
  - הצגת תשובות
  - הצגת שאילתות SQL ותוצאות
  - גרפים ויזואליים
  - היסטוריית שאלות

#### `app/static/app.js`
- **תפקיד**: לוגיקת frontend
- **פונקציות מפתח**:
  - `sendQuery()` - שליחת שאילתה לשרת
  - `showVisualizations()` - הצגת גרפים
  - `getChartConfig()` - הגדרת גרפים (Chart.js)
  - `formatSQLResults()` - עיצוב תוצאות SQL

## זרימת נתונים

```
משתמש → Frontend → API (/query-sql) → SQLFeedbackService

                                    [1] _generate_sql_queries()

                                    [2] _execute_sql_queries()

                                    [3] _synthesize_answer()

                                    [4] _evaluate_answer_quality()
                                              ↓ (אם < 80)
                                    [5] שיפור אוטומטי

                                    [6] _generate_visualizations()

                                    ← AnalysisResult

                                    ← JSON Response

                                    Frontend → משתמש
```

## LLM Integration

המערכת תומכת ב-2 LLM providers:

1. **Google Gemini** (מועדף)
   - מודל: `gemini-2.0-flash`
   - Fallback אוטומטי ל-OpenAI אם לא זמין

2. **OpenAI**
   - מודל: `gpt-4o-mini`
   - Fallback אם Gemini לא זמין

**שימוש ב-LLM ב-3 מקומות**:
1. יצירת שאילתות SQL (`_generate_sql_queries`)
2. סינתזה של תשובה (`_synthesize_answer`)
3. הערכת איכות תשובה (`_evaluate_answer_quality`)

## Quality Assurance

### בדיקת איכות אוטומטית

המערכת כוללת **מערכת בדיקת איכות אוטומטית**:

1. כל תשובה מקבלת ציון 0-100
2. קריטריונים:
   - האם התשובה עונה ישירות על השאלה? (0-30 נקודות)
   - האם התשובה מבוססת על הנתונים? (0-25 נקודות)
   - האם התשובה מפורטת ומקיפה? (0-20 נקודות)
   - האם התשובה ברורה ומובנת? (0-15 נקודות)
   - האם התשובה כוללת תובנות עסקיות? (0-10 נקודות)

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

## Visualizations

המערכת יוצרת **גרפים אוטומטיים** בהתבסס על תוצאות השאילתות:

- **Bar Chart** - להשוואות בין קטגוריות
- **Line Chart** - למגמות לאורך זמן
- **Scatter Plot** - לקשרים בין משתנים
- **Histogram** - להתפלגות נתונים

כל גרף כולל:
- הסבר על סוג הגרף
- צבעים מגוונים
- Tooltips אינטראקטיביים

## Database Schema

המערכת עובדת עם טבלת `Feedback_transformed`:

```sql
CREATE TABLE Feedback_transformed (
    ID INTEGER PRIMARY KEY,
    ServiceName TEXT,      -- שם השירות
    Level INTEGER,         -- דירוג 1-5
    Text TEXT,             -- טקסט המשוב
    Year INTEGER,          -- שנה
    Month INTEGER,         -- חודש
    DayInMonth INTEGER,    -- יום בחודש
    DayOfWeek TEXT,        -- יום בשבוע
    Hour INTEGER,          -- שעה
    DayOrNight TEXT        -- יום/לילה
);
```

## Security & Configuration

- **API Keys**: נטענים מ-`.env` (git-ignored)
- **Data**: קובץ CSV נטען מהדיסק
- **History**: נשמר ב-`.query_history.json` (git-ignored)

## Deployment

המערכת יכולה לרוץ:
- **Locally**: `python run.py`
- **Docker**: `docker build && docker run`
- **Runpod**: באמצעות Dockerfile

## הרחבות עתידיות

1. **Caching** - שמירת תוצאות שאילתות נפוצות
2. **Multi-language** - תמיכה בשפות נוספות
3. **Advanced Analytics** - ניתוחים סטטיסטיים מתקדמים
4. **Real-time Updates** - עדכונים בזמן אמת
5. **Export** - ייצוא תוצאות ל-PDF/Excel

## שינויים והתאמות

### שינוי מודל LLM
ערוך ב-`app/sql_service.py`:
```python
model = genai.GenerativeModel("gemini-2.0-flash")  # שנה כאן
```

### שינוי סף איכות
ערוך ב-`app/sql_service.py`:
```python
if score < 80:  # שנה כאן (0-100)
```

### הוספת עמודות חדשות
ערוך ב-`app/sql_service.py``_get_schema_info()`:
```python
schema_info = f"""
טבלת Feedback מכילה את השדות הבאים:
- ID: ...
- NewColumn: ...  # הוסף כאן
"""
```

### שינוי עיצוב Frontend
ערוך ב-`app/static/index.html` (CSS) ו-`app/static/app.js` (JavaScript)

## Troubleshooting

### שגיאת "No feedback data available"
- ודא שקובץ `Feedback.csv` קיים
- ודא שהעמודות הנדרשות קיימות: ID, ServiceName, Level, Text

### שגיאת API Key
- ודא שקובץ `.env` קיים עם `GEMINI_API_KEY` או `OPENAI_API_KEY`

### תשובות לא איכותיות
- בדוק את הלוגים - המערכת מדפיסה ציוני איכות
- נסה לשנות את ה-prompt ב-`_synthesize_answer()`

## קישורים

- GitHub: [לעדכן]
- קורות חיים: [לעדכן]