[{"data":1,"prerenderedAt":1682},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Fai\u002Fmulti-agent-orchestration-systemes-llm":13},{"i18nKey":4,"paths":5},"ai-008-2026-07",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fai\u002Fmulti-agent-orchestrierung-llm-aufrufe-systeme","\u002Fen\u002Fai\u002Fmulti-agent-orchestration-single-llm-call","\u002Fes\u002Fai\u002Forquestacion-multi-agente-llm","\u002Ffr\u002Fai\u002Forchestration-multi-agent-llm","\u002Fit\u002Fai\u002Forchestrazione-multi-agent-da-una-singola-chiamata-llm","\u002Fru\u002Fai\u002Fmulti-agent-orkestratsiya","\u002Ftr\u002Fai\u002Fmulti-agent-orchestration-tek-llm-cagrisindan-sistemlere",{"_path":14,"_dir":15,"_draft":16,"_partial":16,"_locale":17,"title":18,"description":19,"publishedAt":20,"modifiedAt":20,"category":15,"i18nKey":4,"tags":21,"readingTime":27,"author":28,"body":29,"_type":1676,"_id":1677,"_source":1678,"_file":1679,"_stem":1680,"_extension":1681},"\u002Ffr\u002Fai\u002Fmulti-agent-orchestration-systemes-llm","ai",false,"","Multi-Agent Orchestration : Des Systèmes via un Appel LLM Unique","Des SDK d'agents aux topologies parallèles\u002Fsérie : comment construire des systèmes multi-agents production-grade via LangGraph, CrewAI, AutoGen ?","2026-07-20",[22,23,24,25,26],"multi-agent","orchestration-llm","langgraph","crewai","topologie-agent",9,"Roibase",{"type":30,"children":31,"toc":1666},"root",[32,40,47,52,63,73,83,99,105,115,308,325,335,540,555,565,731,746,752,916,926,932,937,955,973,1089,1123,1156,1162,1167,1175,1228,1389,1395,1400,1410,1420,1437,1443,1448,1456,1490,1596,1602,1655,1660],{"type":33,"tag":34,"props":35,"children":36},"element","p",{},[37],{"type":38,"value":39},"text","En 2023, les LLM ont pu \"appeler des outils\". En 2024, le concept d'\"agent\" a émergé. En 2025, tout le monde construisait son propre agent. En 2026, la question a changé : un seul agent ne suffit pas, mais dois-je exécuter 5 agents en parallèle ou en série ? Lequel doit utiliser quel outil ? Où doit vivre la logique de coordination ? L'orchestration multi-agent est le premier problème d'ingénierie sérieuse dans la transition des applications LLM du \"Hello World\" à la production.",{"type":33,"tag":41,"props":42,"children":44},"h2",{"id":43},"du-single-agent-à-la-topologie-pourquoi-lorchestration",[45],{"type":38,"value":46},"Du Single Agent à la Topologie : Pourquoi l'Orchestration ?",{"type":33,"tag":34,"props":48,"children":49},{},[50],{"type":38,"value":51},"Un agent unique — par exemple Claude Sonnet 3.5 + 5 outils — résout de nombreux scénarios d'utilisation. Mais tu frapperas un mur dans ces situations :",{"type":33,"tag":34,"props":53,"children":54},{},[55,61],{"type":33,"tag":56,"props":57,"children":58},"strong",{},[59],{"type":38,"value":60},"Besoin de parallélisation :",{"type":38,"value":62}," Tu analysas une campagne marketing. En même temps, extrais les données de l'API Google Ads, calcule les tendances historiques dans BigQuery, récupère les données de conversion de Shopify. Un agent unique fait ces tâches séquentiellement — 12 secondes au total. 3 agents en parallèle terminent en 4,5 secondes. Si la latence est critique, l'orchestration est obligatoire.",{"type":33,"tag":34,"props":64,"children":65},{},[66,71],{"type":33,"tag":56,"props":67,"children":68},{},[69],{"type":38,"value":70},"Besoin de spécialisation :",{"type":38,"value":72}," Un agent écrit SQL, un autre nettoie les données, un troisième génère du code de visualisation. Tu donnes à chaque agent un system prompt différent, un modèle différent (Sonnet pour SQL, Opus pour le code), un contexte de retrieval différent. Si tu dis au même agent \"maîtrise SQL et la conception visuelle\", la context window gonfle et les performances chutent.",{"type":33,"tag":34,"props":74,"children":75},{},[76,81],{"type":33,"tag":56,"props":77,"children":78},{},[79],{"type":38,"value":80},"Couches de sécurité :",{"type":38,"value":82}," Un agent nettoie le prompt entrant, un autre exécute la logique métier, un troisième valide la sortie. Cette structure \"chaîne d'assemblage\" est critique en production : l'orchestration est obligatoire pour réduire le risque de passer des paramètres erronés dans les appels d'outils.",{"type":33,"tag":34,"props":84,"children":85},{},[86,88,97],{"type":38,"value":87},"Dans les projets ",{"type":33,"tag":89,"props":90,"children":94},"a",{"href":91,"rel":92},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Fverianalizi",[93],"nofollow",[95],{"type":38,"value":96},"Analyse des Données & Ingénierie des Insights",{"type":38,"value":98}," chez Roibase, nous avons réduit de 60 % les temps de requête BigQuery via une structure d'agent parallèle — car 3 sources de données différentes peuvent être interrogées simultanément.",{"type":33,"tag":41,"props":100,"children":102},{"id":101},"sdk-dagents-langgraph-crewai-autogen",[103],{"type":38,"value":104},"SDK d'Agents : LangGraph, CrewAI, AutoGen",{"type":33,"tag":34,"props":106,"children":107},{},[108,113],{"type":33,"tag":56,"props":109,"children":110},{},[111],{"type":38,"value":112},"LangGraph (écosystème LangChain) :",{"type":38,"value":114}," Tu définis les agents comme des nœuds dans une structure de graphe orienté. Chaque nœud maintient un \"state\", les arêtes définissent la logique de transition. Le routage conditionnel est possible : si l'agent A dit \"données manquantes\", va à B, sinon va à C.",{"type":33,"tag":116,"props":117,"children":121},"pre",{"className":118,"code":119,"language":120,"meta":17,"style":17},"language-python shiki shiki-themes github-dark","from langgraph.graph import StateGraph\n\nworkflow = StateGraph(AgentState)\nworkflow.add_node(\"researcher\", research_agent)\nworkflow.add_node(\"writer\", writer_agent)\nworkflow.add_conditional_edges(\n    \"researcher\",\n    lambda state: \"complete\" if state.data_ready else \"retry\"\n)\nworkflow.set_entry_point(\"researcher\")\n","python",[122],{"type":33,"tag":123,"props":124,"children":125},"code",{"__ignoreMap":17},[126,154,164,183,203,221,230,244,283,291],{"type":33,"tag":127,"props":128,"children":131},"span",{"class":129,"line":130},"line",1,[132,138,144,149],{"type":33,"tag":127,"props":133,"children":135},{"style":134},"--shiki-default:#F97583",[136],{"type":38,"value":137},"from",{"type":33,"tag":127,"props":139,"children":141},{"style":140},"--shiki-default:#E1E4E8",[142],{"type":38,"value":143}," langgraph.graph ",{"type":33,"tag":127,"props":145,"children":146},{"style":134},[147],{"type":38,"value":148},"import",{"type":33,"tag":127,"props":150,"children":151},{"style":140},[152],{"type":38,"value":153}," StateGraph\n",{"type":33,"tag":127,"props":155,"children":157},{"class":129,"line":156},2,[158],{"type":33,"tag":127,"props":159,"children":161},{"emptyLinePlaceholder":160},true,[162],{"type":38,"value":163},"\n",{"type":33,"tag":127,"props":165,"children":167},{"class":129,"line":166},3,[168,173,178],{"type":33,"tag":127,"props":169,"children":170},{"style":140},[171],{"type":38,"value":172},"workflow ",{"type":33,"tag":127,"props":174,"children":175},{"style":134},[176],{"type":38,"value":177},"=",{"type":33,"tag":127,"props":179,"children":180},{"style":140},[181],{"type":38,"value":182}," StateGraph(AgentState)\n",{"type":33,"tag":127,"props":184,"children":186},{"class":129,"line":185},4,[187,192,198],{"type":33,"tag":127,"props":188,"children":189},{"style":140},[190],{"type":38,"value":191},"workflow.add_node(",{"type":33,"tag":127,"props":193,"children":195},{"style":194},"--shiki-default:#9ECBFF",[196],{"type":38,"value":197},"\"researcher\"",{"type":33,"tag":127,"props":199,"children":200},{"style":140},[201],{"type":38,"value":202},", research_agent)\n",{"type":33,"tag":127,"props":204,"children":206},{"class":129,"line":205},5,[207,211,216],{"type":33,"tag":127,"props":208,"children":209},{"style":140},[210],{"type":38,"value":191},{"type":33,"tag":127,"props":212,"children":213},{"style":194},[214],{"type":38,"value":215},"\"writer\"",{"type":33,"tag":127,"props":217,"children":218},{"style":140},[219],{"type":38,"value":220},", writer_agent)\n",{"type":33,"tag":127,"props":222,"children":224},{"class":129,"line":223},6,[225],{"type":33,"tag":127,"props":226,"children":227},{"style":140},[228],{"type":38,"value":229},"workflow.add_conditional_edges(\n",{"type":33,"tag":127,"props":231,"children":233},{"class":129,"line":232},7,[234,239],{"type":33,"tag":127,"props":235,"children":236},{"style":194},[237],{"type":38,"value":238},"    \"researcher\"",{"type":33,"tag":127,"props":240,"children":241},{"style":140},[242],{"type":38,"value":243},",\n",{"type":33,"tag":127,"props":245,"children":247},{"class":129,"line":246},8,[248,253,258,263,268,273,278],{"type":33,"tag":127,"props":249,"children":250},{"style":134},[251],{"type":38,"value":252},"    lambda",{"type":33,"tag":127,"props":254,"children":255},{"style":140},[256],{"type":38,"value":257}," state: ",{"type":33,"tag":127,"props":259,"children":260},{"style":194},[261],{"type":38,"value":262},"\"complete\"",{"type":33,"tag":127,"props":264,"children":265},{"style":134},[266],{"type":38,"value":267}," if",{"type":33,"tag":127,"props":269,"children":270},{"style":140},[271],{"type":38,"value":272}," state.data_ready ",{"type":33,"tag":127,"props":274,"children":275},{"style":134},[276],{"type":38,"value":277},"else",{"type":33,"tag":127,"props":279,"children":280},{"style":194},[281],{"type":38,"value":282}," \"retry\"\n",{"type":33,"tag":127,"props":284,"children":285},{"class":129,"line":27},[286],{"type":33,"tag":127,"props":287,"children":288},{"style":140},[289],{"type":38,"value":290},")\n",{"type":33,"tag":127,"props":292,"children":294},{"class":129,"line":293},10,[295,300,304],{"type":33,"tag":127,"props":296,"children":297},{"style":140},[298],{"type":38,"value":299},"workflow.set_entry_point(",{"type":33,"tag":127,"props":301,"children":302},{"style":194},[303],{"type":38,"value":197},{"type":33,"tag":127,"props":305,"children":306},{"style":140},[307],{"type":38,"value":290},{"type":33,"tag":34,"props":309,"children":310},{},[311,316,318,323],{"type":33,"tag":56,"props":312,"children":313},{},[314],{"type":38,"value":315},"Avantages :",{"type":38,"value":317}," Gestion d'état robuste. Tracing distribué facile — chaque nœud a ses propres logs. ",{"type":33,"tag":56,"props":319,"children":320},{},[321],{"type":38,"value":322},"Inconvénients :",{"type":38,"value":324}," Syntaxe complexe, les chaînes de callbacks compliquent le debugging.",{"type":33,"tag":34,"props":326,"children":327},{},[328,333],{"type":33,"tag":56,"props":329,"children":330},{},[331],{"type":38,"value":332},"CrewAI :",{"type":38,"value":334}," Orchestration basée sur les rôles. Tu assigmes à chaque agent un \"role\" (researcher, analyst, writer) et une liste de \"tasks\". Le framework exécute automatiquement séquentiellement ou forke en parallèle.",{"type":33,"tag":116,"props":336,"children":338},{"className":118,"code":337,"language":120,"meta":17,"style":17},"from crewai import Crew, Agent, Task\n\nresearcher = Agent(role='Data Researcher', tools=[bigquery_tool])\nanalyst = Agent(role='Analyst', tools=[pandas_tool])\n\ncrew = Crew(agents=[researcher, analyst], process=\"sequential\")\nresult = crew.kickoff()\n",[339],{"type":33,"tag":123,"props":340,"children":341},{"__ignoreMap":17},[342,363,370,421,467,474,523],{"type":33,"tag":127,"props":343,"children":344},{"class":129,"line":130},[345,349,354,358],{"type":33,"tag":127,"props":346,"children":347},{"style":134},[348],{"type":38,"value":137},{"type":33,"tag":127,"props":350,"children":351},{"style":140},[352],{"type":38,"value":353}," crewai ",{"type":33,"tag":127,"props":355,"children":356},{"style":134},[357],{"type":38,"value":148},{"type":33,"tag":127,"props":359,"children":360},{"style":140},[361],{"type":38,"value":362}," Crew, Agent, Task\n",{"type":33,"tag":127,"props":364,"children":365},{"class":129,"line":156},[366],{"type":33,"tag":127,"props":367,"children":368},{"emptyLinePlaceholder":160},[369],{"type":38,"value":163},{"type":33,"tag":127,"props":371,"children":372},{"class":129,"line":166},[373,378,382,387,393,397,402,407,412,416],{"type":33,"tag":127,"props":374,"children":375},{"style":140},[376],{"type":38,"value":377},"researcher ",{"type":33,"tag":127,"props":379,"children":380},{"style":134},[381],{"type":38,"value":177},{"type":33,"tag":127,"props":383,"children":384},{"style":140},[385],{"type":38,"value":386}," Agent(",{"type":33,"tag":127,"props":388,"children":390},{"style":389},"--shiki-default:#FFAB70",[391],{"type":38,"value":392},"role",{"type":33,"tag":127,"props":394,"children":395},{"style":134},[396],{"type":38,"value":177},{"type":33,"tag":127,"props":398,"children":399},{"style":194},[400],{"type":38,"value":401},"'Data Researcher'",{"type":33,"tag":127,"props":403,"children":404},{"style":140},[405],{"type":38,"value":406},", ",{"type":33,"tag":127,"props":408,"children":409},{"style":389},[410],{"type":38,"value":411},"tools",{"type":33,"tag":127,"props":413,"children":414},{"style":134},[415],{"type":38,"value":177},{"type":33,"tag":127,"props":417,"children":418},{"style":140},[419],{"type":38,"value":420},"[bigquery_tool])\n",{"type":33,"tag":127,"props":422,"children":423},{"class":129,"line":185},[424,429,433,437,441,445,450,454,458,462],{"type":33,"tag":127,"props":425,"children":426},{"style":140},[427],{"type":38,"value":428},"analyst ",{"type":33,"tag":127,"props":430,"children":431},{"style":134},[432],{"type":38,"value":177},{"type":33,"tag":127,"props":434,"children":435},{"style":140},[436],{"type":38,"value":386},{"type":33,"tag":127,"props":438,"children":439},{"style":389},[440],{"type":38,"value":392},{"type":33,"tag":127,"props":442,"children":443},{"style":134},[444],{"type":38,"value":177},{"type":33,"tag":127,"props":446,"children":447},{"style":194},[448],{"type":38,"value":449},"'Analyst'",{"type":33,"tag":127,"props":451,"children":452},{"style":140},[453],{"type":38,"value":406},{"type":33,"tag":127,"props":455,"children":456},{"style":389},[457],{"type":38,"value":411},{"type":33,"tag":127,"props":459,"children":460},{"style":134},[461],{"type":38,"value":177},{"type":33,"tag":127,"props":463,"children":464},{"style":140},[465],{"type":38,"value":466},"[pandas_tool])\n",{"type":33,"tag":127,"props":468,"children":469},{"class":129,"line":205},[470],{"type":33,"tag":127,"props":471,"children":472},{"emptyLinePlaceholder":160},[473],{"type":38,"value":163},{"type":33,"tag":127,"props":475,"children":476},{"class":129,"line":223},[477,482,486,491,496,500,505,510,514,519],{"type":33,"tag":127,"props":478,"children":479},{"style":140},[480],{"type":38,"value":481},"crew ",{"type":33,"tag":127,"props":483,"children":484},{"style":134},[485],{"type":38,"value":177},{"type":33,"tag":127,"props":487,"children":488},{"style":140},[489],{"type":38,"value":490}," Crew(",{"type":33,"tag":127,"props":492,"children":493},{"style":389},[494],{"type":38,"value":495},"agents",{"type":33,"tag":127,"props":497,"children":498},{"style":134},[499],{"type":38,"value":177},{"type":33,"tag":127,"props":501,"children":502},{"style":140},[503],{"type":38,"value":504},"[researcher, analyst], ",{"type":33,"tag":127,"props":506,"children":507},{"style":389},[508],{"type":38,"value":509},"process",{"type":33,"tag":127,"props":511,"children":512},{"style":134},[513],{"type":38,"value":177},{"type":33,"tag":127,"props":515,"children":516},{"style":194},[517],{"type":38,"value":518},"\"sequential\"",{"type":33,"tag":127,"props":520,"children":521},{"style":140},[522],{"type":38,"value":290},{"type":33,"tag":127,"props":524,"children":525},{"class":129,"line":232},[526,531,535],{"type":33,"tag":127,"props":527,"children":528},{"style":140},[529],{"type":38,"value":530},"result ",{"type":33,"tag":127,"props":532,"children":533},{"style":134},[534],{"type":38,"value":177},{"type":33,"tag":127,"props":536,"children":537},{"style":140},[538],{"type":38,"value":539}," crew.kickoff()\n",{"type":33,"tag":34,"props":541,"children":542},{},[543,547,549,553],{"type":33,"tag":56,"props":544,"children":545},{},[546],{"type":38,"value":315},{"type":38,"value":548}," Boilerplate minimal, prototypage rapide. ",{"type":33,"tag":56,"props":550,"children":551},{},[552],{"type":38,"value":322},{"type":38,"value":554}," Flexibilité réduite — le routage personnalisé requiert des modifications de code.",{"type":33,"tag":34,"props":556,"children":557},{},[558,563],{"type":33,"tag":56,"props":559,"children":560},{},[561],{"type":38,"value":562},"AutoGen (Microsoft) :",{"type":38,"value":564}," Multi-agent conversationnel. Les agents \"parlent\" les uns aux autres, un agent envoie un message à un autre, qui répond. Dans ce pattern, l'orchestration est implicite — le flux de messages détermine la topologie.",{"type":33,"tag":116,"props":566,"children":568},{"className":118,"code":567,"language":120,"meta":17,"style":17},"from autogen import AssistantAgent, UserProxyAgent\n\nassistant = AssistantAgent(\"assistant\", llm_config={...})\nuser_proxy = UserProxyAgent(\"user\", code_execution_config={...})\n\nuser_proxy.initiate_chat(assistant, message=\"Analyze Q1 data\")\n",[569],{"type":33,"tag":123,"props":570,"children":571},{"__ignoreMap":17},[572,593,600,651,698,705],{"type":33,"tag":127,"props":573,"children":574},{"class":129,"line":130},[575,579,584,588],{"type":33,"tag":127,"props":576,"children":577},{"style":134},[578],{"type":38,"value":137},{"type":33,"tag":127,"props":580,"children":581},{"style":140},[582],{"type":38,"value":583}," autogen ",{"type":33,"tag":127,"props":585,"children":586},{"style":134},[587],{"type":38,"value":148},{"type":33,"tag":127,"props":589,"children":590},{"style":140},[591],{"type":38,"value":592}," AssistantAgent, UserProxyAgent\n",{"type":33,"tag":127,"props":594,"children":595},{"class":129,"line":156},[596],{"type":33,"tag":127,"props":597,"children":598},{"emptyLinePlaceholder":160},[599],{"type":38,"value":163},{"type":33,"tag":127,"props":601,"children":602},{"class":129,"line":166},[603,608,612,617,622,626,631,635,640,646],{"type":33,"tag":127,"props":604,"children":605},{"style":140},[606],{"type":38,"value":607},"assistant ",{"type":33,"tag":127,"props":609,"children":610},{"style":134},[611],{"type":38,"value":177},{"type":33,"tag":127,"props":613,"children":614},{"style":140},[615],{"type":38,"value":616}," AssistantAgent(",{"type":33,"tag":127,"props":618,"children":619},{"style":194},[620],{"type":38,"value":621},"\"assistant\"",{"type":33,"tag":127,"props":623,"children":624},{"style":140},[625],{"type":38,"value":406},{"type":33,"tag":127,"props":627,"children":628},{"style":389},[629],{"type":38,"value":630},"llm_config",{"type":33,"tag":127,"props":632,"children":633},{"style":134},[634],{"type":38,"value":177},{"type":33,"tag":127,"props":636,"children":637},{"style":140},[638],{"type":38,"value":639},"{",{"type":33,"tag":127,"props":641,"children":643},{"style":642},"--shiki-default:#79B8FF",[644],{"type":38,"value":645},"...",{"type":33,"tag":127,"props":647,"children":648},{"style":140},[649],{"type":38,"value":650},"})\n",{"type":33,"tag":127,"props":652,"children":653},{"class":129,"line":185},[654,659,663,668,673,677,682,686,690,694],{"type":33,"tag":127,"props":655,"children":656},{"style":140},[657],{"type":38,"value":658},"user_proxy ",{"type":33,"tag":127,"props":660,"children":661},{"style":134},[662],{"type":38,"value":177},{"type":33,"tag":127,"props":664,"children":665},{"style":140},[666],{"type":38,"value":667}," UserProxyAgent(",{"type":33,"tag":127,"props":669,"children":670},{"style":194},[671],{"type":38,"value":672},"\"user\"",{"type":33,"tag":127,"props":674,"children":675},{"style":140},[676],{"type":38,"value":406},{"type":33,"tag":127,"props":678,"children":679},{"style":389},[680],{"type":38,"value":681},"code_execution_config",{"type":33,"tag":127,"props":683,"children":684},{"style":134},[685],{"type":38,"value":177},{"type":33,"tag":127,"props":687,"children":688},{"style":140},[689],{"type":38,"value":639},{"type":33,"tag":127,"props":691,"children":692},{"style":642},[693],{"type":38,"value":645},{"type":33,"tag":127,"props":695,"children":696},{"style":140},[697],{"type":38,"value":650},{"type":33,"tag":127,"props":699,"children":700},{"class":129,"line":205},[701],{"type":33,"tag":127,"props":702,"children":703},{"emptyLinePlaceholder":160},[704],{"type":38,"value":163},{"type":33,"tag":127,"props":706,"children":707},{"class":129,"line":223},[708,713,718,722,727],{"type":33,"tag":127,"props":709,"children":710},{"style":140},[711],{"type":38,"value":712},"user_proxy.initiate_chat(assistant, ",{"type":33,"tag":127,"props":714,"children":715},{"style":389},[716],{"type":38,"value":717},"message",{"type":33,"tag":127,"props":719,"children":720},{"style":134},[721],{"type":38,"value":177},{"type":33,"tag":127,"props":723,"children":724},{"style":194},[725],{"type":38,"value":726},"\"Analyze Q1 data\"",{"type":33,"tag":127,"props":728,"children":729},{"style":140},[730],{"type":38,"value":290},{"type":33,"tag":34,"props":732,"children":733},{},[734,738,740,744],{"type":33,"tag":56,"props":735,"children":736},{},[737],{"type":38,"value":315},{"type":38,"value":739}," Scénarios human-in-the-loop naturels. ",{"type":33,"tag":56,"props":741,"children":742},{},[743],{"type":38,"value":322},{"type":38,"value":745}," Flux non-déterministes — quand l'agent A répondra-t-il à B reste incertain.",{"type":33,"tag":41,"props":747,"children":749},{"id":748},"topologie-parallèle-vs-série-matrice-de-tradeoff",[750],{"type":38,"value":751},"Topologie Parallèle vs Série : Matrice de Tradeoff",{"type":33,"tag":753,"props":754,"children":755},"table",{},[756,790],{"type":33,"tag":757,"props":758,"children":759},"thead",{},[760],{"type":33,"tag":761,"props":762,"children":763},"tr",{},[764,770,775,780,785],{"type":33,"tag":765,"props":766,"children":767},"th",{},[768],{"type":38,"value":769},"Architecture",{"type":33,"tag":765,"props":771,"children":772},{},[773],{"type":38,"value":774},"Latence",{"type":33,"tag":765,"props":776,"children":777},{},[778],{"type":38,"value":779},"Coût",{"type":33,"tag":765,"props":781,"children":782},{},[783],{"type":38,"value":784},"Complexité",{"type":33,"tag":765,"props":786,"children":787},{},[788],{"type":38,"value":789},"Utilisation",{"type":33,"tag":791,"props":792,"children":793},"tbody",{},[794,826,857,887],{"type":33,"tag":761,"props":795,"children":796},{},[797,806,811,816,821],{"type":33,"tag":798,"props":799,"children":800},"td",{},[801],{"type":33,"tag":56,"props":802,"children":803},{},[804],{"type":38,"value":805},"Série (Sequential)",{"type":33,"tag":798,"props":807,"children":808},{},[809],{"type":38,"value":810},"Élevée (N×t)",{"type":33,"tag":798,"props":812,"children":813},{},[814],{"type":38,"value":815},"Faible (1 LLM unique)",{"type":33,"tag":798,"props":817,"children":818},{},[819],{"type":38,"value":820},"Basse",{"type":33,"tag":798,"props":822,"children":823},{},[824],{"type":38,"value":825},"Pipelines déterministes (données → analyse → rapport)",{"type":33,"tag":761,"props":827,"children":828},{},[829,837,842,847,852],{"type":33,"tag":798,"props":830,"children":831},{},[832],{"type":33,"tag":56,"props":833,"children":834},{},[835],{"type":38,"value":836},"Parallèle (Fork-Join)",{"type":33,"tag":798,"props":838,"children":839},{},[840],{"type":38,"value":841},"Basse (max(t₁, t₂, t₃))",{"type":33,"tag":798,"props":843,"children":844},{},[845],{"type":38,"value":846},"Élevée (N agents simultané)",{"type":33,"tag":798,"props":848,"children":849},{},[850],{"type":38,"value":851},"Moyenne",{"type":33,"tag":798,"props":853,"children":854},{},[855],{"type":38,"value":856},"Tâches indépendantes (requête 3 API simultanément)",{"type":33,"tag":761,"props":858,"children":859},{},[860,868,873,877,882],{"type":33,"tag":798,"props":861,"children":862},{},[863],{"type":33,"tag":56,"props":864,"children":865},{},[866],{"type":38,"value":867},"Conditionnelle (DAG)",{"type":33,"tag":798,"props":869,"children":870},{},[871],{"type":38,"value":872},"Variable",{"type":33,"tag":798,"props":874,"children":875},{},[876],{"type":38,"value":851},{"type":33,"tag":798,"props":878,"children":879},{},[880],{"type":38,"value":881},"Élevée",{"type":33,"tag":798,"props":883,"children":884},{},[885],{"type":38,"value":886},"Flux dynamique (données manquantes → X, OK → Y)",{"type":33,"tag":761,"props":888,"children":889},{},[890,898,903,907,911],{"type":33,"tag":798,"props":891,"children":892},{},[893],{"type":33,"tag":56,"props":894,"children":895},{},[896],{"type":38,"value":897},"Conversationnelle",{"type":33,"tag":798,"props":899,"children":900},{},[901],{"type":38,"value":902},"Incertaine",{"type":33,"tag":798,"props":904,"children":905},{},[906],{"type":38,"value":851},{"type":33,"tag":798,"props":908,"children":909},{},[910],{"type":38,"value":881},{"type":33,"tag":798,"props":912,"children":913},{},[914],{"type":38,"value":915},"Human-in-the-loop ou négociation",{"type":33,"tag":34,"props":917,"children":918},{},[919,924],{"type":33,"tag":56,"props":920,"children":921},{},[922],{"type":38,"value":923},"Décision production :",{"type":38,"value":925}," Si le traitement n'est pas sur le chemin critique (ex: génération de rapport hors-ligne), choisis une topologie série — debug facile, coût faible. Si une SLA de latence existe (ex: tableau de bord temps réel), forke en parallèle — mais construis dès le départ une logique de retry, sinon 1 timeout d'agent fait attendre les 3 autres.",{"type":33,"tag":41,"props":927,"children":929},{"id":928},"coordination-des-tool-calls-prévenir-les-collisions",[930],{"type":38,"value":931},"Coordination des Tool Calls : Prévenir les Collisions",{"type":33,"tag":34,"props":933,"children":934},{},[935],{"type":38,"value":936},"Dans un système multi-agent, le bug le plus courant : 2 agents appellent le même outil simultanément avec des paramètres différents, l'un corrompt l'état de l'autre.",{"type":33,"tag":34,"props":938,"children":939},{},[940,945,947,953],{"type":33,"tag":56,"props":941,"children":942},{},[943],{"type":38,"value":944},"Exemple :",{"type":38,"value":946}," L'agent A crée ",{"type":33,"tag":123,"props":948,"children":950},{"className":949},[],[951],{"type":38,"value":952},"temp_table_x",{"type":38,"value":954}," dans BigQuery, l'agent B essaie simultanément de la lire — erreur \"données non trouvées\". Cette \"race condition\" se résout à la couche orchestration :",{"type":33,"tag":34,"props":956,"children":957},{},[958,963,965,971],{"type":33,"tag":56,"props":959,"children":960},{},[961],{"type":38,"value":962},"1. Resource locking :",{"type":38,"value":964}," Quand l'agent A commence à utiliser un outil, l'orchestrator le verrouille pour les autres agents. Avec LangGraph, utilise ",{"type":33,"tag":123,"props":966,"children":968},{"className":967},[],[969],{"type":38,"value":970},"shared_state",{"type":38,"value":972}," :",{"type":33,"tag":116,"props":974,"children":976},{"className":118,"code":975,"language":120,"meta":17,"style":17},"if not state.lock_acquired(\"bigquery\"):\n    return {\"status\": \"waiting\"}\nstate.acquire_lock(\"bigquery\")\nresult = bigquery_tool.run()\nstate.release_lock(\"bigquery\")\n",[977],{"type":33,"tag":123,"props":978,"children":979},{"__ignoreMap":17},[980,1008,1041,1057,1073],{"type":33,"tag":127,"props":981,"children":982},{"class":129,"line":130},[983,988,993,998,1003],{"type":33,"tag":127,"props":984,"children":985},{"style":134},[986],{"type":38,"value":987},"if",{"type":33,"tag":127,"props":989,"children":990},{"style":134},[991],{"type":38,"value":992}," not",{"type":33,"tag":127,"props":994,"children":995},{"style":140},[996],{"type":38,"value":997}," state.lock_acquired(",{"type":33,"tag":127,"props":999,"children":1000},{"style":194},[1001],{"type":38,"value":1002},"\"bigquery\"",{"type":33,"tag":127,"props":1004,"children":1005},{"style":140},[1006],{"type":38,"value":1007},"):\n",{"type":33,"tag":127,"props":1009,"children":1010},{"class":129,"line":156},[1011,1016,1021,1026,1031,1036],{"type":33,"tag":127,"props":1012,"children":1013},{"style":134},[1014],{"type":38,"value":1015},"    return",{"type":33,"tag":127,"props":1017,"children":1018},{"style":140},[1019],{"type":38,"value":1020}," {",{"type":33,"tag":127,"props":1022,"children":1023},{"style":194},[1024],{"type":38,"value":1025},"\"status\"",{"type":33,"tag":127,"props":1027,"children":1028},{"style":140},[1029],{"type":38,"value":1030},": ",{"type":33,"tag":127,"props":1032,"children":1033},{"style":194},[1034],{"type":38,"value":1035},"\"waiting\"",{"type":33,"tag":127,"props":1037,"children":1038},{"style":140},[1039],{"type":38,"value":1040},"}\n",{"type":33,"tag":127,"props":1042,"children":1043},{"class":129,"line":166},[1044,1049,1053],{"type":33,"tag":127,"props":1045,"children":1046},{"style":140},[1047],{"type":38,"value":1048},"state.acquire_lock(",{"type":33,"tag":127,"props":1050,"children":1051},{"style":194},[1052],{"type":38,"value":1002},{"type":33,"tag":127,"props":1054,"children":1055},{"style":140},[1056],{"type":38,"value":290},{"type":33,"tag":127,"props":1058,"children":1059},{"class":129,"line":185},[1060,1064,1068],{"type":33,"tag":127,"props":1061,"children":1062},{"style":140},[1063],{"type":38,"value":530},{"type":33,"tag":127,"props":1065,"children":1066},{"style":134},[1067],{"type":38,"value":177},{"type":33,"tag":127,"props":1069,"children":1070},{"style":140},[1071],{"type":38,"value":1072}," bigquery_tool.run()\n",{"type":33,"tag":127,"props":1074,"children":1075},{"class":129,"line":205},[1076,1081,1085],{"type":33,"tag":127,"props":1077,"children":1078},{"style":140},[1079],{"type":38,"value":1080},"state.release_lock(",{"type":33,"tag":127,"props":1082,"children":1083},{"style":194},[1084],{"type":38,"value":1002},{"type":33,"tag":127,"props":1086,"children":1087},{"style":140},[1088],{"type":38,"value":290},{"type":33,"tag":34,"props":1090,"children":1091},{},[1092,1097,1099,1105,1107,1113,1115,1121],{"type":33,"tag":56,"props":1093,"children":1094},{},[1095],{"type":38,"value":1096},"2. Isolation d'espace de noms :",{"type":38,"value":1098}," Donne à chaque agent un espace de travail séparé. L'agent A utilise ",{"type":33,"tag":123,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":38,"value":1104},"workspace_a\u002Ftemp_table",{"type":38,"value":1106},", l'agent B ",{"type":33,"tag":123,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":38,"value":1112},"workspace_b\u002Ftemp_table",{"type":38,"value":1114},". Avec CrewAI, cela se fait via un préfixe ",{"type":33,"tag":123,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":38,"value":1120},"agent_id",{"type":38,"value":1122},".",{"type":33,"tag":34,"props":1124,"children":1125},{},[1126,1131,1133,1139,1141,1147,1149,1155],{"type":33,"tag":56,"props":1127,"children":1128},{},[1129],{"type":38,"value":1130},"3. Conception idempotente des outils :",{"type":38,"value":1132}," Dès le départ, construis les outils pour être idempotents — appeler deux fois avec les mêmes paramètres ne crée pas de conflits. Utilise ",{"type":33,"tag":123,"props":1134,"children":1136},{"className":1135},[],[1137],{"type":38,"value":1138},"upsert",{"type":38,"value":1140}," ou ",{"type":33,"tag":123,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":38,"value":1146},"create_or_replace",{"type":38,"value":1148}," au lieu de ",{"type":33,"tag":123,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":38,"value":1154},"create",{"type":38,"value":1122},{"type":33,"tag":41,"props":1157,"children":1159},{"id":1158},"observabilité-comment-tracer-un-agent",[1160],{"type":38,"value":1161},"Observabilité : Comment Tracer un Agent ?",{"type":33,"tag":34,"props":1163,"children":1164},{},[1165],{"type":38,"value":1166},"En production, 5 agents tournent, l'un échoue — lequel ? Des outils comme LangSmith, Helicone, Arize collectent des traces au niveau agent, mais l'instrumentation manuelle est obligatoire.",{"type":33,"tag":34,"props":1168,"children":1169},{},[1170],{"type":33,"tag":56,"props":1171,"children":1172},{},[1173],{"type":38,"value":1174},"Métriques critiques :",{"type":33,"tag":1176,"props":1177,"children":1178},"ul",{},[1179,1198,1208,1218],{"type":33,"tag":1180,"props":1181,"children":1182},"li",{},[1183,1188,1190,1196],{"type":33,"tag":56,"props":1184,"children":1185},{},[1186],{"type":38,"value":1187},"Latence par agent :",{"type":38,"value":1189}," Combien de temps chaque agent a-t-il pris ? Dans un fork parallèle, ",{"type":33,"tag":123,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":38,"value":1195},"max(latence)",{"type":38,"value":1197}," révèle le goulot.",{"type":33,"tag":1180,"props":1199,"children":1200},{},[1201,1206],{"type":33,"tag":56,"props":1202,"children":1203},{},[1204],{"type":38,"value":1205},"Taux de succès par tool :",{"type":38,"value":1207}," Chaque agent a appelé quel outil combien de fois, combien de succès ? Moins de 95% est un signal d'alerte.",{"type":33,"tag":1180,"props":1209,"children":1210},{},[1211,1216],{"type":33,"tag":56,"props":1212,"children":1213},{},[1214],{"type":38,"value":1215},"Compteur de retry :",{"type":38,"value":1217}," Combien de fois un agent a-t-il retryé ? Un compteur élevé suggère soit un prompt erroné soit une spécification d'outil incorrecte.",{"type":33,"tag":1180,"props":1219,"children":1220},{},[1221,1226],{"type":33,"tag":56,"props":1222,"children":1223},{},[1224],{"type":38,"value":1225},"Diagramme de transitions d'état :",{"type":38,"value":1227}," Avec LangGraph, de quel nœud à quel nœud les passages ont eu lieu combien de fois ? Les boucles infinies apparaissent ici.",{"type":33,"tag":116,"props":1229,"children":1231},{"className":118,"code":1230,"language":120,"meta":17,"style":17},"# Intégration LangSmith\nfrom langsmith import Client\n\nclient = Client()\nwith client.trace(run_name=\"multi_agent_pipeline\") as run:\n    for agent in agents:\n        with run.create_child(name=agent.name):\n            agent.run()\n",[1232],{"type":33,"tag":123,"props":1233,"children":1234},{"__ignoreMap":17},[1235,1244,1265,1272,1289,1331,1354,1381],{"type":33,"tag":127,"props":1236,"children":1237},{"class":129,"line":130},[1238],{"type":33,"tag":127,"props":1239,"children":1241},{"style":1240},"--shiki-default:#6A737D",[1242],{"type":38,"value":1243},"# Intégration LangSmith\n",{"type":33,"tag":127,"props":1245,"children":1246},{"class":129,"line":156},[1247,1251,1256,1260],{"type":33,"tag":127,"props":1248,"children":1249},{"style":134},[1250],{"type":38,"value":137},{"type":33,"tag":127,"props":1252,"children":1253},{"style":140},[1254],{"type":38,"value":1255}," langsmith ",{"type":33,"tag":127,"props":1257,"children":1258},{"style":134},[1259],{"type":38,"value":148},{"type":33,"tag":127,"props":1261,"children":1262},{"style":140},[1263],{"type":38,"value":1264}," Client\n",{"type":33,"tag":127,"props":1266,"children":1267},{"class":129,"line":166},[1268],{"type":33,"tag":127,"props":1269,"children":1270},{"emptyLinePlaceholder":160},[1271],{"type":38,"value":163},{"type":33,"tag":127,"props":1273,"children":1274},{"class":129,"line":185},[1275,1280,1284],{"type":33,"tag":127,"props":1276,"children":1277},{"style":140},[1278],{"type":38,"value":1279},"client ",{"type":33,"tag":127,"props":1281,"children":1282},{"style":134},[1283],{"type":38,"value":177},{"type":33,"tag":127,"props":1285,"children":1286},{"style":140},[1287],{"type":38,"value":1288}," Client()\n",{"type":33,"tag":127,"props":1290,"children":1291},{"class":129,"line":205},[1292,1297,1302,1307,1311,1316,1321,1326],{"type":33,"tag":127,"props":1293,"children":1294},{"style":134},[1295],{"type":38,"value":1296},"with",{"type":33,"tag":127,"props":1298,"children":1299},{"style":140},[1300],{"type":38,"value":1301}," client.trace(",{"type":33,"tag":127,"props":1303,"children":1304},{"style":389},[1305],{"type":38,"value":1306},"run_name",{"type":33,"tag":127,"props":1308,"children":1309},{"style":134},[1310],{"type":38,"value":177},{"type":33,"tag":127,"props":1312,"children":1313},{"style":194},[1314],{"type":38,"value":1315},"\"multi_agent_pipeline\"",{"type":33,"tag":127,"props":1317,"children":1318},{"style":140},[1319],{"type":38,"value":1320},") ",{"type":33,"tag":127,"props":1322,"children":1323},{"style":134},[1324],{"type":38,"value":1325},"as",{"type":33,"tag":127,"props":1327,"children":1328},{"style":140},[1329],{"type":38,"value":1330}," run:\n",{"type":33,"tag":127,"props":1332,"children":1333},{"class":129,"line":223},[1334,1339,1344,1349],{"type":33,"tag":127,"props":1335,"children":1336},{"style":134},[1337],{"type":38,"value":1338},"    for",{"type":33,"tag":127,"props":1340,"children":1341},{"style":140},[1342],{"type":38,"value":1343}," agent ",{"type":33,"tag":127,"props":1345,"children":1346},{"style":134},[1347],{"type":38,"value":1348},"in",{"type":33,"tag":127,"props":1350,"children":1351},{"style":140},[1352],{"type":38,"value":1353}," agents:\n",{"type":33,"tag":127,"props":1355,"children":1356},{"class":129,"line":232},[1357,1362,1367,1372,1376],{"type":33,"tag":127,"props":1358,"children":1359},{"style":134},[1360],{"type":38,"value":1361},"        with",{"type":33,"tag":127,"props":1363,"children":1364},{"style":140},[1365],{"type":38,"value":1366}," run.create_child(",{"type":33,"tag":127,"props":1368,"children":1369},{"style":389},[1370],{"type":38,"value":1371},"name",{"type":33,"tag":127,"props":1373,"children":1374},{"style":134},[1375],{"type":38,"value":177},{"type":33,"tag":127,"props":1377,"children":1378},{"style":140},[1379],{"type":38,"value":1380},"agent.name):\n",{"type":33,"tag":127,"props":1382,"children":1383},{"class":129,"line":246},[1384],{"type":33,"tag":127,"props":1385,"children":1386},{"style":140},[1387],{"type":38,"value":1388},"            agent.run()\n",{"type":33,"tag":41,"props":1390,"children":1392},{"id":1391},"gestion-de-la-context-window-mémoire-partagée-vs-isolée",[1393],{"type":38,"value":1394},"Gestion de la Context Window : Mémoire Partagée vs Isolée",{"type":33,"tag":34,"props":1396,"children":1397},{},[1398],{"type":38,"value":1399},"Dans un système multi-agent, la ressource la plus critique est la context window. 5 agents partagent-ils les mêmes 128K tokens, ou chacun a-t-il ses propres 128K ?",{"type":33,"tag":34,"props":1401,"children":1402},{},[1403,1408],{"type":33,"tag":56,"props":1404,"children":1405},{},[1406],{"type":38,"value":1407},"Mémoire partagée (LangGraph par défaut) :",{"type":38,"value":1409}," Tous les agents lisent et écrivent au même objet state. Avantage : les découvertes de l'agent A passent automatiquement à B. Inconvénient : pollution de contexte — les données dont C n'a pas besoin gonflent la window.",{"type":33,"tag":34,"props":1411,"children":1412},{},[1413,1418],{"type":33,"tag":56,"props":1414,"children":1415},{},[1416],{"type":38,"value":1417},"Mémoire isolée + passage de messages :",{"type":38,"value":1419}," Chaque agent maintient son propre state, ne partageant que les données nécessaires via messages. CrewAI utilise ce pattern. Avantage : efficacité des tokens élevée. Inconvénient : sérialisation manuelle de données requise.",{"type":33,"tag":34,"props":1421,"children":1422},{},[1423,1428,1430,1436],{"type":33,"tag":56,"props":1424,"children":1425},{},[1426],{"type":38,"value":1427},"Hybride (recommandé) :",{"type":38,"value":1429}," Garde dans l'état partagé uniquement les métadonnées (quel agent a agi, quand il a terminé), écris les données réelles sur disque\u002FDB, passe aux agents des références. Par exemple, écris le résultat BigQuery sur GCS, donne aux agents le chemin ",{"type":33,"tag":123,"props":1431,"children":1433},{"className":1432},[],[1434],{"type":38,"value":1435},"gs:\u002F\u002Fbucket\u002Fresult.parquet",{"type":38,"value":1122},{"type":33,"tag":41,"props":1438,"children":1440},{"id":1439},"gestion-des-erreurs-que-se-passe-t-il-quand-un-agent-tombe",[1441],{"type":38,"value":1442},"Gestion des Erreurs : Que Se Passe-t-il Quand un Agent Tombe ?",{"type":33,"tag":34,"props":1444,"children":1445},{},[1446],{"type":38,"value":1447},"En topologie série, si l'agent 2 échoue, le pipeline s'arrête — simple. En parallèle, si l'agent B échoue mais A et C continuent, tu génères un rapport avec des données manquantes. Une logique de \"partial success\" est obligatoire à la couche orchestration.",{"type":33,"tag":34,"props":1449,"children":1450},{},[1451],{"type":33,"tag":56,"props":1452,"children":1453},{},[1454],{"type":38,"value":1455},"Stratégies :",{"type":33,"tag":1457,"props":1458,"children":1459},"ol",{},[1460,1470,1480],{"type":33,"tag":1180,"props":1461,"children":1462},{},[1463,1468],{"type":33,"tag":56,"props":1464,"children":1465},{},[1466],{"type":38,"value":1467},"Fail-fast (pour la série) :",{"type":38,"value":1469}," La première erreur arrête tout le pipeline. À préférer si la latence n'est pas critique.",{"type":33,"tag":1180,"props":1471,"children":1472},{},[1473,1478],{"type":33,"tag":56,"props":1474,"children":1475},{},[1476],{"type":38,"value":1477},"Best-effort (pour le parallèle) :",{"type":38,"value":1479}," Exécute autant d'agents que possible, génère une sortie même avec données manquantes — mais marque \"incomplete\" dans les métadonnées.",{"type":33,"tag":1180,"props":1481,"children":1482},{},[1483,1488],{"type":33,"tag":56,"props":1484,"children":1485},{},[1486],{"type":38,"value":1487},"Retry avec fallback :",{"type":38,"value":1489}," L'agent A a essayé 3 fois sans succès, consulte agent A_backup (modèle différent ou prompt différent).",{"type":33,"tag":116,"props":1491,"children":1493},{"className":118,"code":1492,"language":120,"meta":17,"style":17},"# Retry avec LangGraph\nworkflow.add_node(\"agent_a\", agent_a, retry_policy={\"max_attempts\": 3})\nworkflow.add_edge(\"agent_a\", \"agent_a_backup\", condition=\"failed\")\n",[1494],{"type":33,"tag":123,"props":1495,"children":1496},{"__ignoreMap":17},[1497,1505,1553],{"type":33,"tag":127,"props":1498,"children":1499},{"class":129,"line":130},[1500],{"type":33,"tag":127,"props":1501,"children":1502},{"style":1240},[1503],{"type":38,"value":1504},"# Retry avec LangGraph\n",{"type":33,"tag":127,"props":1506,"children":1507},{"class":129,"line":156},[1508,1512,1517,1522,1527,1531,1535,1540,1544,1549],{"type":33,"tag":127,"props":1509,"children":1510},{"style":140},[1511],{"type":38,"value":191},{"type":33,"tag":127,"props":1513,"children":1514},{"style":194},[1515],{"type":38,"value":1516},"\"agent_a\"",{"type":33,"tag":127,"props":1518,"children":1519},{"style":140},[1520],{"type":38,"value":1521},", agent_a, ",{"type":33,"tag":127,"props":1523,"children":1524},{"style":389},[1525],{"type":38,"value":1526},"retry_policy",{"type":33,"tag":127,"props":1528,"children":1529},{"style":134},[1530],{"type":38,"value":177},{"type":33,"tag":127,"props":1532,"children":1533},{"style":140},[1534],{"type":38,"value":639},{"type":33,"tag":127,"props":1536,"children":1537},{"style":194},[1538],{"type":38,"value":1539},"\"max_attempts\"",{"type":33,"tag":127,"props":1541,"children":1542},{"style":140},[1543],{"type":38,"value":1030},{"type":33,"tag":127,"props":1545,"children":1546},{"style":642},[1547],{"type":38,"value":1548},"3",{"type":33,"tag":127,"props":1550,"children":1551},{"style":140},[1552],{"type":38,"value":650},{"type":33,"tag":127,"props":1554,"children":1555},{"class":129,"line":166},[1556,1561,1565,1569,1574,1578,1583,1587,1592],{"type":33,"tag":127,"props":1557,"children":1558},{"style":140},[1559],{"type":38,"value":1560},"workflow.add_edge(",{"type":33,"tag":127,"props":1562,"children":1563},{"style":194},[1564],{"type":38,"value":1516},{"type":33,"tag":127,"props":1566,"children":1567},{"style":140},[1568],{"type":38,"value":406},{"type":33,"tag":127,"props":1570,"children":1571},{"style":194},[1572],{"type":38,"value":1573},"\"agent_a_backup\"",{"type":33,"tag":127,"props":1575,"children":1576},{"style":140},[1577],{"type":38,"value":406},{"type":33,"tag":127,"props":1579,"children":1580},{"style":389},[1581],{"type":38,"value":1582},"condition",{"type":33,"tag":127,"props":1584,"children":1585},{"style":134},[1586],{"type":38,"value":177},{"type":33,"tag":127,"props":1588,"children":1589},{"style":194},[1590],{"type":38,"value":1591},"\"failed\"",{"type":33,"tag":127,"props":1593,"children":1594},{"style":140},[1595],{"type":38,"value":290},{"type":33,"tag":41,"props":1597,"children":1599},{"id":1598},"checklist-production-avant-de-déployer-un-système-multi-agent",[1600],{"type":38,"value":1601},"Checklist Production : Avant de Déployer un Système Multi-Agent",{"type":33,"tag":1176,"props":1603,"children":1604},{},[1605,1615,1625,1635,1645],{"type":33,"tag":1180,"props":1606,"children":1607},{},[1608,1613],{"type":33,"tag":56,"props":1609,"children":1610},{},[1611],{"type":38,"value":1612},"Calcule le budget tokens :",{"type":38,"value":1614}," 5 agents × 10K tokens entrée × 2K tokens sortie × prix API = coût par exécution. 1000 exécutions\u002Fjour = combien en fin de mois ?",{"type":33,"tag":1180,"props":1616,"children":1617},{},[1618,1623],{"type":33,"tag":56,"props":1619,"children":1620},{},[1621],{"type":38,"value":1622},"Définis une SLA de latence :",{"type":38,"value":1624}," Combien de temps chaque agent peut-il prendre ? Si la latence P95 dépasse 10 secondes, tu as besoin d'une topologie parallèle.",{"type":33,"tag":1180,"props":1626,"children":1627},{},[1628,1633],{"type":33,"tag":56,"props":1629,"children":1630},{},[1631],{"type":38,"value":1632},"Planifie un rollback :",{"type":38,"value":1634}," Changer le prompt d'un agent peut casser tout le pipeline. Contrôle de version + déploiement canary obligatoire.",{"type":33,"tag":1180,"props":1636,"children":1637},{},[1638,1643],{"type":33,"tag":56,"props":1639,"children":1640},{},[1641],{"type":38,"value":1642},"Point human-in-the-loop :",{"type":38,"value":1644}," Pour les décisions critiques (ex: ajustement budgétaire), montre la sortie du dernier agent à un humain et obtiens son approbation.",{"type":33,"tag":1180,"props":1646,"children":1647},{},[1648,1653],{"type":33,"tag":56,"props":1649,"children":1650},{},[1651],{"type":38,"value":1652},"Audit log :",{"type":38,"value":1654}," Chaque étape de chaque agent — quel outil appelé, quels paramètres, qu'a-t-il retourné — doit être écrit en JSON dans S3. Nécessaire pour la conformité.",{"type":33,"tag":34,"props":1656,"children":1657},{},[1658],{"type":38,"value":1659},"L'orchestration multi-agent est le \"cours de systèmes\" de l'ingénierie LLM. Ce qui commence par un seul appel de modèle en production requiert topologie, gestion d'état, logique de retry, observabilité. LangGraph, CrewAI, AutoGen sont des squelettes — le vrai travail consiste à décider comment arranger et paralléliser tes agents selon ton cas d'usage. Prends maintenant ton prototype, mesure la latence, simule les coûts, choisis ensuite ta topologie. Ne déploie pas sans tester — dans les systèmes multi-agent, il y a 10 couches entre \"ça marche\" et \"c'est prêt pour la production\".",{"type":33,"tag":1661,"props":1662,"children":1663},"style",{},[1664],{"type":38,"value":1665},"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":17,"searchDepth":166,"depth":166,"links":1667},[1668,1669,1670,1671,1672,1673,1674,1675],{"id":43,"depth":156,"text":46},{"id":101,"depth":156,"text":104},{"id":748,"depth":156,"text":751},{"id":928,"depth":156,"text":931},{"id":1158,"depth":156,"text":1161},{"id":1391,"depth":156,"text":1394},{"id":1439,"depth":156,"text":1442},{"id":1598,"depth":156,"text":1601},"markdown","content:fr:ai:multi-agent-orchestration-systemes-llm.md","content","fr\u002Fai\u002Fmulti-agent-orchestration-systemes-llm.md","fr\u002Fai\u002Fmulti-agent-orchestration-systemes-llm","md",1785967484004]