Exercices IA & Data Science Routage conditionnel LangGraph
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Routage conditionnel LangGraph

La vraie puissance de LangGraph, c'est les transitions conditionnelles. Au lieu d'un pipeline lineaire, tu peux diriger le flux vers differents noeuds selon le contenu du state. C'est comme un aiguillage de train.

Pour ca, tu utilises add_conditional_edges :

def router(state):
if state["score"] > 0.8:
return "bon"
return "mauvais"

graph.add_conditional_edges(
"evaluer", # noeud source
router, # fonction de routage
{"bon": "valider", "mauvais": "corriger"} # mapping
)

La fonction router recoit le state et renvoie une string qui correspond a une clé du mapping. Cette clé pointe vers le noeud suivant.

Écris une fonction build_classifier() qui crée un graphe avec :

State : text (str), category (str), confidence (float)

Noeuds :
- "analyser" : si le texte contient "erreur" ou "bug", met category a "technique" et confidence a 0.9, sinon met category a "general" et confidence a 0.5
- "traitement_technique" : ajoute " [TECH]" a la fin du texte
- "traitement_general" : ajoute " [GEN]" a la fin du texte

Routing : apres "analyser", si category est "technique" on va a "traitement_technique", sinon a "traitement_general".

Les deux noeuds de traitement menent a END.

Exemple :

app = build_classifier()
r = app.invoke({"text": "j'ai un bug", "category": "", "confidence": 0.0})
r["text"] vaut "j'ai un bug [TECH]"
r["category"] vaut "technique"

Tests (1/1)

Tests
app = build_classifier()
# Texte technique
r = app.invoke({'text': "j'ai un bug", 'category': '', 'confidence': 0.0})
assert r['category'] == 'technique', f'Doit detecter technique, got {r["category"]}'
assert r['text'].endswith(' [TECH]'), f'Doit ajouter [TECH], got {r["text"]}'
assert r['confidence'] == 0.9, f'Confidence doit etre 0.9, got {r["confidence"]}'
# Texte avec erreur
r2 = app.invoke({'text': 'une erreur est survenue', 'category': '', 'confidence': 0.0})
assert r2['category'] == 'technique'
assert r2['text'].endswith(' [TECH]')
# Texte general
r3 = app.invoke({'text': 'bonjour comment vas-tu', 'category': '', 'confidence': 0.0})
assert r3['category'] == 'general', f'Doit detecter general, got {r3["category"]}'
assert r3['text'].endswith(' [GEN]'), f'Doit ajouter [GEN], got {r3["text"]}'
assert r3['confidence'] == 0.5

Indices (3 disponibles)

solution.py