Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Routing intelligent des questions
Un agent intelligent ne traite pas toutes les questions de la meme facon. "Combien font 15% de 250 ?" devrait aller directement a la calculatrice, sans passer par une recherche web. "Qui est le president actuel ?" necessite une recherche. "Ecris un poeme sur Python" peut aller directement au LLM. Et "Compare les prix de AWS et GCP" necessite une recherche ET une synthese.
Ce mecanisme de tri s'appelle le routing. C'est le dispatcheur de ton agent : il analyse la question et decide quel pipeline utiliser. Un bon routing reduit les couts (pas de recherche web pour un calcul), ameliore la vitesse (moins d'etapes), et augmente la precision (le bon outil pour le bon probleme).
On va implementer un routeur a deux niveaux : Niveau 1 : classification par mots-cles (rapide, gratuit, pas toujours precis) Niveau 2 : classification par LLM (plus precis, mais coute des tokens)
Ecris une fonction classifier_question(question, regles) qui prend une question et un dictionnaire de regles. Chaque cle est un type de question, et la valeur est une liste de mots-cles. La fonction renvoie le type de la question selon le premier mot-cle trouve (comparaison insensible a la casse). Si aucun mot-cle ne correspond, elle renvoie "general".
Ecris aussi une fonction router_vers_pipeline(question, regles, pipelines) qui prend la question, les regles de classification, et un dictionnaire de pipelines (chaque cle est un type, la valeur est une fonction qui prend la question et renvoie un resultat). Elle classifie la question, puis execute le bon pipeline. Si le type n'a pas de pipeline associe, elle utilise le pipeline "general".
regles = {"recherche": ["qui est"]}
pipelines = {
"recherche": lambda q: "recherche",
"general": lambda q: "general"
}
r = router_vers_pipeline("Quelle heure est-il ?", regles, pipelines)
assert r == "general", f"Sans correspondance, doit utiliser le pipeline general, pas {r}"
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
def classifier_question(question, regles):
question_lower = question.lower()
for type_question, mots_cles in regles.items():
for mot in mots_cles:
if mot.lower() in question_lower:
return type_question
return "general"
def router_vers_pipeline(question, regles, pipelines):
type_question = classifier_question(question, regles)
if type_question in pipelines:
return pipelines[type_question](question)
if "general" in pipelines:
return pipelines["general"](question)
return None