File size: 4,353 Bytes
9f2df60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# User Profile Tracking System

## Overview
This document describes the user profile tracking system implemented in the Executive Agent Chain.

## Features

### Tracked Profile Information

The system tracks the following user profile data:

1. **User-ID**: Unique UUID generated for each user session
2. **Name**: User's name extracted from conversation (e.g., "John Doe")
3. **Experience Years**: Years of professional experience (extracted from conversation)
4. **Leadership Years**: Years of leadership/management experience (extracted from conversation)
5. **Field**: Professional field/industry (e.g., Finance, Technology, Healthcare)
6. **Interest**: Content interests (e.g., Strategy, Innovation, Digital Transformation)
7. **Suggested Program**: Recommended program based on user profile (EMBA, IEMBA, or EMBA X)
8. **Handover**: Whether user requested appointment/contact (true/false/null)

### Additional Tracked Data
- User language (locked after first message)
- Program interests mentioned in conversation
- Topics discussed

## Configuration

Profile tracking is controlled by the `TRACK_USER_PROFILE` flag in `config.py`:

```python
TRACK_USER_PROFILE = True  # Enable/disable user profile tracking
```

## How It Works

### 1. Profile Extraction

The system uses regex patterns to extract information from user conversations:

- **Experience years**: Patterns like "10 years experience", "working for 5 years"
- **Leadership years**: Patterns like "5 years of leadership", "managed for 3 years"
- **Field**: Matches against common industries (finance, technology, healthcare, etc.)
- **Interest**: Identifies keywords like strategy, innovation, leadership, digital transformation

### 2. Program Recommendation

The system automatically suggests programs based on extracted profile:

- **EMBA**: Recommended for users with 5+ years experience and 2+ years leadership
- **IEMBA**: Recommended for users with 5+ years experience
- **emba X**: Recommended for users interested in digital/innovation/technology

### 3. Profile Logging

User profiles are logged to JSON files in `logs/user_profiles/` directory:

- Logs are created every 5 user messages
- Logs are created when a program is suggested
- File format: `profile_{user_id}_{timestamp}.json`

### Example Log File

```json
{
  "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "John Doe",
  "timestamp": "2025-11-25T10:15:30.123456",
  "experience_years": 10,
  "leadership_years": 5,
  "field": "Technology",
  "interest": "innovation, digital transformation",
  "suggested_program": "EMBA",
  "handover": true,
  "user_language": "en",
  "program_interest": ["EMBA", "EMBA X"]
}
```

## Implementation Details

### Key Methods

1. `_extract_experience_years(conversation)`: Extracts professional experience years
2. `_extract_leadership_years(conversation)`: Extracts leadership experience years
3. `_extract_field(conversation)`: Identifies professional field/industry
4. `_extract_interest(conversation)`: Identifies content interests
5. `_determine_suggested_program()`: Recommends program based on profile
6. `_update_conversation_state(query, response)`: Updates profile from conversation
7. `_log_user_profile()`: Saves profile to JSON file

### Integration

Profile tracking is integrated into the main `query()` method:

```python
if TRACK_USER_PROFILE:
    self._update_conversation_state(processed_query, formatted_response)
    # Log profile every 5 messages or when program is suggested
    message_count = len([m for m in self._conversation_history if isinstance(m, HumanMessage)])
    if (message_count % 5 == 0 or self._conversation_state.get('suggested_program')):
        self._log_user_profile()
```

## Privacy Considerations

- User profiles are stored locally in the logs directory
- Each session gets a unique UUID
- No personally identifiable information is required
- The system only extracts professional information volunteered during conversation

## Language Support

The extraction patterns support both English and German:

- English: "10 years experience", "5 years leadership"
- German: "10 Jahre Erfahrung", "5 Jahre Führung"

## Disabling Profile Tracking

To disable profile tracking, set `TRACK_USER_PROFILE = False` in `config.py`. This will:

- Skip all profile extraction
- Prevent profile logging
- Reduce processing overhead