Spaces:
Sleeping
Sleeping
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
|