QuentinL52 commited on
Commit
a5eb957
·
verified ·
1 Parent(s): 81872d9

Update src/crew/tasks.py

Browse files
Files changed (1) hide show
  1. src/crew/tasks.py +83 -18
src/crew/tasks.py CHANGED
@@ -48,16 +48,23 @@ task_extract_experience = Task(
48
  description=(
49
  "Voici le contenu du CV :\n\n{cv_content}\n\n"
50
  """
51
- Extrais toutes les expériences professionnelles du CV. Pour chaque expérience, tu DOIS fournir les informations suivantes :
52
- - Poste: Le titre du poste.
53
- - Entreprise: Le nom de l'entreprise.
54
- - start_date: La date de début. Si non trouvée, retourne "Non spécifié".
55
- - end_date: La date de fin. Si le poste est actuel, utilise "Aujourd'hui". Si non trouvée, retourne "Non spécifié".
56
- - responsabilités: Une liste des tâches et missions.
 
 
 
57
 
58
  RÈGLES STRICTES :
59
- 1. NE JAMAIS laisser un champ vide (""). Si une information est introuvable, utilise la valeur "Non spécifié".
60
- 2. Analyse attentivement les dates. "Depuis 2023" signifie que la date de fin est "Aujourd'hui".
 
 
 
 
61
  """
62
  ),
63
  agent=experience_extractor_agent,
@@ -65,7 +72,8 @@ task_extract_experience = Task(
65
  expected_output=(
66
  "Un tableau JSON VALIDE d'objets 'Expérience Professionnelle' avec 5 clés par expérience : "
67
  "'Poste', 'Entreprise', 'start_date', 'end_date', 'responsabilités'. "
68
- "FORMAT EXACT: [{\"Poste\": \"titre\", \"Entreprise\": \"nom\", \"start_date\": \"année\", \"end_date\": \"année\", \"responsabilités\": [\"resp1\", \"resp2\"]}]"
 
69
  )
70
  )
71
 
@@ -73,20 +81,77 @@ task_extract_projects = Task(
73
  description=(
74
  "Voici le contenu du CV :\n\n{cv_content}\n\n"
75
  """
76
- Identifie et extrais les PROJETS SPÉCIFIQUES mentionnés dans le CV.
77
- Un projet est distinct d'une expérience professionnelle générale. Il a un nom ou un objectif clair.
78
-
79
- RÈGLES STRICTES :
80
- 1. NE PAS extraire les responsabilités générales d'un poste en tant que projet. Par exemple, si le CV dit "Alternant chez Enedis où j'ai mené le projet 'Simulateur IA'", alors extrais 'Simulateur IA' comme projet. Ne copie pas toutes les tâches de l'alternance.
81
- 2. Si un projet est clairement lié à une expérience professionnelle, essaie de le noter, mais le plus important est de décrire le projet lui-même.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  """
83
  ),
84
  agent=project_extractor_agent,
85
  input_keys=["cv_content"],
86
  expected_output=(
87
- "Un dictionnaire JSON VALIDE 'Projets' avec deux clés : 'professional' et 'personal'. "
88
- "Chaque clé contient une liste de dictionnaires, chaque dictionnaire représentant un projet avec les clés 'title', 'role', 'technologies', et 'outcomes'. "
89
- "FORMAT EXACT: {\"professional\": [{\"title\": \"titre\", \"role\": \"rôle\", \"technologies\": [\"tech1\"], \"outcomes\": [\"résultat1\"]}], \"personal\": []}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  )
91
  )
92
 
 
48
  description=(
49
  "Voici le contenu du CV :\n\n{cv_content}\n\n"
50
  """
51
+ Extrais UNIQUEMENT les expériences professionnelles du CV (emplois, stages, alternances).
52
+ Une expérience professionnelle est un POSTE occupé dans une entreprise/organisation.
53
+
54
+ Pour chaque expérience, tu DOIS fournir :
55
+ - Poste: Le titre du poste UNIQUEMENT (ex: "Développeur Full-Stack", "Stagiaire Data Analyst")
56
+ - Entreprise: Le nom de l'entreprise/organisation
57
+ - start_date: Date de début (format: "MM/YYYY" ou "YYYY")
58
+ - end_date: Date de fin ("Aujourd'hui" si actuel, sinon "MM/YYYY" ou "YYYY")
59
+ - responsabilités: Liste des missions GÉNÉRALES du poste (max 5 responsabilités)
60
 
61
  RÈGLES STRICTES :
62
+ 1. NE PAS extraire les projets spécifiques menés pendant l'expérience
63
+ 2. Les responsabilités doivent être générales : "Développement d'applications web", pas "Création du projet XYZ"
64
+ 3. Si tu vois "Alternant chez Enedis où j'ai mené le projet Simulateur IA",
65
+ - Expérience: Poste="Alternant", Entreprise="Enedis", responsabilités=["Développement de solutions IA"]
66
+ - Le "Simulateur IA" sera extrait comme projet séparément
67
+ 4. Utiliser "Non spécifié" si une information manque
68
  """
69
  ),
70
  agent=experience_extractor_agent,
 
72
  expected_output=(
73
  "Un tableau JSON VALIDE d'objets 'Expérience Professionnelle' avec 5 clés par expérience : "
74
  "'Poste', 'Entreprise', 'start_date', 'end_date', 'responsabilités'. "
75
+ "Les responsabilités doivent être GÉNÉRALES, pas des projets spécifiques. "
76
+ "FORMAT EXACT: [{\"Poste\": \"titre\", \"Entreprise\": \"nom\", \"start_date\": \"MM/YYYY\", \"end_date\": \"MM/YYYY\", \"responsabilités\": [\"mission1\", \"mission2\"]}]"
77
  )
78
  )
79
 
 
81
  description=(
82
  "Voici le contenu du CV :\n\n{cv_content}\n\n"
83
  """
84
+ Identifie et extrais UNIQUEMENT les PROJETS SPÉCIFIQUES avec un nom/titre clair.
85
+
86
+ CRITÈRES D'UN PROJET :
87
+ - A un nom/titre spécifique (ex: "Simulateur IA", "Application E-commerce", "Site web portfolio")
88
+ - Décrit une réalisation concrète et délimitée dans le temps
89
+ - Peut être professionnel (dans le cadre du travail) ou personnel (side project, formation)
90
+
91
+ RÈGLES STRICTES DE CLASSIFICATION :
92
+ 1. PROJETS PROFESSIONNELS : Projets menés dans le cadre d'un emploi/stage
93
+ - "Développement du simulateur IA chez Enedis"
94
+ - "Création d'un dashboard analytics pour l'équipe"
95
+
96
+ 2. PROJETS PERSONNELS : Projets auto-initiés ou de formation
97
+ - "Site web portfolio personnel"
98
+ - "Application mobile de gestion de tâches"
99
+ - "Projet final de formation : API REST"
100
+
101
+ 3. NE PAS EXTRAIRE :
102
+ - Les responsabilités générales ("maintenance du code", "développement web")
103
+ - Les compétences techniques seules ("Python", "React")
104
+ - Les tâches quotidiennes d'un poste
105
+
106
+ Pour chaque projet identifié :
107
+ - title: Nom exact du projet
108
+ - role: Rôle spécifique dans ce projet (ex: "Développeur principal", "Chef de projet", "Contributeur")
109
+ - technologies: Technologies/outils utilisés spécifiquement pour ce projet
110
+ - outcomes: Résultats/livrables concrets du projet
111
+ - context: (NOUVEAU) "professional" ou "personal" selon le contexte
112
  """
113
  ),
114
  agent=project_extractor_agent,
115
  input_keys=["cv_content"],
116
  expected_output=(
117
+ "Un dictionnaire JSON VALIDE avec les clés 'professional' et 'personal'. "
118
+ "Chaque projet doit avoir un NOM SPÉCIFIQUE et être clairement délimité. "
119
+ "FORMAT EXACT: {"
120
+ "\"professional\": ["
121
+ "{\"title\": \"Simulateur IA\", \"role\": \"Développeur principal\", \"technologies\": [\"Python\", \"TensorFlow\"], \"outcomes\": [\"Réduction de 30% du temps de calcul\"], \"context\": \"Projet mené chez Enedis\"}"
122
+ "], "
123
+ "\"personal\": ["
124
+ "{\"title\": \"Portfolio Web\", \"role\": \"Créateur\", \"technologies\": [\"React\", \"Node.js\"], \"outcomes\": [\"Site responsive déployé\"], \"context\": \"Projet personnel\"}"
125
+ "]"
126
+ "}"
127
+ )
128
+ )
129
+
130
+ validation_agent = Agent(
131
+ role="Validateur de Séparation Projets/Expériences",
132
+ goal="Vérifier que les projets et expériences sont correctement séparés et cohérents",
133
+ backstory=(
134
+ "Vous êtes un expert en structuration de données CV. Votre mission est de valider "
135
+ "que les expériences professionnelles ne contiennent pas de projets spécifiques, "
136
+ "et que les projets extraits sont bien des réalisations concrètes avec un nom précis."
137
+ ),
138
+ verbose=False,
139
+ llm=LLM_agent
140
+ )
141
+
142
+ task_validate_separation = Task(
143
+ description=(
144
+ "Analyse les résultats des extractions précédentes pour détecter et corriger :"
145
+ "1. Les projets spécifiques mentionnés dans les responsabilités d'expériences"
146
+ "2. Les responsabilités générales classées comme projets"
147
+ "3. Les doublons entre expériences et projets"
148
+ "4. Les projets mal classifiés (professionnel vs personnel)"
149
+ ),
150
+ agent=validation_agent,
151
+ context=[task_extract_experience, task_extract_projects],
152
+ expected_output=(
153
+ "Un dictionnaire JSON avec 'validated_experiences' et 'validated_projects' "
154
+ "corrigeant les erreurs de classification détectées."
155
  )
156
  )
157