Un agent de recherche fiable sépare planification, collecte et rédaction. LangGraph rend cette boucle explicite et permet de limiter le nombre de recherches, de conserver les sources et d’interrompre une exécution.
Installer et définir l’état
~~~bash pip install -U langgraph langchain-core ~~~
~~~python from typing import TypedDict
class ResearchState(TypedDict): question: str queries: list[str] sources: list[dict] answer: str iteration: int ~~~
Les résultats de recherche sont des données non fiables. Ils ne doivent jamais être interprétés comme des instructions système.
Créer les nœuds
~~~python def plan(state: ResearchState): return {'queries': build_queries(state['question']), 'iteration': 0}
def search(state: ResearchState): collected = [] for query in state['queries'][:3]: collected.extend(search_provider(query, limit=5)) return {'sources': deduplicate(collected), 'iteration': state['iteration'] + 1}
def write(state: ResearchState): approved = [s for s in state['sources'] if source_is_usable(s)] return {'answer': synthesize(state['question'], approved)} ~~~
Chaque source doit conserver titre, URL, date, éditeur et extrait utilisé. La synthèse doit citer les URL correspondant réellement aux affirmations.
Assembler le graphe
~~~python from langgraph.graph import StateGraph, START, END
graph = StateGraph(ResearchState) graph.add_node('plan', plan) graph.add_node('search', search) graph.add_node('write', write) graph.add_edge(START, 'plan') graph.add_edge('plan', 'search') graph.add_edge('search', 'write') graph.add_edge('write', END) app = graph.compile() ~~~
Commencez par ce flux déterministe. Ajoutez une boucle seulement si une fonction de contrôle peut prouver qu’il manque une information. Fixez toujours un maximum d’itérations et un budget d’appels.
Contrôler la qualité
Rejetez les pages sans auteur ou date lorsque ces éléments sont essentiels. Pour un sujet récent, comparez date de publication et date de l’événement. Demandez au rédacteur de distinguer fait sourcé, citation courte et inférence.
Tester
Remplacez le fournisseur de recherche par un faux renvoyant des résultats connus. Vérifiez déduplication, limite de requêtes, URLs citées et comportement quand aucune source n’est suffisante.
Production
Ajoutez persistance des checkpoints, timeout par outil, cache des pages, filtrage des domaines et observabilité des étapes. Une validation humaine reste adaptée avant publication ou pour une décision sensible.
FAQ
Pourquoi ne pas laisser l’agent boucler librement ?
Une boucle ouverte augmente coût et risque sans garantir la qualité. Le critère d’arrêt doit être mesurable.
Le moteur de recherche suffit-il comme source ?
Non. Utilisez ses résultats pour trouver les pages, puis vérifiez le contenu des sources primaires.