{"id":2497,"date":"2025-09-17T16:04:19","date_gmt":"2025-09-17T14:04:19","guid":{"rendered":"https:\/\/davidka.net\/ru\/?p=2497"},"modified":"2025-09-21T02:07:01","modified_gmt":"2025-09-21T00:07:01","slug":"langchain-and-langgraph","status":"publish","type":"post","link":"https:\/\/it.davidka.net\/it\/langchain-and-langgraph\/","title":{"rendered":"LangChain e LangGraph"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/davidka.net\/wp-content\/uploads\/2025\/09\/Gemini_Generated_Image_4qfxm74qfxm74qfx.png\" alt=\"\" class=\"wp-image-2871\" srcset=\"https:\/\/it.davidka.net\/wp-content\/uploads\/2025\/09\/Gemini_Generated_Image_4qfxm74qfxm74qfx.png 1024w, https:\/\/it.davidka.net\/wp-content\/uploads\/2025\/09\/Gemini_Generated_Image_4qfxm74qfxm74qfx-300x300.png 300w, https:\/\/it.davidka.net\/wp-content\/uploads\/2025\/09\/Gemini_Generated_Image_4qfxm74qfxm74qfx-150x150.png 150w, https:\/\/it.davidka.net\/wp-content\/uploads\/2025\/09\/Gemini_Generated_Image_4qfxm74qfxm74qfx-768x768.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lo sviluppo con i modelli linguistici di grandi dimensioni (LLM) inizia tipicamente con un semplice ciclo di richiesta-risposta. Ma non appena il compito va oltre quello di un semplice chatbot e richiede al modello di eseguire azioni reali \u2014 come integrare <code class=\"\" data-line=\"\">tools<\/code> esterni, lavorare con database o accedere al file system \u2014 ci si scontra con una sfida fondamentale. L&#8217;API standard di un modello \u00e8 intrinsecamente <strong>stateless<\/strong> (senza stato) e manca di meccanismi integrati per la gestione di logiche complesse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un compito apparentemente semplice come &#8220;analizza questo file, trova dati pertinenti online e genera un report&#8221; si trasforma in una complessa sfida di orchestrazione:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Come si gestisce lo stato e si passa il contesto tra molteplici chiamate al LLM?<\/li>\n\n\n\n<li>Come si implementa una logica ciclica, in cui un agente interagisce ripetutamente con gli strumenti finch\u00e9 non raggiunge un obiettivo?<\/li>\n\n\n\n<li>Come si standardizzano le connessioni a diversi modelli (OpenAI, Gemini, locali) e strumenti senza dover riscrivere il codice ogni volta?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>LangChain<\/strong> e <strong>LangGraph<\/strong> sono stati creati per semplificare lo sviluppo di tali sistemi e fornire agli sviluppatori un approccio standardizzato a questa sfida di orchestrazione:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LangChain<\/strong> fornisce un toolkit unificato: interfacce standardizzate per i modelli, componenti per i prompt e gli strumenti.<\/li>\n\n\n\n<li><strong>LangGraph<\/strong> \u00e8 un framework costruito su LangChain che permette di costruire la logica decisionale dell&#8217;agente come un grafo di stati, risolvendo elegantemente il problema dei cicli e delle biforcazioni.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Per comprendere meglio i loro ruoli, usiamo un&#8217;analogia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Immagina di costruire qualcosa con i LEGO. Hai i singoli mattoncini (motori, ruote, blocchi), ma da soli sono solo pezzi. Per assemblare una macchina funzionante, hai bisogno di istruzioni e di capire come collegare questi pezzi tra loro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel mondo degli agenti IA:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LangChain<\/strong> \u00e8 il tuo set di mattoncini LEGO high-tech.<\/li>\n\n\n\n<li><strong>LangGraph<\/strong> \u00e8 il manuale di istruzioni avanzato che ti permette di assemblare questi mattoncini non solo in modelli statici, ma in meccanismi dinamici e &#8220;intelligenti&#8221; capaci di prendere decisioni.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analizziamo ciascuno di questi strumenti separatamente.<\/p>\n\n\n\n<div id=\"rtoc-mokuji-wrapper\" class=\"rtoc-mokuji-content frame2 preset1 animation-fade rtoc_open default\" data-id=\"2497\" data-theme=\"Neve - Davidka\">\n\t\t\t<div id=\"rtoc-mokuji-title\" class=\"rtoc_btn_none rtoc_left\">\n\t\t\t\n\t\t\t<span>In Questo Articolo<\/span>\n\t\t\t<\/div><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-1\">Parte 1: LangChain \u2014 Il toolkit per lavorare con i LLM<\/a><ul class=\"rtoc-mokuji mokuji_none level-3\"><li class=\"rtoc-item\"><a href=\"#rtoc-2\">Componenti chiave di LangChain (I nostri &#8220;mattoncini&#8221;):<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-3\">Parte 2: LangGraph \u2014 L&#8217;orchestratore per creare agenti<\/a><ul class=\"rtoc-mokuji mokuji_none level-3\"><li class=\"rtoc-item\"><a href=\"#rtoc-4\">Componenti chiave di LangGraph (Elementi del diagramma di flusso):<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-5\">LangChain vs. LangGraph: Quando usare cosa?<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-6\">Mettiamo tutto insieme<\/a><\/li><\/ul><\/li><\/ol><\/div><h3 id=\"rtoc-1\"  class=\"wp-block-heading\">Parte 1: LangChain \u2014 Il toolkit per lavorare con i LLM<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>L&#8217;obiettivo principale di LangChain:<\/strong> semplificare e standardizzare l&#8217;interazione tra il tuo codice e i Modelli Linguistici di Grandi Dimensioni (LLM). Fornisce componenti pronti all&#8217;uso (&#8220;mattoncini&#8221;) per risolvere compiti comuni.<\/p>\n\n\n\n<h4 id=\"rtoc-2\"  class=\"wp-block-heading\">Componenti chiave di LangChain (I nostri &#8220;mattoncini&#8221;):<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Modelli (<code class=\"\" data-line=\"\">Models<\/code>)<\/strong><br>Sono dei &#8220;wrapper&#8221; per l&#8217;interazione diretta con le reti neurali. LangChain li divide in due tipi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code class=\"\" data-line=\"\">LLMs<\/code>:<\/strong> L&#8217;interfaccia pi\u00f9 vecchia. Prende in input una stringa e restituisce una stringa.\n<ul class=\"wp-block-list\">\n<li><em>Esempio:<\/em> <code class=\"\" data-line=\"\">llm.invoke(&quot;Di che colore \u00e8 il cielo?&quot;)<\/code> \u2192 <code class=\"\" data-line=\"\">&quot;Il cielo \u00e8 blu.&quot;<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code class=\"\" data-line=\"\">ChatModels<\/code>:<\/strong> L&#8217;interfaccia moderna e pi\u00f9 potente. Lavora con una lista di messaggi (<code class=\"\" data-line=\"\">HumanMessage<\/code>, <code class=\"\" data-line=\"\">AIMessage<\/code>, <code class=\"\" data-line=\"\">SystemMessage<\/code>). Questo permette al modello di comprendere meglio il contesto di una conversazione.\n<ul class=\"wp-block-list\">\n<li><em>Esempio:<\/em> <code class=\"\" data-line=\"\">chat.invoke([HumanMessage(content=&quot;Di che colore \u00e8 il cielo?&quot;)])<\/code> \u2192 <code class=\"\" data-line=\"\">AIMessage(content=&quot;Il cielo \u00e8 generalmente blu...&quot;)<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"> LangChain unifica l&#8217;API. Non hai bisogno di imparare a lavorare separatamente con OpenAI, Gemini o un Ollama locale. Sostituisci semplicemente un oggetto come <code class=\"\" data-line=\"\">ChatOpenAI<\/code> con <code class=\"\" data-line=\"\">ChatGoogleGenerativeAI<\/code> o <code class=\"\" data-line=\"\">ChatOllama<\/code>, e il resto del tuo codice continuer\u00e0 a funzionare.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Prompt<\/strong><br>Sono dei template per le tue richieste al modello. Invece di comporre manualmente il testo della richiesta ogni volta, crei un template con delle variabili.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from langchain_core.prompts import ChatPromptTemplate\n\ntemplate = ChatPromptTemplate.from_messages(&#091;\n    (&quot;system&quot;, &quot;Sei un assistente utile che traduce il testo in {output_language}.&quot;),\n    (&quot;human&quot;, &quot;{text_to_translate}&quot;)\n])\n\nprompt_value = template.invoke({&quot;output_language&quot;: &quot;francese&quot;, &quot;text_to_translate&quot;: &quot;Amo programmare.&quot;})<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"> I prompt rendono le tue richieste <strong>riproducibili, sicure e facilmente modificabili<\/strong>. Separi la logica di formattazione della richiesta dalla logica di chiamata del modello.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Catene (<code class=\"\" data-line=\"\">Chains<\/code> e il linguaggio LCEL)<\/strong><br>Questo \u00e8 il cuore del primo LangChain. Una catena \u00e8 una connessione sequenziale di pi\u00f9 componenti. Oggi, per questo si usa il <strong>LangChain Expression Language (LCEL)<\/strong>, che assomiglia a una pipeline (<code class=\"\" data-line=\"\">|<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La catena pi\u00f9 semplice: <code class=\"\" data-line=\"\">prompt | modello<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">chain = template | get_gemini_llm()\nresponse = chain.invoke({&quot;output_language&quot;: &quot;tedesco&quot;, &quot;text_to_translate&quot;: &quot;Ciao, mondo!&quot;})\n# response.content conterr\u00e0 &quot;Hallo, Welt!&quot;<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"> Le catene ti permettono di creare flussi di lavoro semplici. Ad esempio, prima ottenere dati dall&#8217;utente, poi formattare un prompt, inviarlo al modello e, infine, elaborare la risposta.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. Parser di output (<code class=\"\" data-line=\"\">Output Parsers<\/code>)<\/strong><br>I modelli restituiscono testo, ma nelle applicazioni spesso abbiamo bisogno di dati strutturati (JSON, una lista, un numero). I parser convertono la risposta testuale &#8220;grezza&#8221; del modello nel formato desiderato.<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from langchain_core.output_parsers import JsonOutputParser\n\n# ... creiamo un prompt che chiede al modello di rispondere in formato JSON\nparser = JsonOutputParser()\nchain = template | get_openai_llm() | parser\n\n# Ora chain.invoke(...) non restituir\u00e0 un oggetto di testo, ma un dizionario Python (dict)<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"> Affinch\u00e9 il tuo codice possa lavorare programmaticamente con il risultato. Invece di cercare di estrarre i dati necessari da una stringa, ottieni direttamente un oggetto pronto all&#8217;uso.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5. Strumenti (<code class=\"\" data-line=\"\">Tools<\/code>)<\/strong><br>Questo \u00e8 ci\u00f2 che d\u00e0 &#8220;le mani&#8221; al modello. Uno strumento \u00e8 una qualsiasi funzione che un agente pu\u00f2 chiamare. Potrebbe essere:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Una ricerca su internet (<code class=\"\" data-line=\"\">TavilySearch<\/code>, <code class=\"\" data-line=\"\">BraveSearch<\/code>).<\/li>\n\n\n\n<li>Una calcolatrice.<\/li>\n\n\n\n<li>Una funzione per leggere un file dal disco.<\/li>\n\n\n\n<li>Una chiamata alla tua API interna.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"> Un modello da solo non sa che tempo fa oggi o cosa c&#8217;\u00e8 scritto nel tuo file <code class=\"\" data-line=\"\">report.docx<\/code>. Gli strumenti sono l&#8217;unico modo per accedere a informazioni esterne ed eseguire azioni nel mondo reale.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-3\"  class=\"wp-block-heading\">Parte 2: LangGraph \u2014 L&#8217;orchestratore per creare agenti<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Se LangChain \u00e8 l&#8217;insieme dei pezzi, <strong>LangGraph \u00e8 il sistema di controllo<\/strong> che decide quale pezzo usare e in quale momento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Il problema che LangGraph risolve:<\/strong> Le catene classiche (<code class=\"\" data-line=\"\">chains<\/code>) in LangChain sono <strong>lineari<\/strong>. Vanno da un punto A a un punto B. Ma i compiti reali non sono lineari. Richiedono <strong>cicli, biforcazioni e processi decisionali<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ad esempio, un agente di ricerca deve:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Comprendere la richiesta.<\/li>\n\n\n\n<li><strong>Decidere:<\/strong> \u00e8 necessaria una ricerca su internet?<\/li>\n\n\n\n<li>Se s\u00ec \u2192 usare lo strumento di ricerca.<\/li>\n\n\n\n<li>Analizzare i risultati.<\/li>\n\n\n\n<li><strong>Decidere:<\/strong> le informazioni sono sufficienti?<\/li>\n\n\n\n<li>Se no \u2192 tornare al punto 3 con una query pi\u00f9 precisa (questo \u00e8 un <strong>ciclo<\/strong>).<\/li>\n\n\n\n<li>Se s\u00ec \u2192 generare la risposta finale.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Una logica cos\u00ec complessa non pu\u00f2 essere descritta con una semplice catena.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>L&#8217;idea centrale di LangGraph:<\/strong> rappresentare il lavoro di un agente come un <strong>grafo di stati<\/strong> (o un diagramma di flusso).<\/p>\n\n\n\n<h4 id=\"rtoc-4\"  class=\"wp-block-heading\">Componenti chiave di LangGraph (Elementi del diagramma di flusso):<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Stato (<code class=\"\" data-line=\"\">State<\/code>)<\/strong><br>\u00c8 la <strong>memoria centrale<\/strong> dell&#8217;intero processo. Di solito \u00e8 un dizionario Python (<code class=\"\" data-line=\"\">TypedDict<\/code>) che viene passato da un passo all&#8217;altro. Ogni passo pu\u00f2 leggere dati da esso e scriverne di nuovi.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Esempio di stato:<\/strong> <code class=\"\" data-line=\"\">{&quot;user_request&quot;: &quot;...&quot;, &quot;search_results&quot;: [], &quot;final_answer&quot;: None}<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Nodi (<code class=\"\" data-line=\"\">Nodes<\/code>)<\/strong><br>Sono i <strong>blocchi di azione<\/strong> nel tuo diagramma di flusso. Ogni nodo \u00e8 una funzione Python che:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Prende in input lo <code class=\"\" data-line=\"\">stato<\/code> corrente.<\/li>\n\n\n\n<li>Esegue un&#8217;azione (chiama un LLM, usa uno strumento).<\/li>\n\n\n\n<li>Restituisce lo <code class=\"\" data-line=\"\">stato<\/code> <strong>aggiornato<\/strong>.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Esempi di nodi:<\/strong> <code class=\"\" data-line=\"\">call_model_node<\/code>, <code class=\"\" data-line=\"\">execute_tool_node<\/code>, <code class=\"\" data-line=\"\">analyze_results_node<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Archi (<code class=\"\" data-line=\"\">Edges<\/code>)<\/strong><br>Sono le <strong>frecce<\/strong> che collegano i nodi. Determinano quale nodo verr\u00e0 eseguito successivamente. Esistono due tipi di archi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Archi normali:<\/strong> Collegano semplicemente il nodo A al nodo B. Dopo che A \u00e8 terminato, B verr\u00e0 sempre eseguito.<\/li>\n\n\n\n<li><strong>Archi condizionali (<code class=\"\" data-line=\"\">Conditional Edges<\/code>):<\/strong> Questa \u00e8 la <strong>parte pi\u00f9 importante<\/strong>. Dopo il nodo A, viene eseguita una speciale funzione &#8220;router&#8221; che guarda lo <code class=\"\" data-line=\"\">stato<\/code> corrente e decide dove andare dopo: al nodo B, C o D.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Esempio di arco condizionale:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dopo aver chiamato il modello (il nodo <code class=\"\" data-line=\"\">agent_node<\/code>), controlliamo lo <code class=\"\" data-line=\"\">stato<\/code>.<\/li>\n\n\n\n<li><strong>Se<\/strong> nella risposta del modello c&#8217;\u00e8 una chiamata a uno strumento \u2192 andiamo al nodo <code class=\"\" data-line=\"\">execute_tool_node<\/code>.<\/li>\n\n\n\n<li><strong>Se<\/strong> non c&#8217;\u00e8 una chiamata a uno strumento \u2192 andiamo al nodo finale <code class=\"\" data-line=\"\">END<\/code>.<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-5\"  class=\"wp-block-heading\">LangChain vs. LangGraph: Quando usare cosa?<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Criterio<\/th><th class=\"has-text-align-left\" data-align=\"left\">LangChain (Catene LCEL)<\/th><th class=\"has-text-align-left\" data-align=\"left\">LangGraph<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Caso d&#8217;uso principale<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Compiti semplici e lineari<\/td><td class=\"has-text-align-left\" data-align=\"left\">Compiti complessi e ciclici (agenti)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Struttura<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Pipeline (A \u2192 B \u2192 C)<\/td><td class=\"has-text-align-left\" data-align=\"left\">Grafo (diagramma di flusso con biforcazioni e cicli)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Flusso di controllo<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Deterministico, predefinito<\/td><td class=\"has-text-align-left\" data-align=\"left\">Dinamico, determinato in fase di esecuzione<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Esempio di compito<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">1. Prendere un testo.<br>2. Riassumerlo.<br>3. Tradurlo in un&#8217;altra lingua.<\/td><td class=\"has-text-align-left\" data-align=\"left\">1. Ricevere una domanda.<br>2. Cercare su internet finch\u00e9 non si trova una risposta.<br>3. Riassumere i risultati e rispondere.<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Analogia<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Una catena di montaggio in una fabbrica<\/td><td class=\"has-text-align-left\" data-align=\"left\">Un team di persone che discute e prende decisioni<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 id=\"rtoc-6\"  class=\"wp-block-heading\">Mettiamo tutto insieme<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>L&#8217;<strong>input dell&#8217;utente<\/strong> entra nello <strong>Stato<\/strong> iniziale di LangGraph.<\/li>\n\n\n\n<li>Il <strong>Nodo &#8220;Agente&#8221;<\/strong> riceve lo stato. All&#8217;interno di questo nodo c&#8217;\u00e8 una <strong>catena LangChain<\/strong> (<code class=\"\" data-line=\"\">prompt | modello | parser<\/code>). Il modello, usando gli <strong>Strumenti<\/strong> di LangChain, decide cosa fare dopo (es. &#8220;chiamare la ricerca&#8221;). La sua decisione viene scritta nello <strong>Stato<\/strong>.<\/li>\n\n\n\n<li>Un <strong>Arco Condizionale<\/strong> analizza lo stato e dirige il flusso verso il <strong>Nodo &#8220;Esecutore di Strumenti&#8221;<\/strong>.<\/li>\n\n\n\n<li>Questo nodo esegue la chiamata reale allo strumento (es. fa una ricerca web) e scrive il risultato di nuovo nello <strong>Stato<\/strong>.<\/li>\n\n\n\n<li>Il flusso torna al <strong>Nodo &#8220;Agente&#8221;<\/strong> (questo \u00e8 un <strong>ciclo<\/strong>). Ora il modello vede il risultato della ricerca e prende una nuova decisione.<\/li>\n\n\n\n<li>Il ciclo si ripete finch\u00e9 il modello non decide che il compito \u00e8 completato. A quel punto, l&#8217;<strong>Arco Condizionale<\/strong> diriger\u00e0 il flusso verso la fine.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Immagina di costruire qualcosa con i LEGO. Hai i singoli mattoncini (motori, ruote, blocchi), ma da soli sono solo pezzi. Per assemblare una macchina funzionante, hai bisogno di istruzioni e di capire come collegare questi pezzi tra loro.<\/p>\n","protected":false},"author":1,"featured_media":2871,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[394],"tags":[104,863,864,169],"class_list":["post-2497","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatics-tips","tag-tag-ai-agent","tag-tag-langchain","tag-tag-langgraph","tag-169"],"acf":[],"_links":{"self":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/2497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/comments?post=2497"}],"version-history":[{"count":0,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/2497\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/media\/2871"}],"wp:attachment":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/media?parent=2497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/categories?post=2497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/tags?post=2497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}