[{"data":1,"prerenderedAt":1198},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Fai\u002Forchestration-multi-agent-llm":13},{"i18nKey":4,"paths":5},"ai-008-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fai\u002Fmulti-agent-orchestrierung-llm-anwendungen","\u002Fen\u002Fai\u002Fmulti-agent-orchestration-from-single-llm-call-to-systems","\u002Fes\u002Fai\u002Forquestacion-de-multiples-agentes","\u002Ffr\u002Fai\u002Forchestration-multi-agent-llm","\u002Fit\u002Fai\u002Forchestrazione-multi-agent-dalle-chiamate-llm-ai-sistemi","\u002Fru\u002Fai\u002Forkestratsiya-multi-agent-ot-odnogo-vyzova-llm-k-sistemam","\u002Ftr\u002Fai\u002Fmulti-agent-orchestration-tek-llm-cagrisindan-sistemlere",{"_path":9,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":1192,"_id":1193,"_source":1194,"_file":1195,"_stem":1196,"_extension":1197},"ai",false,"","Orchestration Multi-Agent : Des Systèmes Depuis un Seul Appel LLM","SDK Agent, utilisation d'outils et topologies parallèles\u002Fsérielles pour déployer les applications LLM en production. Compromis entre coût token, latence et isolation des erreurs.","2026-06-13",[21,22,23,24,25],"multi-agent","orchestration-llm","utilisation-outils","sdk-agent","ia-production",8,"Roibase",{"type":29,"children":30,"toc":1182},"root",[31,39,46,68,89,110,116,150,185,198,205,310,316,328,355,375,388,394,420,425,456,462,467,493,498,504,509,896,901,1157,1162,1176],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Un seul prompt LLM suffisait il y a quelques mois. Aujourd'hui, les systèmes en production exigent des topologies d'agents parallèles, des sorties structurées et des chaînes de secours. Le Computer Use d'Anthropic, le function calling d'OpenAI et le support des state machines de LangGraph ont porté l'orchestration d'agents au niveau du framework. L'architecture multi-agent n'est plus seulement de la recherche, c'est l'outillage quotidien des équipes de croissance. Réduire le coût token, contrôler la latence et isoler les défaillances rendent le passage d'un appel mono-agent à un système orchestré incontournable.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"sdk-agent-et-protocole-tool-use",[44],{"type":37,"value":45},"SDK Agent et Protocole Tool Use",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,58,60,66],{"type":37,"value":50},"Le schéma JSON de function calling d'OpenAI est devenu standard en 2023. Anthropic a étendu tool use avec Claude 3.5 : la réponse API retourne maintenant un bloc ",{"type":32,"tag":52,"props":53,"children":55},"code",{"className":54},[],[56],{"type":37,"value":57},"tool_use",{"type":37,"value":59},", tu exécutes et renvoies le résultat sous forme de ",{"type":32,"tag":52,"props":61,"children":63},{"className":62},[],[64],{"type":37,"value":65},"tool_result",{"type":37,"value":67},". Cette boucle peut s'étendre sur 20+ itérations, mais la limite de tokens t'arrête. La syntaxe function declarations de Gemini est similaire, la différence résidant dans le grounding et les extensions de retrieval. Les trois fournisseurs partagent le même pattern : le modèle reçoit un descripteur de fonction, retourne le nom de la fonction + arguments, l'exécution est de ton côté.",{"type":32,"tag":33,"props":69,"children":70},{},[71,73,79,81,87],{"type":37,"value":72},"Les SDK Agent abstraient cette boucle. L'",{"type":32,"tag":52,"props":74,"children":76},{"className":75},[],[77],{"type":37,"value":78},"AgentExecutor",{"type":37,"value":80}," de LangChain, l'",{"type":32,"tag":52,"props":82,"children":84},{"className":83},[],[85],{"type":37,"value":86},"ReActAgent",{"type":37,"value":88}," de LlamaIndex, le moteur central d'AutoGPT — tous résolvent le même problème : gérer la séquence d'appels d'outils. Mais les abstractions créent une surcharge token. Par exemple, LangChain envoie l'historique de conversation en préfixe à chaque itération. 10 appels d'outils = 10× context window. Pour réduire cela, il faut un agent de summarisation ou une pruning contextuelle sélective. En production, sans une couche d'observabilité comme LangSmith, le débogage est impossible.",{"type":32,"tag":33,"props":90,"children":91},{},[92,94,100,102,108],{"type":37,"value":93},"Le protocole tool use n'est pas déterministe — le modèle hallucine parfois, donne des arguments de fonction incorrects. C'est pourquoi une couche de validation est obligatoire : valide l'entrée avec un schéma Pydantic, capture les exceptions à l'exécution, retourne un message d'erreur au modèle. Chez LangChain, ",{"type":32,"tag":52,"props":95,"children":97},{"className":96},[],[98],{"type":37,"value":99},"PydanticOutputParser",{"type":37,"value":101},", chez Anthropic, le paramètre ",{"type":32,"tag":52,"props":103,"children":105},{"className":104},[],[106],{"type":37,"value":107},"tool_choice=\"required\"",{"type":37,"value":109}," réduit ce risque. Mais le vrai problème : le modèle ne sélectionne pas toujours le bon outil. Avec 3-4 outils similaires, les sélections erronées surviennent à 8-12%. Dans ce cas, tu ajoutes une logique de retry ou un agent de routage.",{"type":32,"tag":40,"props":111,"children":113},{"id":112},"topologie-agent-parallèle-vs-sérielle",[114],{"type":37,"value":115},"Topologie Agent Parallèle vs Sérielle",{"type":32,"tag":33,"props":117,"children":118},{},[119,121,127,129,134,136,141,143,148],{"type":37,"value":120},"Pourquoi deux agents feraient ce qu'un seul ne peut pas ? Parce que la ",{"type":32,"tag":122,"props":123,"children":124},"strong",{},[125],{"type":37,"value":126},"spécialisation",{"type":37,"value":128}," améliore l'efficacité token. Scénario exemple : courrier entrant → catégoriser → rédiger réponse → obtenir approbation. Un prompt monolithique utilise 8K tokens de contexte, répète la même instruction pour chaque e-mail. Divise cela en 3 agents : ",{"type":32,"tag":122,"props":130,"children":131},{},[132],{"type":37,"value":133},"classifier",{"type":37,"value":135}," (catégoriser), ",{"type":32,"tag":122,"props":137,"children":138},{},[139],{"type":37,"value":140},"drafter",{"type":37,"value":142}," (rédiger réponse), ",{"type":32,"tag":122,"props":144,"children":145},{},[146],{"type":37,"value":147},"validator",{"type":37,"value":149}," (logique d'approbation). Chacun a son petit prompt. Total tokens : 8K → 2K+2K+1.5K = 5.5K. Baisse de 31%.",{"type":32,"tag":33,"props":151,"children":152},{},[153,155,160,162,168,170,176,178,183],{"type":37,"value":154},"La topologie parallèle offre un autre avantage : ",{"type":32,"tag":122,"props":156,"children":157},{},[158],{"type":37,"value":159},"réduction de latence",{"type":37,"value":161},". Exemple : pipeline de génération de contenu — un agent analyse les mots-clés SEO, un autre parse le guide de ton et style, un troisième scrape le contenu concurrent. En sériel, tu as 3× la latence. En parallèle (avec le ",{"type":32,"tag":52,"props":163,"children":165},{"className":164},[],[166],{"type":37,"value":167},"StateGraph",{"type":37,"value":169}," de LangGraph + nœud ",{"type":32,"tag":52,"props":171,"children":173},{"className":172},[],[174],{"type":37,"value":175},"map",{"type":37,"value":177},"), la latence max = celle de l'agent le plus lent. Mais la coordination devient plus difficile. La sortie de quel agent a la priorité ? S'il y a un conflit, qui décide ? C'est pourquoi un ",{"type":32,"tag":122,"props":179,"children":180},{},[181],{"type":37,"value":182},"agent arbitre",{"type":37,"value":184}," est nécessaire — couche méta qui reçoit les résultats parallèles et prend la décision finale.",{"type":32,"tag":33,"props":186,"children":187},{},[188,190,196],{"type":37,"value":189},"La topologie sérielle offre l'isolation des erreurs. Si l'agent A échoue, B et C ne s'exécutent pas. Tu peux construire une chaîne de secours : si A échoue, bascule à A2. En parallèle, il y a un scénario de défaillance partielle : 2 agents sur 3 réussissent, un timeout. Comment le système continue-t-il ? Là, il faut une logique state machine. Chez LangGraph, tu routes avec ",{"type":32,"tag":52,"props":191,"children":193},{"className":192},[],[194],{"type":37,"value":195},"conditional_edges",{"type":37,"value":197}," : si l'agent réussit, \"next\" (suivant), sinon \"retry\" (réessayer) ou \"fallback\" (secours).",{"type":32,"tag":199,"props":200,"children":202},"h3",{"id":201},"guide-de-choix-de-topologie",[203],{"type":37,"value":204},"Guide de Choix de Topologie",{"type":32,"tag":206,"props":207,"children":208},"table",{},[209,233],{"type":32,"tag":210,"props":211,"children":212},"thead",{},[213],{"type":32,"tag":214,"props":215,"children":216},"tr",{},[217,223,228],{"type":32,"tag":218,"props":219,"children":220},"th",{},[221],{"type":37,"value":222},"Scénario",{"type":32,"tag":218,"props":224,"children":225},{},[226],{"type":37,"value":227},"Topologie",{"type":32,"tag":218,"props":229,"children":230},{},[231],{"type":37,"value":232},"Raison",{"type":32,"tag":234,"props":235,"children":236},"tbody",{},[237,256,274,292],{"type":32,"tag":214,"props":238,"children":239},{},[240,246,251],{"type":32,"tag":241,"props":242,"children":243},"td",{},[244],{"type":37,"value":245},"Dépendance séquentielle (sortie de A = entrée de B)",{"type":32,"tag":241,"props":247,"children":248},{},[249],{"type":37,"value":250},"Sérielle",{"type":32,"tag":241,"props":252,"children":253},{},[254],{"type":37,"value":255},"Surcharge de coordination en parallèle",{"type":32,"tag":214,"props":257,"children":258},{},[259,264,269],{"type":32,"tag":241,"props":260,"children":261},{},[262],{"type":37,"value":263},"Sous-tâches indépendantes",{"type":32,"tag":241,"props":265,"children":266},{},[267],{"type":37,"value":268},"Parallèle",{"type":32,"tag":241,"props":270,"children":271},{},[272],{"type":37,"value":273},"Réduction de latence",{"type":32,"tag":214,"props":275,"children":276},{},[277,282,287],{"type":32,"tag":241,"props":278,"children":279},{},[280],{"type":37,"value":281},"Risque d'échec élevé",{"type":32,"tag":241,"props":283,"children":284},{},[285],{"type":37,"value":286},"Sérielle + secours",{"type":32,"tag":241,"props":288,"children":289},{},[290],{"type":37,"value":291},"Isolation des défaillances",{"type":32,"tag":214,"props":293,"children":294},{},[295,300,305],{"type":32,"tag":241,"props":296,"children":297},{},[298],{"type":37,"value":299},"Coût token critique",{"type":32,"tag":241,"props":301,"children":302},{},[303],{"type":37,"value":304},"Hybride (fetch parallèle, process sériel)",{"type":32,"tag":241,"props":306,"children":307},{},[308],{"type":37,"value":309},"Collecte de données sans partage de contexte",{"type":32,"tag":40,"props":311,"children":313},{"id":312},"gestion-détat-et-pruning-contextuel",[314],{"type":37,"value":315},"Gestion d'État et Pruning Contextuel",{"type":32,"tag":33,"props":317,"children":318},{},[319,321,326],{"type":37,"value":320},"Le problème le plus critique d'un système multi-agent : ",{"type":32,"tag":122,"props":322,"children":323},{},[324],{"type":37,"value":325},"bloat d'état",{"type":37,"value":327},". Chaque agent conserve l'historique de conversation, le context window grandit à chaque itération. 10 agents × 5 itérations = 50 messages. Même le context window 200K de Claude peut être saturé. Résultat : latence augmente (le coût de calcul token est O(n²)), coût augmente, certains modèles timeout.",{"type":32,"tag":33,"props":329,"children":330},{},[331,333,338,340,345,347,353],{"type":37,"value":332},"Solution : ",{"type":32,"tag":122,"props":334,"children":335},{},[336],{"type":37,"value":337},"orchestration avec état",{"type":37,"value":339}," et ",{"type":32,"tag":122,"props":341,"children":342},{},[343],{"type":37,"value":344},"mémoire sélective",{"type":37,"value":346},". La fonctionnalité ",{"type":32,"tag":52,"props":348,"children":350},{"className":349},[],[351],{"type":37,"value":352},"checkpointing",{"type":37,"value":354}," de LangGraph écrit l'état dans un store externe (Redis, PostgreSQL). Chaque agent lit uniquement son contexte pertinent. Exemple : l'agent drafter voit la sortie du classifier, mais pas l'historique d'approbation du validator — sauf s'il en a besoin.",{"type":32,"tag":33,"props":356,"children":357},{},[358,360,365,367,373],{"type":37,"value":359},"Un autre pattern : ",{"type":32,"tag":122,"props":361,"children":362},{},[363],{"type":37,"value":364},"agent de summarisation",{"type":37,"value":366},". Il intervient tous les N itérations, réduit la conversation à 3-4 phrases. La ",{"type":32,"tag":52,"props":368,"children":370},{"className":369},[],[371],{"type":37,"value":372},"ConversationSummaryMemory",{"type":37,"value":374}," de LangChain fait ce travail mais attention : la summarisation elle-même exige un appel LLM, coût supplémentaire. C'est pourquoi le seuil de déclenchement doit être bien calibré. Dans notre pipeline production, on lance une summarisation tous les 12 itérations — au lieu de 200 tokens de contexte, on en garde 50, économie de 75%.",{"type":32,"tag":33,"props":376,"children":377},{},[378,380,386],{"type":37,"value":379},"Le pruning contextuel est une autre option : supprime les messages non pertinents. Exemple : la sortie du classifier est juste le label de catégorie, mais le modèle retourne aussi la chaîne de raisonnement entière. Avant d'envoyer au drafter, tu supprimes le raisonnement, ne gardes que le label. Chez LangChain, ",{"type":32,"tag":52,"props":381,"children":383},{"className":382},[],[384],{"type":37,"value":385},"MessagesPlaceholder",{"type":37,"value":387}," + fonction filter personnalisée le fait. C'est du travail manuel, mais ça réduit les tokens de 40-50%.",{"type":32,"tag":40,"props":389,"children":391},{"id":390},"fiabilité-et-observabilité-en-production",[392],{"type":37,"value":393},"Fiabilité et Observabilité en Production",{"type":32,"tag":33,"props":395,"children":396},{},[397,399,404,405,410,412,418],{"type":37,"value":398},"Un système multi-agent = N× la surface de défaillance. Un agent timeout, un autre reçoit un rate limit, un troisième hallucine. Pour gérer ce chaos, ",{"type":32,"tag":122,"props":400,"children":401},{},[402],{"type":37,"value":403},"circuit breaker",{"type":37,"value":339},{"type":32,"tag":122,"props":406,"children":407},{},[408],{"type":37,"value":409},"logique de retry",{"type":37,"value":411}," sont obligatoires. LangChain a un wrapper ",{"type":32,"tag":52,"props":413,"children":415},{"className":414},[],[416],{"type":37,"value":417},"RunnableRetry",{"type":37,"value":419},", mais si tu veux un contrôle granulaire, la bibliothèque Tenacity est plus flexible : backoff exponentiel, jitter, max attempts.",{"type":32,"tag":33,"props":421,"children":422},{},[423],{"type":37,"value":424},"Sans observabilité, tu ne peux pas déboguer. Des outils comme LangSmith, LangGraph Studio, Weights & Biases visualisent la trace de l'agent : quel agent a été appelé quand, ce qu'il a retourné, combien de tokens il a coûté. Dans notre stack, on utilise LangSmith + un exportateur Prometheus personnalisé : on affiche les métriques latence agent, décompte token, taux d'erreur sur Grafana. Seuil d'alerte : latence P95 >3s ou taux d'erreur >5%.",{"type":32,"tag":33,"props":426,"children":427},{},[428,430,435,437,446,448,454],{"type":37,"value":429},"Un autre problème production : ",{"type":32,"tag":122,"props":431,"children":432},{},[433],{"type":37,"value":434},"non-déterminisme",{"type":37,"value":436},". Même entrée, sortie différente — parce que le modèle est stochastique. Même avec temperature=0, l'infrastructure du fournisseur introduit de la variation. C'est pourquoi une ",{"type":32,"tag":438,"props":439,"children":443},"a",{"href":440,"rel":441},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Ffirstparty",[442],"nofollow",[444],{"type":37,"value":445},"architecture de données first-party",{"type":37,"value":447}," fiable est obligatoire : si l'entrée est structurée, la sortie est plus cohérente. De plus, un framework d'eval est requis : lance des tests de régression à chaque déploiement, mesure la qualité de sortie. Tu peux utiliser l'",{"type":32,"tag":52,"props":449,"children":451},{"className":450},[],[452],{"type":37,"value":453},"EvaluatorChain",{"type":37,"value":455}," de LangChain ou l'eval basée sur modèle d'Anthropic.",{"type":32,"tag":40,"props":457,"children":459},{"id":458},"optimisation-des-coûts-et-compromis",[460],{"type":37,"value":461},"Optimisation des Coûts et Compromis",{"type":32,"tag":33,"props":463,"children":464},{},[465],{"type":37,"value":466},"Un système multi-agent est cher. Un appel agent unique = 2K tokens = $0.006 (prix Claude Sonnet 3.5). La même tâche avec 3 agents : 3× appel API, 6K tokens total, $0.018. 3× le coût. Les scénarios qui justifient cela : réduire le contexte long (grand doc → chunk → process parallèle), spécialisation (chaque agent utilise un petit modèle, total moins cher), isolation des erreurs (risque de défaillance monolithe élevé).",{"type":32,"tag":33,"props":468,"children":469},{},[470,472,477,479,484,486,491],{"type":37,"value":471},"Façons de réduire le coût token : ",{"type":32,"tag":122,"props":473,"children":474},{},[475],{"type":37,"value":476},"distillation de modèle",{"type":37,"value":478}," (grand modèle fine-tune petit modèle, petit modèle en production), ",{"type":32,"tag":122,"props":480,"children":481},{},[482],{"type":37,"value":483},"caching",{"type":37,"value":485}," (même contexte retour = réponse en cache — le prompt caching d'Anthropic offre 90% de réduction), ",{"type":32,"tag":122,"props":487,"children":488},{},[489],{"type":37,"value":490},"traitement par batch",{"type":37,"value":492}," (au lieu de real-time, execution async, préfère modèle bon marché).",{"type":32,"tag":33,"props":494,"children":495},{},[496],{"type":37,"value":497},"Compromis latence vs coût : topologie parallèle réduit latence mais augmente coût. Tu peux paralléliser le critical path et sérialiser le non-critique. Exemple : user query → classifier en parallèle (réponse rapide), mais agent reporting en sériel (background job). Cette approche hybride maintient latence P95 \u003C2s tout en réduisant le coût de 35%.",{"type":32,"tag":40,"props":499,"children":501},{"id":500},"exemples-dorchestration-et-code",[502],{"type":37,"value":503},"Exemples d'Orchestration et Code",{"type":32,"tag":33,"props":505,"children":506},{},[507],{"type":37,"value":508},"Chaîne sérielle simple (LangChain) :",{"type":32,"tag":510,"props":511,"children":515},"pre",{"className":512,"code":513,"language":514,"meta":16,"style":16},"language-python shiki shiki-themes github-dark","from langchain.chains import LLMChain\nfrom langchain.prompts import PromptTemplate\nfrom langchain_anthropic import ChatAnthropic\n\nclassifier = LLMChain(\n    llm=ChatAnthropic(model=\"claude-3-5-sonnet\"),\n    prompt=PromptTemplate.from_template(\"Catégorise : {text}\")\n)\n\ndrafter = LLMChain(\n    llm=ChatAnthropic(model=\"claude-3-5-sonnet\"),\n    prompt=PromptTemplate.from_template(\"Rédige une réponse : {category}, {text}\")\n)\n\ncategory = classifier.run(text=user_input)\nresponse = drafter.run(category=category, text=user_input)\n","python",[516],{"type":32,"tag":52,"props":517,"children":518},{"__ignoreMap":16},[519,547,569,591,601,620,659,698,705,713,730,762,805,813,821,852],{"type":32,"tag":520,"props":521,"children":524},"span",{"class":522,"line":523},"line",1,[525,531,537,542],{"type":32,"tag":520,"props":526,"children":528},{"style":527},"--shiki-default:#F97583",[529],{"type":37,"value":530},"from",{"type":32,"tag":520,"props":532,"children":534},{"style":533},"--shiki-default:#E1E4E8",[535],{"type":37,"value":536}," langchain.chains ",{"type":32,"tag":520,"props":538,"children":539},{"style":527},[540],{"type":37,"value":541},"import",{"type":32,"tag":520,"props":543,"children":544},{"style":533},[545],{"type":37,"value":546}," LLMChain\n",{"type":32,"tag":520,"props":548,"children":550},{"class":522,"line":549},2,[551,555,560,564],{"type":32,"tag":520,"props":552,"children":553},{"style":527},[554],{"type":37,"value":530},{"type":32,"tag":520,"props":556,"children":557},{"style":533},[558],{"type":37,"value":559}," langchain.prompts ",{"type":32,"tag":520,"props":561,"children":562},{"style":527},[563],{"type":37,"value":541},{"type":32,"tag":520,"props":565,"children":566},{"style":533},[567],{"type":37,"value":568}," PromptTemplate\n",{"type":32,"tag":520,"props":570,"children":572},{"class":522,"line":571},3,[573,577,582,586],{"type":32,"tag":520,"props":574,"children":575},{"style":527},[576],{"type":37,"value":530},{"type":32,"tag":520,"props":578,"children":579},{"style":533},[580],{"type":37,"value":581}," langchain_anthropic ",{"type":32,"tag":520,"props":583,"children":584},{"style":527},[585],{"type":37,"value":541},{"type":32,"tag":520,"props":587,"children":588},{"style":533},[589],{"type":37,"value":590}," ChatAnthropic\n",{"type":32,"tag":520,"props":592,"children":594},{"class":522,"line":593},4,[595],{"type":32,"tag":520,"props":596,"children":598},{"emptyLinePlaceholder":597},true,[599],{"type":37,"value":600},"\n",{"type":32,"tag":520,"props":602,"children":604},{"class":522,"line":603},5,[605,610,615],{"type":32,"tag":520,"props":606,"children":607},{"style":533},[608],{"type":37,"value":609},"classifier ",{"type":32,"tag":520,"props":611,"children":612},{"style":527},[613],{"type":37,"value":614},"=",{"type":32,"tag":520,"props":616,"children":617},{"style":533},[618],{"type":37,"value":619}," LLMChain(\n",{"type":32,"tag":520,"props":621,"children":623},{"class":522,"line":622},6,[624,630,634,639,644,648,654],{"type":32,"tag":520,"props":625,"children":627},{"style":626},"--shiki-default:#FFAB70",[628],{"type":37,"value":629},"    llm",{"type":32,"tag":520,"props":631,"children":632},{"style":527},[633],{"type":37,"value":614},{"type":32,"tag":520,"props":635,"children":636},{"style":533},[637],{"type":37,"value":638},"ChatAnthropic(",{"type":32,"tag":520,"props":640,"children":641},{"style":626},[642],{"type":37,"value":643},"model",{"type":32,"tag":520,"props":645,"children":646},{"style":527},[647],{"type":37,"value":614},{"type":32,"tag":520,"props":649,"children":651},{"style":650},"--shiki-default:#9ECBFF",[652],{"type":37,"value":653},"\"claude-3-5-sonnet\"",{"type":32,"tag":520,"props":655,"children":656},{"style":533},[657],{"type":37,"value":658},"),\n",{"type":32,"tag":520,"props":660,"children":662},{"class":522,"line":661},7,[663,668,672,677,682,688,693],{"type":32,"tag":520,"props":664,"children":665},{"style":626},[666],{"type":37,"value":667},"    prompt",{"type":32,"tag":520,"props":669,"children":670},{"style":527},[671],{"type":37,"value":614},{"type":32,"tag":520,"props":673,"children":674},{"style":533},[675],{"type":37,"value":676},"PromptTemplate.from_template(",{"type":32,"tag":520,"props":678,"children":679},{"style":650},[680],{"type":37,"value":681},"\"Catégorise : ",{"type":32,"tag":520,"props":683,"children":685},{"style":684},"--shiki-default:#79B8FF",[686],{"type":37,"value":687},"{text}",{"type":32,"tag":520,"props":689,"children":690},{"style":650},[691],{"type":37,"value":692},"\"",{"type":32,"tag":520,"props":694,"children":695},{"style":533},[696],{"type":37,"value":697},")\n",{"type":32,"tag":520,"props":699,"children":700},{"class":522,"line":26},[701],{"type":32,"tag":520,"props":702,"children":703},{"style":533},[704],{"type":37,"value":697},{"type":32,"tag":520,"props":706,"children":708},{"class":522,"line":707},9,[709],{"type":32,"tag":520,"props":710,"children":711},{"emptyLinePlaceholder":597},[712],{"type":37,"value":600},{"type":32,"tag":520,"props":714,"children":716},{"class":522,"line":715},10,[717,722,726],{"type":32,"tag":520,"props":718,"children":719},{"style":533},[720],{"type":37,"value":721},"drafter ",{"type":32,"tag":520,"props":723,"children":724},{"style":527},[725],{"type":37,"value":614},{"type":32,"tag":520,"props":727,"children":728},{"style":533},[729],{"type":37,"value":619},{"type":32,"tag":520,"props":731,"children":733},{"class":522,"line":732},11,[734,738,742,746,750,754,758],{"type":32,"tag":520,"props":735,"children":736},{"style":626},[737],{"type":37,"value":629},{"type":32,"tag":520,"props":739,"children":740},{"style":527},[741],{"type":37,"value":614},{"type":32,"tag":520,"props":743,"children":744},{"style":533},[745],{"type":37,"value":638},{"type":32,"tag":520,"props":747,"children":748},{"style":626},[749],{"type":37,"value":643},{"type":32,"tag":520,"props":751,"children":752},{"style":527},[753],{"type":37,"value":614},{"type":32,"tag":520,"props":755,"children":756},{"style":650},[757],{"type":37,"value":653},{"type":32,"tag":520,"props":759,"children":760},{"style":533},[761],{"type":37,"value":658},{"type":32,"tag":520,"props":763,"children":765},{"class":522,"line":764},12,[766,770,774,778,783,788,793,797,801],{"type":32,"tag":520,"props":767,"children":768},{"style":626},[769],{"type":37,"value":667},{"type":32,"tag":520,"props":771,"children":772},{"style":527},[773],{"type":37,"value":614},{"type":32,"tag":520,"props":775,"children":776},{"style":533},[777],{"type":37,"value":676},{"type":32,"tag":520,"props":779,"children":780},{"style":650},[781],{"type":37,"value":782},"\"Rédige une réponse : ",{"type":32,"tag":520,"props":784,"children":785},{"style":684},[786],{"type":37,"value":787},"{category}",{"type":32,"tag":520,"props":789,"children":790},{"style":650},[791],{"type":37,"value":792},", ",{"type":32,"tag":520,"props":794,"children":795},{"style":684},[796],{"type":37,"value":687},{"type":32,"tag":520,"props":798,"children":799},{"style":650},[800],{"type":37,"value":692},{"type":32,"tag":520,"props":802,"children":803},{"style":533},[804],{"type":37,"value":697},{"type":32,"tag":520,"props":806,"children":808},{"class":522,"line":807},13,[809],{"type":32,"tag":520,"props":810,"children":811},{"style":533},[812],{"type":37,"value":697},{"type":32,"tag":520,"props":814,"children":816},{"class":522,"line":815},14,[817],{"type":32,"tag":520,"props":818,"children":819},{"emptyLinePlaceholder":597},[820],{"type":37,"value":600},{"type":32,"tag":520,"props":822,"children":824},{"class":522,"line":823},15,[825,830,834,839,843,847],{"type":32,"tag":520,"props":826,"children":827},{"style":533},[828],{"type":37,"value":829},"category ",{"type":32,"tag":520,"props":831,"children":832},{"style":527},[833],{"type":37,"value":614},{"type":32,"tag":520,"props":835,"children":836},{"style":533},[837],{"type":37,"value":838}," classifier.run(",{"type":32,"tag":520,"props":840,"children":841},{"style":626},[842],{"type":37,"value":37},{"type":32,"tag":520,"props":844,"children":845},{"style":527},[846],{"type":37,"value":614},{"type":32,"tag":520,"props":848,"children":849},{"style":533},[850],{"type":37,"value":851},"user_input)\n",{"type":32,"tag":520,"props":853,"children":855},{"class":522,"line":854},16,[856,861,865,870,875,879,884,888,892],{"type":32,"tag":520,"props":857,"children":858},{"style":533},[859],{"type":37,"value":860},"response ",{"type":32,"tag":520,"props":862,"children":863},{"style":527},[864],{"type":37,"value":614},{"type":32,"tag":520,"props":866,"children":867},{"style":533},[868],{"type":37,"value":869}," drafter.run(",{"type":32,"tag":520,"props":871,"children":872},{"style":626},[873],{"type":37,"value":874},"category",{"type":32,"tag":520,"props":876,"children":877},{"style":527},[878],{"type":37,"value":614},{"type":32,"tag":520,"props":880,"children":881},{"style":533},[882],{"type":37,"value":883},"category, ",{"type":32,"tag":520,"props":885,"children":886},{"style":626},[887],{"type":37,"value":37},{"type":32,"tag":520,"props":889,"children":890},{"style":527},[891],{"type":37,"value":614},{"type":32,"tag":520,"props":893,"children":894},{"style":533},[895],{"type":37,"value":851},{"type":32,"tag":33,"props":897,"children":898},{},[899],{"type":37,"value":900},"Exécution parallèle (LangGraph) :",{"type":32,"tag":510,"props":902,"children":904},{"className":512,"code":903,"language":514,"meta":16,"style":16},"from langgraph.graph import StateGraph\n\ndef parallel_tasks(state):\n    seo_result = seo_agent.invoke(state[\"content\"])\n    tone_result = tone_agent.invoke(state[\"style_guide\"])\n    return {\"seo\": seo_result, \"tone\": tone_result}\n\nworkflow = StateGraph()\nworkflow.add_node(\"parallel\", parallel_tasks)\nworkflow.add_node(\"merge\", merge_agent)\nworkflow.set_entry_point(\"parallel\")\nworkflow.add_edge(\"parallel\", \"merge\")\napp = workflow.compile()\n",[905],{"type":32,"tag":52,"props":906,"children":907},{"__ignoreMap":16},[908,929,936,955,982,1008,1041,1048,1065,1083,1100,1116,1140],{"type":32,"tag":520,"props":909,"children":910},{"class":522,"line":523},[911,915,920,924],{"type":32,"tag":520,"props":912,"children":913},{"style":527},[914],{"type":37,"value":530},{"type":32,"tag":520,"props":916,"children":917},{"style":533},[918],{"type":37,"value":919}," langgraph.graph ",{"type":32,"tag":520,"props":921,"children":922},{"style":527},[923],{"type":37,"value":541},{"type":32,"tag":520,"props":925,"children":926},{"style":533},[927],{"type":37,"value":928}," StateGraph\n",{"type":32,"tag":520,"props":930,"children":931},{"class":522,"line":549},[932],{"type":32,"tag":520,"props":933,"children":934},{"emptyLinePlaceholder":597},[935],{"type":37,"value":600},{"type":32,"tag":520,"props":937,"children":938},{"class":522,"line":571},[939,944,950],{"type":32,"tag":520,"props":940,"children":941},{"style":527},[942],{"type":37,"value":943},"def",{"type":32,"tag":520,"props":945,"children":947},{"style":946},"--shiki-default:#B392F0",[948],{"type":37,"value":949}," parallel_tasks",{"type":32,"tag":520,"props":951,"children":952},{"style":533},[953],{"type":37,"value":954},"(state):\n",{"type":32,"tag":520,"props":956,"children":957},{"class":522,"line":593},[958,963,967,972,977],{"type":32,"tag":520,"props":959,"children":960},{"style":533},[961],{"type":37,"value":962},"    seo_result ",{"type":32,"tag":520,"props":964,"children":965},{"style":527},[966],{"type":37,"value":614},{"type":32,"tag":520,"props":968,"children":969},{"style":533},[970],{"type":37,"value":971}," seo_agent.invoke(state[",{"type":32,"tag":520,"props":973,"children":974},{"style":650},[975],{"type":37,"value":976},"\"content\"",{"type":32,"tag":520,"props":978,"children":979},{"style":533},[980],{"type":37,"value":981},"])\n",{"type":32,"tag":520,"props":983,"children":984},{"class":522,"line":603},[985,990,994,999,1004],{"type":32,"tag":520,"props":986,"children":987},{"style":533},[988],{"type":37,"value":989},"    tone_result ",{"type":32,"tag":520,"props":991,"children":992},{"style":527},[993],{"type":37,"value":614},{"type":32,"tag":520,"props":995,"children":996},{"style":533},[997],{"type":37,"value":998}," tone_agent.invoke(state[",{"type":32,"tag":520,"props":1000,"children":1001},{"style":650},[1002],{"type":37,"value":1003},"\"style_guide\"",{"type":32,"tag":520,"props":1005,"children":1006},{"style":533},[1007],{"type":37,"value":981},{"type":32,"tag":520,"props":1009,"children":1010},{"class":522,"line":622},[1011,1016,1021,1026,1031,1036],{"type":32,"tag":520,"props":1012,"children":1013},{"style":527},[1014],{"type":37,"value":1015},"    return",{"type":32,"tag":520,"props":1017,"children":1018},{"style":533},[1019],{"type":37,"value":1020}," {",{"type":32,"tag":520,"props":1022,"children":1023},{"style":650},[1024],{"type":37,"value":1025},"\"seo\"",{"type":32,"tag":520,"props":1027,"children":1028},{"style":533},[1029],{"type":37,"value":1030},": seo_result, ",{"type":32,"tag":520,"props":1032,"children":1033},{"style":650},[1034],{"type":37,"value":1035},"\"tone\"",{"type":32,"tag":520,"props":1037,"children":1038},{"style":533},[1039],{"type":37,"value":1040},": tone_result}\n",{"type":32,"tag":520,"props":1042,"children":1043},{"class":522,"line":661},[1044],{"type":32,"tag":520,"props":1045,"children":1046},{"emptyLinePlaceholder":597},[1047],{"type":37,"value":600},{"type":32,"tag":520,"props":1049,"children":1050},{"class":522,"line":26},[1051,1056,1060],{"type":32,"tag":520,"props":1052,"children":1053},{"style":533},[1054],{"type":37,"value":1055},"workflow ",{"type":32,"tag":520,"props":1057,"children":1058},{"style":527},[1059],{"type":37,"value":614},{"type":32,"tag":520,"props":1061,"children":1062},{"style":533},[1063],{"type":37,"value":1064}," StateGraph()\n",{"type":32,"tag":520,"props":1066,"children":1067},{"class":522,"line":707},[1068,1073,1078],{"type":32,"tag":520,"props":1069,"children":1070},{"style":533},[1071],{"type":37,"value":1072},"workflow.add_node(",{"type":32,"tag":520,"props":1074,"children":1075},{"style":650},[1076],{"type":37,"value":1077},"\"parallel\"",{"type":32,"tag":520,"props":1079,"children":1080},{"style":533},[1081],{"type":37,"value":1082},", parallel_tasks)\n",{"type":32,"tag":520,"props":1084,"children":1085},{"class":522,"line":715},[1086,1090,1095],{"type":32,"tag":520,"props":1087,"children":1088},{"style":533},[1089],{"type":37,"value":1072},{"type":32,"tag":520,"props":1091,"children":1092},{"style":650},[1093],{"type":37,"value":1094},"\"merge\"",{"type":32,"tag":520,"props":1096,"children":1097},{"style":533},[1098],{"type":37,"value":1099},", merge_agent)\n",{"type":32,"tag":520,"props":1101,"children":1102},{"class":522,"line":732},[1103,1108,1112],{"type":32,"tag":520,"props":1104,"children":1105},{"style":533},[1106],{"type":37,"value":1107},"workflow.set_entry_point(",{"type":32,"tag":520,"props":1109,"children":1110},{"style":650},[1111],{"type":37,"value":1077},{"type":32,"tag":520,"props":1113,"children":1114},{"style":533},[1115],{"type":37,"value":697},{"type":32,"tag":520,"props":1117,"children":1118},{"class":522,"line":764},[1119,1124,1128,1132,1136],{"type":32,"tag":520,"props":1120,"children":1121},{"style":533},[1122],{"type":37,"value":1123},"workflow.add_edge(",{"type":32,"tag":520,"props":1125,"children":1126},{"style":650},[1127],{"type":37,"value":1077},{"type":32,"tag":520,"props":1129,"children":1130},{"style":533},[1131],{"type":37,"value":792},{"type":32,"tag":520,"props":1133,"children":1134},{"style":650},[1135],{"type":37,"value":1094},{"type":32,"tag":520,"props":1137,"children":1138},{"style":533},[1139],{"type":37,"value":697},{"type":32,"tag":520,"props":1141,"children":1142},{"class":522,"line":807},[1143,1148,1152],{"type":32,"tag":520,"props":1144,"children":1145},{"style":533},[1146],{"type":37,"value":1147},"app ",{"type":32,"tag":520,"props":1149,"children":1150},{"style":527},[1151],{"type":37,"value":614},{"type":32,"tag":520,"props":1153,"children":1154},{"style":533},[1155],{"type":37,"value":1156}," workflow.compile()\n",{"type":32,"tag":33,"props":1158,"children":1159},{},[1160],{"type":37,"value":1161},"Ce code exécute 2 agents en parallèle, puis passe le résultat à un agent merge. LangGraph gère automatiquement l'état, écrit les checkpoints sur Redis.",{"type":32,"tag":33,"props":1163,"children":1164},{},[1165,1167,1174],{"type":37,"value":1166},"L'orchestration multi-agent n'est pas un but en soi, c'est un outil. Si tu automatises un autre canal de croissance ou construis un pipeline de décision, choisis une topologie agent, mais clarifie les métriques : token\u002Ftâche, latence, taux d'erreur. En production, le succès c'est que le système fonctionne avec 95% d'uptime et que le coût token reste dans le budget. Si tu construis un système multi-agent pour la génération de contenu, intègre-le à une stratégie d'",{"type":32,"tag":438,"props":1168,"children":1171},{"href":1169,"rel":1170},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Fgeo",[442],[1172],{"type":37,"value":1173},"Optimisation Moteur Générative",{"type":37,"value":1175}," — les agents collectent des données de citation, alimentent les métriques GEO, le ROI devient mesurable. Sinon, c'est juste un wrapper API compliqué.",{"type":32,"tag":1177,"props":1178,"children":1179},"style",{},[1180],{"type":37,"value":1181},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":571,"depth":571,"links":1183},[1184,1185,1188,1189,1190,1191],{"id":42,"depth":549,"text":45},{"id":112,"depth":549,"text":115,"children":1186},[1187],{"id":201,"depth":571,"text":204},{"id":312,"depth":549,"text":315},{"id":390,"depth":549,"text":393},{"id":458,"depth":549,"text":461},{"id":500,"depth":549,"text":503},"markdown","content:fr:ai:orchestration-multi-agent-llm.md","content","fr\u002Fai\u002Forchestration-multi-agent-llm.md","fr\u002Fai\u002Forchestration-multi-agent-llm","md",1782079493740]