galbendavids's picture
ארגון מחדש של הספריה: מחיקת CreationDate, ארגון לפי 0_preprocessing, 1_frontend, 2_backend_llm
9a7cb3e
# ארכיטקטורת המערכת - 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: [לעדכן]
- קורות חיים: [לעדכן]