[{"data":1,"prerenderedAt":1681},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fit\u002Fai\u002Fmulti-agent-orchestration-topologie-di-produzione":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":1675,"_id":1676,"_source":1677,"_file":1678,"_stem":1679,"_extension":1680},"\u002Fit\u002Fai\u002Fmulti-agent-orchestration-topologie-di-produzione","ai",false,"","Multi-Agent Orchestration: Da Singola Chiamata LLM ai Sistemi in Produzione","SDK per agent, topologie parallele\u002Fseriali: come costruire sistemi multi-agent production-grade con LangGraph, CrewAI, AutoGen.","2026-07-20",[22,23,24,25,26],"multi-agent","llm-orchestration","langgraph","crewai","agent-topology",9,"Roibase",{"type":30,"children":31,"toc":1665},"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,1122,1155,1161,1166,1174,1227,1388,1394,1399,1409,1419,1436,1442,1447,1455,1489,1595,1601,1654,1659],{"type":33,"tag":34,"props":35,"children":36},"element","p",{},[37],{"type":38,"value":39},"text","Nel 2023 gli LLM potevano \"invocare strumenti\". Nel 2024 il concetto di \"agent\" è decollato. Nel 2025 tutti hanno costruito il proprio agent. Nel 2026 la domanda è cambiata: un singolo agent non basta, ma 5 agent devo eseguirli in parallelo o in sequenza? Quale dovrebbe usare quale strumento? Dove dovrebbe risiedere la logica di coordinamento? L'orchestrazione multi-agent rappresenta il primo serio problema di ingegneria nel passaggio dalle applicazioni LLM ai sistemi in produzione.",{"type":33,"tag":41,"props":42,"children":44},"h2",{"id":43},"da-singolo-agent-alla-topologia-perché-lorchestrazione",[45],{"type":38,"value":46},"Da Singolo Agent alla Topologia: Perché l'Orchestrazione?",{"type":33,"tag":34,"props":48,"children":49},{},[50],{"type":38,"value":51},"Un singolo agent — ad esempio Claude Sonnet 3.5 + 5 strumenti — risolve molti scenari di utilizzo. Ma quando affronti questi casi, riscontri limitazioni:",{"type":33,"tag":34,"props":53,"children":54},{},[55,61],{"type":33,"tag":56,"props":57,"children":58},"strong",{},[59],{"type":38,"value":60},"Necessità di esecuzione parallela:",{"type":38,"value":62}," Stai analizzando una campagna di marketing. Contemporaneamente: estrai i dati da Google Ads API, calcola i trend storici in BigQuery, recupera i dati di conversione da Shopify. Un singolo agent esegue questi compiti in sequenza — totale 12 secondi. Con 3 agent in parallelo, termina in 4,5 secondi. Se la latenza è critica, l'orchestrazione è obbligatoria.",{"type":33,"tag":34,"props":64,"children":65},{},[66,71],{"type":33,"tag":56,"props":67,"children":68},{},[69],{"type":38,"value":70},"Necessità di specializzazione:",{"type":38,"value":72}," Un agent scriva SQL, un altro pulisca i dati, un terzo generi codice di visualizzazione. Assegni a ogni agent un prompt di sistema diverso, un modello diverso (Sonnet per SQL, Opus per codice), un contesto di retrieval diverso. Se chiedi a un singolo agent \"conosci sia SQL che design visuale\", il context window si gonfia e le performance crollano.",{"type":33,"tag":34,"props":74,"children":75},{},[76,81],{"type":33,"tag":56,"props":77,"children":78},{},[79],{"type":38,"value":80},"Livelli di sicurezza:",{"type":38,"value":82}," Un agent ripulisca il prompt in ingresso, uno esegua la logica aziendale, uno validi l'output. Questa struttura \"assembly line\" è critica in produzione: riduce il rischio di parametri errati nel tool use. L'orchestrazione è obbligatoria.",{"type":33,"tag":34,"props":84,"children":85},{},[86,88,97],{"type":38,"value":87},"Nei progetti di ",{"type":33,"tag":89,"props":90,"children":94},"a",{"href":91,"rel":92},"https:\u002F\u002Fwww.roibase.com.tr\u002Fit\u002Fverianalizi",[93],"nofollow",[95],{"type":38,"value":96},"Veri Analizi & İçgörü Mühendisliği",{"type":38,"value":98}," di Roibase, la struttura parallela multi-agent ha ridotto i tempi di query BigQuery del 60% — perché 3 sorgenti dati diverse possono essere interrogate simultaneamente.",{"type":33,"tag":41,"props":100,"children":102},{"id":101},"sdk-per-agent-langgraph-crewai-autogen",[103],{"type":38,"value":104},"SDK per Agent: 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 (ecosistema LangChain):",{"type":38,"value":114}," Definisci gli agent come nodi in una struttura grafica diretta. Ogni nodo mantiene uno \"stato\", i bordi determinano la logica di transizione. Il routing condizionale è possibile: se l'agent A dice \"dati incompleti\", vai all'agent B, se completi, vai a 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},"Vantaggi:",{"type":38,"value":317}," Gestione dello stato robusta. Il tracing distribuito è semplice — ogni nodo ha log separati. ",{"type":33,"tag":56,"props":319,"children":320},{},[321],{"type":38,"value":322},"Svantaggi:",{"type":38,"value":324}," La sintassi è complessa, le catene di callback rendono il debugging difficile.",{"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}," Orchestrazione basata su ruoli. Assegni a ogni agent un \"ruolo\" (ricercatore, analista, scrittore), un elenco di \"compiti\". Il framework esegue automaticamente in sequenza o fa fork in parallelo.",{"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 minimo, prototipazione veloce. ",{"type":33,"tag":56,"props":550,"children":551},{},[552],{"type":38,"value":322},{"type":38,"value":554}," Flessibilità limitata — per routing personalizzato devi modificare il codice.",{"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 conversazionale. Gli agent \"conversano\" tra loro, un agent invia un messaggio a un altro, questi risponde. In questo pattern, l'orchestrazione è implicita — il flusso di messaggi determina la topologia.",{"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}," Naturale per scenari human-in-the-loop. ",{"type":33,"tag":56,"props":741,"children":742},{},[743],{"type":38,"value":322},{"type":38,"value":745}," I flussi non sono deterministici — è incerto quando l'agent A risponderà all'agent B.",{"type":33,"tag":41,"props":747,"children":749},{"id":748},"topologia-seriale-vs-parallela-matrice-di-trade-off",[750],{"type":38,"value":751},"Topologia Seriale vs Parallela: Matrice di Trade-off",{"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},"Architettura",{"type":33,"tag":765,"props":771,"children":772},{},[773],{"type":38,"value":774},"Latenza",{"type":33,"tag":765,"props":776,"children":777},{},[778],{"type":38,"value":779},"Costo",{"type":33,"tag":765,"props":781,"children":782},{},[783],{"type":38,"value":784},"Complessità",{"type":33,"tag":765,"props":786,"children":787},{},[788],{"type":38,"value":789},"Caso d'Uso",{"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},"Seriale (Sequential)",{"type":33,"tag":798,"props":807,"children":808},{},[809],{"type":38,"value":810},"Alta (N×t)",{"type":33,"tag":798,"props":812,"children":813},{},[814],{"type":38,"value":815},"Bassa (1 LLM per volta)",{"type":33,"tag":798,"props":817,"children":818},{},[819],{"type":38,"value":820},"Bassa",{"type":33,"tag":798,"props":822,"children":823},{},[824],{"type":38,"value":825},"Pipeline deterministiche (dati → analisi → rapporto)",{"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},"Parallela (Fork-Join)",{"type":33,"tag":798,"props":838,"children":839},{},[840],{"type":38,"value":841},"Bassa (max(t₁, t₂, t₃))",{"type":33,"tag":798,"props":843,"children":844},{},[845],{"type":38,"value":846},"Alta (N agent simultanei)",{"type":33,"tag":798,"props":848,"children":849},{},[850],{"type":38,"value":851},"Media",{"type":33,"tag":798,"props":853,"children":854},{},[855],{"type":38,"value":856},"Compiti indipendenti (interroga 3 API contemporaneamente)",{"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},"Condizionale (DAG)",{"type":33,"tag":798,"props":869,"children":870},{},[871],{"type":38,"value":872},"Variabile",{"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},"Alta",{"type":33,"tag":798,"props":883,"children":884},{},[885],{"type":38,"value":886},"Flusso dinamico (se dati mancanti → X, altrimenti → 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},"Conversazionale",{"type":33,"tag":798,"props":899,"children":900},{},[901],{"type":38,"value":902},"Indeterminata",{"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 o negoziazione",{"type":33,"tag":34,"props":917,"children":918},{},[919,924],{"type":33,"tag":56,"props":920,"children":921},{},[922],{"type":38,"value":923},"Decisione in produzione:",{"type":38,"value":925}," Se l'operazione non è nel critical path (ad esempio, generazione di rapporto offline), scegli topologia seriale — debugging facile, costo basso. Se hai SLA di latenza (ad esempio, dashboard in tempo reale), fai fork in parallelo — ma implementa da zero la logica di retry, altrimenti quando 1 agent timeout, gli altri 3 aspettano.",{"type":33,"tag":41,"props":927,"children":929},{"id":928},"coordinamento-del-tool-use-prevenire-conflitti",[930],{"type":38,"value":931},"Coordinamento del Tool Use: Prevenire Conflitti",{"type":33,"tag":34,"props":933,"children":934},{},[935],{"type":38,"value":936},"Nel sistema multi-agent, il bug più frequente: 2 agent chiamano lo stesso strumento contemporaneamente con parametri diversi, uno corrompe lo stato dell'altro.",{"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},"Esempio:",{"type":38,"value":946}," L'agent A crea ",{"type":33,"tag":123,"props":948,"children":950},{"className":949},[],[951],{"type":38,"value":952},"temp_table_x",{"type":38,"value":954}," in BigQuery, l'agent B contemporaneamente tenta di leggerla — errore di dato assente. Questa \"race condition\" si risolve nel livello di orchestrazione:",{"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}," Quando l'agent A comincia a usare uno strumento, l'orchestrator lo blocca agli altri agent. In LangGraph si fa con ",{"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. Isolamento dello spazio dei nomi:",{"type":38,"value":1098}," Assegna a ogni agent uno spazio di lavoro separato. L'agent A usa ",{"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},". In CrewAI si fa con il prefisso ",{"type":33,"tag":123,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":38,"value":1120},"agent_id",{"type":38,"value":972},{"type":33,"tag":34,"props":1123,"children":1124},{},[1125,1130,1132,1138,1140,1146,1148,1154],{"type":33,"tag":56,"props":1126,"children":1127},{},[1128],{"type":38,"value":1129},"3. Progettazione idempotente degli strumenti:",{"type":38,"value":1131}," Scrivi gli strumenti idempotenti da zero — se chiamati 2 volte con gli stessi parametri, niente conflitti. Ad esempio, usa ",{"type":33,"tag":123,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":38,"value":1137},"upsert",{"type":38,"value":1139}," oppure ",{"type":33,"tag":123,"props":1141,"children":1143},{"className":1142},[],[1144],{"type":38,"value":1145},"create_or_replace",{"type":38,"value":1147}," anziché ",{"type":33,"tag":123,"props":1149,"children":1151},{"className":1150},[],[1152],{"type":38,"value":1153},"insert",{"type":38,"value":972},{"type":33,"tag":41,"props":1156,"children":1158},{"id":1157},"osservabilità-come-tracciare-lesecuzione-multi-agent",[1159],{"type":38,"value":1160},"Osservabilità: Come Tracciare l'Esecuzione Multi-Agent",{"type":33,"tag":34,"props":1162,"children":1163},{},[1164],{"type":38,"value":1165},"In produzione con 5 agent in esecuzione, uno ha un errore, quale? Strumenti come LangSmith, Helicone, Arize raccolgono tracce a livello di agent, ma è necessaria l'instrumentazione manuale.",{"type":33,"tag":34,"props":1167,"children":1168},{},[1169],{"type":33,"tag":56,"props":1170,"children":1171},{},[1172],{"type":38,"value":1173},"Metriche critiche:",{"type":33,"tag":1175,"props":1176,"children":1177},"ul",{},[1178,1197,1207,1217],{"type":33,"tag":1179,"props":1180,"children":1181},"li",{},[1182,1187,1189,1195],{"type":33,"tag":56,"props":1183,"children":1184},{},[1185],{"type":38,"value":1186},"Agent latency per step:",{"type":38,"value":1188}," Quanto ha impiegato ogni agent? Nel fork parallelo, ",{"type":33,"tag":123,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":38,"value":1194},"max(latency)",{"type":38,"value":1196}," identifica il collo di bottiglia.",{"type":33,"tag":1179,"props":1198,"children":1199},{},[1200,1205],{"type":33,"tag":56,"props":1201,"children":1202},{},[1203],{"type":38,"value":1204},"Tool call success rate:",{"type":38,"value":1206}," Quante volte ogni agent ha chiamato quale strumento, quante volte con successo? Sotto il 95% è un segnale di allarme.",{"type":33,"tag":1179,"props":1208,"children":1209},{},[1210,1215],{"type":33,"tag":56,"props":1211,"children":1212},{},[1213],{"type":38,"value":1214},"Retry count:",{"type":38,"value":1216}," Quante volte un agent ha fatto retry? Conteggio alto significa prompt errato o specifica dello strumento sbagliata.",{"type":33,"tag":1179,"props":1218,"children":1219},{},[1220,1225],{"type":33,"tag":56,"props":1221,"children":1222},{},[1223],{"type":38,"value":1224},"State transition diagram:",{"type":38,"value":1226}," Per LangGraph, da quale nodo a quale è avvenuta la transizione, quante volte? I loop infiniti si vedono qui.",{"type":33,"tag":116,"props":1228,"children":1230},{"className":118,"code":1229,"language":120,"meta":17,"style":17},"# Integrazione con 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",[1231],{"type":33,"tag":123,"props":1232,"children":1233},{"__ignoreMap":17},[1234,1243,1264,1271,1288,1330,1353,1380],{"type":33,"tag":127,"props":1235,"children":1236},{"class":129,"line":130},[1237],{"type":33,"tag":127,"props":1238,"children":1240},{"style":1239},"--shiki-default:#6A737D",[1241],{"type":38,"value":1242},"# Integrazione con LangSmith\n",{"type":33,"tag":127,"props":1244,"children":1245},{"class":129,"line":156},[1246,1250,1255,1259],{"type":33,"tag":127,"props":1247,"children":1248},{"style":134},[1249],{"type":38,"value":137},{"type":33,"tag":127,"props":1251,"children":1252},{"style":140},[1253],{"type":38,"value":1254}," langsmith ",{"type":33,"tag":127,"props":1256,"children":1257},{"style":134},[1258],{"type":38,"value":148},{"type":33,"tag":127,"props":1260,"children":1261},{"style":140},[1262],{"type":38,"value":1263}," Client\n",{"type":33,"tag":127,"props":1265,"children":1266},{"class":129,"line":166},[1267],{"type":33,"tag":127,"props":1268,"children":1269},{"emptyLinePlaceholder":160},[1270],{"type":38,"value":163},{"type":33,"tag":127,"props":1272,"children":1273},{"class":129,"line":185},[1274,1279,1283],{"type":33,"tag":127,"props":1275,"children":1276},{"style":140},[1277],{"type":38,"value":1278},"client ",{"type":33,"tag":127,"props":1280,"children":1281},{"style":134},[1282],{"type":38,"value":177},{"type":33,"tag":127,"props":1284,"children":1285},{"style":140},[1286],{"type":38,"value":1287}," Client()\n",{"type":33,"tag":127,"props":1289,"children":1290},{"class":129,"line":205},[1291,1296,1301,1306,1310,1315,1320,1325],{"type":33,"tag":127,"props":1292,"children":1293},{"style":134},[1294],{"type":38,"value":1295},"with",{"type":33,"tag":127,"props":1297,"children":1298},{"style":140},[1299],{"type":38,"value":1300}," client.trace(",{"type":33,"tag":127,"props":1302,"children":1303},{"style":389},[1304],{"type":38,"value":1305},"run_name",{"type":33,"tag":127,"props":1307,"children":1308},{"style":134},[1309],{"type":38,"value":177},{"type":33,"tag":127,"props":1311,"children":1312},{"style":194},[1313],{"type":38,"value":1314},"\"multi_agent_pipeline\"",{"type":33,"tag":127,"props":1316,"children":1317},{"style":140},[1318],{"type":38,"value":1319},") ",{"type":33,"tag":127,"props":1321,"children":1322},{"style":134},[1323],{"type":38,"value":1324},"as",{"type":33,"tag":127,"props":1326,"children":1327},{"style":140},[1328],{"type":38,"value":1329}," run:\n",{"type":33,"tag":127,"props":1331,"children":1332},{"class":129,"line":223},[1333,1338,1343,1348],{"type":33,"tag":127,"props":1334,"children":1335},{"style":134},[1336],{"type":38,"value":1337},"    for",{"type":33,"tag":127,"props":1339,"children":1340},{"style":140},[1341],{"type":38,"value":1342}," agent ",{"type":33,"tag":127,"props":1344,"children":1345},{"style":134},[1346],{"type":38,"value":1347},"in",{"type":33,"tag":127,"props":1349,"children":1350},{"style":140},[1351],{"type":38,"value":1352}," agents:\n",{"type":33,"tag":127,"props":1354,"children":1355},{"class":129,"line":232},[1356,1361,1366,1371,1375],{"type":33,"tag":127,"props":1357,"children":1358},{"style":134},[1359],{"type":38,"value":1360},"        with",{"type":33,"tag":127,"props":1362,"children":1363},{"style":140},[1364],{"type":38,"value":1365}," run.create_child(",{"type":33,"tag":127,"props":1367,"children":1368},{"style":389},[1369],{"type":38,"value":1370},"name",{"type":33,"tag":127,"props":1372,"children":1373},{"style":134},[1374],{"type":38,"value":177},{"type":33,"tag":127,"props":1376,"children":1377},{"style":140},[1378],{"type":38,"value":1379},"agent.name):\n",{"type":33,"tag":127,"props":1381,"children":1382},{"class":129,"line":246},[1383],{"type":33,"tag":127,"props":1384,"children":1385},{"style":140},[1386],{"type":38,"value":1387},"            agent.run()\n",{"type":33,"tag":41,"props":1389,"children":1391},{"id":1390},"gestione-della-finestra-di-contesto-memoria-condivisa-vs-isolata",[1392],{"type":38,"value":1393},"Gestione della Finestra di Contesto: Memoria Condivisa vs Isolata",{"type":33,"tag":34,"props":1395,"children":1396},{},[1397],{"type":38,"value":1398},"Nel sistema multi-agent, la risorsa più critica è la finestra di contesto. Con 5 agent, condividono gli stessi 128K token, oppure ogni agente ne ha 128K separati?",{"type":33,"tag":34,"props":1400,"children":1401},{},[1402,1407],{"type":33,"tag":56,"props":1403,"children":1404},{},[1405],{"type":38,"value":1406},"Memoria condivisa (LangGraph per impostazione predefinita):",{"type":38,"value":1408}," Tutti gli agent leggono e scrivono nello stesso oggetto stato. Vantaggio: i risultati dell'agent A passano automaticamente all'agent B. Svantaggio: inquinamento del contesto — i dati non rilevanti per l'agent C gonfiamo la finestra.",{"type":33,"tag":34,"props":1410,"children":1411},{},[1412,1417],{"type":33,"tag":56,"props":1413,"children":1414},{},[1415],{"type":38,"value":1416},"Memoria isolata + message passing:",{"type":38,"value":1418}," Ogni agent mantiene il proprio stato, passa solo i dati necessari tramite messaggio. CrewAI segue questo pattern. Vantaggio: efficienza dei token elevata. Svantaggio: serializzazione manuale dei dati.",{"type":33,"tag":34,"props":1420,"children":1421},{},[1422,1427,1429,1435],{"type":33,"tag":56,"props":1423,"children":1424},{},[1425],{"type":38,"value":1426},"Ibrida (consigliata):",{"type":38,"value":1428}," Nello stato condiviso tieni solo metadati (quale agent ha fatto cosa, quando ha finito), scrivi i dati reali su disco\u002FDB, passa agli agent un riferimento. Ad esempio, salva il risultato di BigQuery su GCS, dai agli agent il path ",{"type":33,"tag":123,"props":1430,"children":1432},{"className":1431},[],[1433],{"type":38,"value":1434},"gs:\u002F\u002Fbucket\u002Fresult.parquet",{"type":38,"value":972},{"type":33,"tag":41,"props":1437,"children":1439},{"id":1438},"gestione-degli-errori-cosa-accade-quando-un-agent-cade",[1440],{"type":38,"value":1441},"Gestione degli Errori: Cosa Accade Quando un Agent Cade?",{"type":33,"tag":34,"props":1443,"children":1444},{},[1445],{"type":38,"value":1446},"In topologia seriale: l'agent 2 cade, pipeline si interrompe — semplice. In parallelo: l'agent B cade, ma gli agent A e C continuano — alla fine crei un rapporto con dati incompleti. Nel livello di orchestrazione è necessaria la logica \"partial success\".",{"type":33,"tag":34,"props":1448,"children":1449},{},[1450],{"type":33,"tag":56,"props":1451,"children":1452},{},[1453],{"type":38,"value":1454},"Strategie:",{"type":33,"tag":1456,"props":1457,"children":1458},"ol",{},[1459,1469,1479],{"type":33,"tag":1179,"props":1460,"children":1461},{},[1462,1467],{"type":33,"tag":56,"props":1463,"children":1464},{},[1465],{"type":38,"value":1466},"Fail-fast (seriale):",{"type":38,"value":1468}," Il primo errore ferma l'intera pipeline. Se la latenza non importa, preferibile.",{"type":33,"tag":1179,"props":1470,"children":1471},{},[1472,1477],{"type":33,"tag":56,"props":1473,"children":1474},{},[1475],{"type":38,"value":1476},"Best-effort (parallela):",{"type":38,"value":1478}," Esegui il maggior numero possibile di agent, crea output anche con dati mancanti — ma nel metadata aggiungi il flag \"incomplete\".",{"type":33,"tag":1179,"props":1480,"children":1481},{},[1482,1487],{"type":33,"tag":56,"props":1483,"children":1484},{},[1485],{"type":38,"value":1486},"Retry con fallback:",{"type":38,"value":1488}," L'agent A ha tentato 3 volte senza successo, interroga l'agent A_backup (modello diverso oppure prompt diverso).",{"type":33,"tag":116,"props":1490,"children":1492},{"className":118,"code":1491,"language":120,"meta":17,"style":17},"# Retry in LangGraph\nworkflow.add_node(\"agent_a\", agent_a, retry_policy={\"max_attempts\": 3})\nworkflow.add_edge(\"agent_a\", \"agent_a_backup\", condition=\"failed\")\n",[1493],{"type":33,"tag":123,"props":1494,"children":1495},{"__ignoreMap":17},[1496,1504,1552],{"type":33,"tag":127,"props":1497,"children":1498},{"class":129,"line":130},[1499],{"type":33,"tag":127,"props":1500,"children":1501},{"style":1239},[1502],{"type":38,"value":1503},"# Retry in LangGraph\n",{"type":33,"tag":127,"props":1505,"children":1506},{"class":129,"line":156},[1507,1511,1516,1521,1526,1530,1534,1539,1543,1548],{"type":33,"tag":127,"props":1508,"children":1509},{"style":140},[1510],{"type":38,"value":191},{"type":33,"tag":127,"props":1512,"children":1513},{"style":194},[1514],{"type":38,"value":1515},"\"agent_a\"",{"type":33,"tag":127,"props":1517,"children":1518},{"style":140},[1519],{"type":38,"value":1520},", agent_a, ",{"type":33,"tag":127,"props":1522,"children":1523},{"style":389},[1524],{"type":38,"value":1525},"retry_policy",{"type":33,"tag":127,"props":1527,"children":1528},{"style":134},[1529],{"type":38,"value":177},{"type":33,"tag":127,"props":1531,"children":1532},{"style":140},[1533],{"type":38,"value":639},{"type":33,"tag":127,"props":1535,"children":1536},{"style":194},[1537],{"type":38,"value":1538},"\"max_attempts\"",{"type":33,"tag":127,"props":1540,"children":1541},{"style":140},[1542],{"type":38,"value":1030},{"type":33,"tag":127,"props":1544,"children":1545},{"style":642},[1546],{"type":38,"value":1547},"3",{"type":33,"tag":127,"props":1549,"children":1550},{"style":140},[1551],{"type":38,"value":650},{"type":33,"tag":127,"props":1553,"children":1554},{"class":129,"line":166},[1555,1560,1564,1568,1573,1577,1582,1586,1591],{"type":33,"tag":127,"props":1556,"children":1557},{"style":140},[1558],{"type":38,"value":1559},"workflow.add_edge(",{"type":33,"tag":127,"props":1561,"children":1562},{"style":194},[1563],{"type":38,"value":1515},{"type":33,"tag":127,"props":1565,"children":1566},{"style":140},[1567],{"type":38,"value":406},{"type":33,"tag":127,"props":1569,"children":1570},{"style":194},[1571],{"type":38,"value":1572},"\"agent_a_backup\"",{"type":33,"tag":127,"props":1574,"children":1575},{"style":140},[1576],{"type":38,"value":406},{"type":33,"tag":127,"props":1578,"children":1579},{"style":389},[1580],{"type":38,"value":1581},"condition",{"type":33,"tag":127,"props":1583,"children":1584},{"style":134},[1585],{"type":38,"value":177},{"type":33,"tag":127,"props":1587,"children":1588},{"style":194},[1589],{"type":38,"value":1590},"\"failed\"",{"type":33,"tag":127,"props":1592,"children":1593},{"style":140},[1594],{"type":38,"value":290},{"type":33,"tag":41,"props":1596,"children":1598},{"id":1597},"checklist-produzione-prima-di-mettere-in-produzione-il-sistema-multi-agent",[1599],{"type":38,"value":1600},"Checklist Produzione: Prima di Mettere in Produzione il Sistema Multi-Agent",{"type":33,"tag":1175,"props":1602,"children":1603},{},[1604,1614,1624,1634,1644],{"type":33,"tag":1179,"props":1605,"children":1606},{},[1607,1612],{"type":33,"tag":56,"props":1608,"children":1609},{},[1610],{"type":38,"value":1611},"Calcola il budget di token:",{"type":38,"value":1613}," 5 agent × 10K token input × 2K output × prezzo API = costo per run. 1000 run al giorno = costo mensile?",{"type":33,"tag":1179,"props":1615,"children":1616},{},[1617,1622],{"type":33,"tag":56,"props":1618,"children":1619},{},[1620],{"type":38,"value":1621},"Definisci SLA di latenza:",{"type":38,"value":1623}," Quale agent deve impiegare quanto tempo? Se la latenza P95 supera 10 secondi, serve topologia parallela.",{"type":33,"tag":1179,"props":1625,"children":1626},{},[1627,1632],{"type":33,"tag":56,"props":1628,"children":1629},{},[1630],{"type":38,"value":1631},"Piano di rollback:",{"type":38,"value":1633}," Cambiare il prompt di un agent può rompere l'intera pipeline. Versionamento + deployment canary sono obbligatori.",{"type":33,"tag":1179,"props":1635,"children":1636},{},[1637,1642],{"type":33,"tag":56,"props":1638,"children":1639},{},[1640],{"type":38,"value":1641},"Punto human-in-the-loop:",{"type":38,"value":1643}," Per decisioni critiche (ad esempio, regolazione del budget), mostra l'output finale all'utente e richiedi approvazione.",{"type":33,"tag":1179,"props":1645,"children":1646},{},[1647,1652],{"type":33,"tag":56,"props":1648,"children":1649},{},[1650],{"type":38,"value":1651},"Audit log:",{"type":38,"value":1653}," Ogni step di ogni agent — quale strumento è stato invocato, con quali parametri, che cosa ha restituito — scritto come JSON su S3. Necessario per compliance.",{"type":33,"tag":34,"props":1655,"children":1656},{},[1657],{"type":38,"value":1658},"L'orchestrazione multi-agent è la \"lezione di sistemi\" dell'ingegneria LLM. Dai una singola chiamata di modello in uno scenario iniziale, e in produzione richiedi topologia, gestione dello stato, logica di retry, osservabilità. LangGraph, CrewAI, AutoGen sono solo scheletri — il lavoro vero è decidere come disporre e parallelizzare gli agent per il tuo caso d'uso. Prendi il prototipo, misura la latenza, simula il costo, quindi scegli la topologia. Non mettere in produzione senza test — nei sistemi multi-agent tra \"funziona\" e \"production-ready\" ci sono 10 livelli.",{"type":33,"tag":1660,"props":1661,"children":1662},"style",{},[1663],{"type":38,"value":1664},"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":1666},[1667,1668,1669,1670,1671,1672,1673,1674],{"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":1157,"depth":156,"text":1160},{"id":1390,"depth":156,"text":1393},{"id":1438,"depth":156,"text":1441},{"id":1597,"depth":156,"text":1600},"markdown","content:it:ai:multi-agent-orchestration-topologie-di-produzione.md","content","it\u002Fai\u002Fmulti-agent-orchestration-topologie-di-produzione.md","it\u002Fai\u002Fmulti-agent-orchestration-topologie-di-produzione","md",1785967480312]