<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
  <channel>
    <title>Tecnica | Irene Burresi</title>
    <link>https://ireneburresi.dev/</link>
    <description>Progettazione e implementazione di sistemi AI in produzione. RAG, orchestrazione di agent, scelte architetturali e pattern consolidati per deployment scalabili.</description>
    <language>it-IT</language>
    <copyright>© 2026 Irene Burresi · CC-BY-4.0</copyright>
    <managingEditor>Irene Burresi</managingEditor>
    <webMaster>Irene Burresi</webMaster>
    <generator>Astro Feed Engine</generator>
    <docs>https://www.rssboard.org/rss-specification</docs>
    <ttl>360</ttl>
    <lastBuildDate>Sun, 15 Mar 2026 16:26:22 GMT</lastBuildDate>
    <pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate>
    <atom:link href="https://ireneburresi.dev/ingegneria-ai/rss.xml" rel="self" type="application/rss+xml"/>
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com/"/>
    <image>
      <url>https://ireneburresi.dev/images/og-default.svg</url>
      <title>Tecnica | Irene Burresi</title>
      <link>https://ireneburresi.dev/</link>
    </image>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Testing Non-Deterministico: Come si fa QA sugli Agenti?</title>
      <link>https://ireneburresi.dev/blog/engineering/testing-non-deterministico/</link>
      <guid isPermaLink="true">https://ireneburresi.dev/blog/engineering/testing-non-deterministico/</guid>
      <pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate>
      <dc:creator>Irene Burresi</dc:creator>
      <dc:language>it</dc:language>
      <description><![CDATA[<p>I test unitari non bastano quando il software improvvisa. Metodologie, framework e metriche per valutare affidabilità e sicurezza di sistemi agentici complessi prima del deploy: property-based testing, LLM-as-judge, red teaming automatizzato, fuzzing.</p>]]></description>
      <content:encoded><![CDATA[<h2>Il problema: assert non basta più</h2>
<p><em>Il 73% delle organizzazioni cita l’affidabilità come barriera principale al deploy di agenti in produzione. Non perché manchino i test, ma perché i test tradizionali non catturano i failure mode di sistemi che “improvvisano”.</em></p>
<p><strong>TL;DR:</strong> Testare agenti AI richiede un cambio di paradigma. I test unitari tradizionali verificano output deterministici: dato input X, attendi output Y. Gli agenti generano output diversi a ogni esecuzione, usano tool in sequenze imprevedibili, falliscono in modi che non crashano ma producono risultati sbagliati. Servono nuove metodologie: property-based testing per definire invarianti invece di output attesi, LLM-as-judge per valutazione scalabile, red teaming automatizzato per sicurezza, fuzzing adattato per stress-testing. I framework esistono: DeepEval, Opik, LangSmith, DeepTeam, PyRIT. Chi li adotta prima del deploy evita i silent failure che emergono solo in produzione.</p>
<hr />
<p>Un test unitario classico funziona così: chiami una funzione con input noti, verifichi che l’output corrisponda a un valore atteso. Se <code>sum(2, 3)</code> restituisce 5, il test passa. È deterministico, ripetibile, binario.</p>
<p>Ora prova a testare un agente che deve rispondere a “trova i ristoranti italiani aperti stasera vicino a me”. L’agente potrebbe chiamare un’API di geolocalizzazione, poi un servizio di ricerca locale, poi filtrare per orario. Oppure potrebbe cercare prima su Google Maps, poi verificare gli orari sui siti dei singoli ristoranti. Ogni esecuzione può produrre sequenze di azioni diverse, risultati diversi, formulazioni diverse della risposta finale.</p>
<p>Come scrivi un <code>assertEquals()</code> per questo?</p>
<p>Il problema non è solo la variabilità dell’output. È che i failure mode degli agenti sono fondamentalmente diversi da quelli del software tradizionale.</p>
<p>Un bug classico crasha o restituisce un errore. Un agente che “fallisce” potrebbe restituire una risposta perfettamente formattata, grammaticalmente corretta, apparentemente ragionevole, ma fattualmente sbagliata. Potrebbe scegliere tool inappropriati. Potrebbe allucinare informazioni. Potrebbe seguire un piano che sembra logico ma non risolve il task originale.</p>
<p>Il sistema non crasha. Non lancia eccezioni. Completa l’esecuzione. Solo che il risultato è sbagliato.</p>
<p>Questo è il cuore del problema: i test tradizionali non catturano i <em>silent failure</em>. E i silent failure sono la norma, non l’eccezione, nei sistemi agentici.</p>
<hr />
<h2>Tassonomia: cosa stai cercando di testare</h2>
<p>Prima di scegliere metodologie, serve chiarire cosa significa “testare un agente”. Un <a href="https://arxiv.org/abs/2503.16416">paper del 2025 su arXiv</a> propone una tassonomia bidimensionale che aiuta a orientarsi.</p>
<p>La prima dimensione riguarda l’<strong>oggetto della valutazione</strong>:</p>
<p><strong>Behavior:</strong> L’agente si comporta come previsto? Segue le istruzioni? Rispetta i vincoli?</p>
<p><strong>Capabilities:</strong> L’agente è in grado di completare determinati task? Quali classi di problemi risolve?</p>
<p><strong>Reliability:</strong> L’agente produce risultati consistenti? Quanto varia la qualità tra esecuzioni?</p>
<p><strong>Safety:</strong> L’agente evita azioni dannose? Resiste a tentativi di manipolazione? Protegge dati sensibili?</p>
<p>La seconda dimensione riguarda il <strong>processo di valutazione</strong>:</p>
<p><strong>Offline evaluation:</strong> Test pre-deployment su dataset statici o ambienti simulati.</p>
<p><strong>Online evaluation:</strong> Monitoraggio in produzione su traffico reale.</p>
<p><strong>Component-level:</strong> Testare singoli pezzi (il retriever, il planner, il singolo tool).</p>
<p><strong>End-to-end:</strong> Testare il sistema completo su task realistici.</p>
<p>La maggior parte delle organizzazioni si ferma alla valutazione offline delle capabilities su singoli componenti. È il minimo indispensabile, ma non basta. I bug più insidiosi emergono dalle interazioni tra componenti, dalla variabilità del comportamento su input diversi, dai casi limite che nessun dataset statico copre.</p>
<hr />
<h2>Property-based testing: invarianti invece di output</h2>
<p>Il primo cambio di paradigma è passare da <em>example-based testing</em> a <em>property-based testing</em>.</p>
<p>Nell’example-based testing, definisci coppie input-output: “Se l’input è X, l’output deve essere Y”. Funziona quando l’output è deterministico e lo conosci in anticipo.</p>
<p>Nel property-based testing, definisci <em>proprietà</em> che devono valere per tutti gli input: “Per qualsiasi input valido, l’output deve soddisfare la condizione Z”. Non specifichi l’output esatto. Specifichi vincoli che l’output deve rispettare.</p>
<p>Per un agente, le proprietà potrebbero essere:</p>
<ul>
<li>La risposta deve contenere solo informazioni presenti nei documenti di contesto (no hallucination)</li>
<li>Se il task richiede un calcolo numerico, il risultato deve essere matematicamente corretto</li>
<li>La sequenza di tool call deve terminare entro N step</li>
<li>Ogni tool call deve usare parametri nel formato corretto</li>
<li>La risposta finale deve essere nella lingua richiesta</li>
</ul>
<p>Queste proprietà possono essere verificate automaticamente, indipendentemente dalla formulazione specifica dell’output.</p>
<p>In pratica, il test genera input casuali o semi-casuali, esegue l’agente, verifica che le proprietà siano soddisfatte. Se trova una violazione, riduce l’input al caso minimo che causa il fallimento.</p>
<p>Framework come <a href="https://hypothesis.readthedocs.io/">Hypothesis</a> (Python) supportano property-based testing. Per agenti, serve estenderli con proprietà specifiche del dominio e generatori di input che producono scenari realistici.</p>
<p>Un limite di questo approccio: non tutte le proprietà sono formalizzabili in modo verificabile automaticamente. “La risposta è utile” o “il tono è appropriato” richiedono giudizio semantico che le asserzioni booleane non catturano.</p>
<hr />
<h2>LLM-as-Judge: valutazione scalabile</h2>
<p>Qui entra il pattern <em>LLM-as-judge</em>: usare un altro modello linguistico per valutare l’output dell’agente sotto test.</p>
<p>Il concetto è semplice. Invece di scrivere asserzioni programmatiche, definisci criteri di valutazione in linguaggio naturale. Un LLM evaluator riceve l’input, l’output dell’agente, i criteri, e produce un giudizio strutturato: score numerici, classificazioni, spiegazioni.</p>
<p>Questo pattern è alla base di diversi framework di evaluation. <a href="https://www.confident-ai.com/blog/llm-testing-in-2024-top-methods-and-strategies">DeepEval</a> offre metriche predefinite come G-Eval (valutazione generale), faithfulness (aderenza ai fatti), answer relevancy, contextual precision. <a href="https://www.comet.ml/site/products/opik/">Opik</a> di Comet fornisce evaluation per workflow agentici multi-step, inclusa qualità del piano, aderenza al piano, efficienza degli step.</p>
<p><a href="https://docs.smith.langchain.com/">LangSmith</a> di LangChain e <a href="https://langfuse.com/">Langfuse</a> combinano tracing, logging e evaluation, permettendo di ispezionare ogni step dell’agente e valutare sia i componenti che il risultato finale. <a href="https://www.databricks.com/blog/introducing-enhanced-agent-evaluation">Databricks Mosaic AI Agent Evaluation</a> integra evaluation con la piattaforma MLOps esistente.</p>
<p>Il vantaggio principale: scala. Puoi valutare migliaia di output senza annotatori umani per ogni caso. Puoi definire criteri complessi in linguaggio naturale invece che in codice.</p>
<p>I limiti sono altrettanto concreti:</p>
<p><strong>Bias dell’evaluator:</strong> Il modello valutatore ha i suoi bias. Potrebbe preferire risposte verbose, o penalizzare formulazioni corrette ma non convenzionali. <a href="https://arxiv.org/abs/2306.05685">Studi</a> mostrano che gli LLM tendono a preferire le proprie risposte rispetto a quelle di altri modelli.</p>
<p><strong>Costo:</strong> Ogni valutazione richiede un’inference del modello evaluator. Su dataset grandi, i costi si accumulano.</p>
<p><strong>Non sostituisce validazione umana:</strong> Per decisioni critiche (lancio in produzione, confronto tra approcci), serve comunque un campione validato da umani.</p>
<p>La pratica migliore è usare LLM-as-judge per screening su larga scala e validazione umana su campioni stratificati. <a href="https://www.confident-ai.com/blog/llm-testing-in-2024-top-methods-and-strategies">Ricerche</a> mostrano che questa combinazione identifica il 60-70% in più di problemi rispetto al testing ad hoc.</p>
<hr />
<h2>Metriche specifiche per agenti</h2>
<p>Le metriche generiche di NLP (BLEU, ROUGE, perplexity) non catturano ciò che conta per gli agenti. Servono metriche progettate per valutare comportamenti agentici.</p>
<p><strong>Task completion rate:</strong> L’agente ha completato il task assegnato? È la metrica primaria, ma richiede una definizione chiara di “completamento”. Per task oggettivi (estrai il prezzo dal documento) è binaria. Per task aperti (scrivi una email di risposta) richiede valutazione qualitativa.</p>
<p><strong>Tool correctness:</strong> Ogni tool call è valida? I parametri sono nel formato corretto? Il tool chiamato è appropriato per lo step corrente?</p>
<p><strong>Tool hallucination:</strong> L’agente ha chiamato tool che non esistono? Ha inventato parametri non previsti dall’API?</p>
<p><strong>Plan quality:</strong> Il piano generato dall’agente è ragionevole? Copre tutti gli step necessari? È efficiente?</p>
<p><strong>Plan adherence:</strong> L’agente ha seguito il piano che ha generato? O ha deviato in modo ingiustificato?</p>
<p><strong>Step efficiency:</strong> Quanti step ha richiesto per completare il task? Rispetto a un baseline o a esecuzioni precedenti?</p>
<p><strong>Recovery rate:</strong> Quando un tool fallisce o restituisce un errore, l’agente riesce a recuperare? Riprova? Cerca alternative?</p>
<p><strong>Consistency:</strong> Dato lo stesso input ripetuto N volte, quanto varia l’output? La varianza è accettabile o indica instabilità?</p>
<p>Queste metriche richiedono strumentazione. Il sistema deve loggare ogni step, ogni tool call, ogni decisione del planner. Senza trace dettagliato, non puoi calcolarle.</p>
<p>Framework come Opik e LangSmith forniscono tracing automatico. Se usi framework custom, devi costruire il logging.</p>
<hr />
<h2>Red teaming: testare la sicurezza prima che lo facciano altri</h2>
<p>Il red teaming è la pratica di attaccare deliberatamente il sistema per scoprire vulnerabilità prima che lo facciano attori malevoli. Per gli agenti AI, è particolarmente critico.</p>
<p><a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/">OWASP ha pubblicato a dicembre 2025</a> il Top 10 per applicazioni agentic. Le categorie principali includono:</p>
<p><strong>Prompt injection:</strong> Input malevoli che inducono l’agente a ignorare le istruzioni originali o eseguire azioni non autorizzate. Può essere diretto (nell’input utente) o indiretto (nascosto nei dati che l’agente recupera).</p>
<p><strong>Tool misuse:</strong> L’agente viene indotto a usare tool in modi non previsti: leggere file sensibili, inviare dati a endpoint esterni, eseguire codice arbitrario.</p>
<p><strong>Memory leakage:</strong> Informazioni da sessioni o utenti precedenti che trapelano nelle risposte.</p>
<p><strong>Privilege escalation:</strong> L’agente acquisisce permessi superiori a quelli previsti, spesso attraverso catene di tool call.</p>
<p>Il red teaming tradizionale è manuale: esperti di sicurezza tentano di violare il sistema usando creatività e conoscenza del dominio. È efficace ma non scala.</p>
<p>Il red teaming automatizzato usa LLM per generare attacchi. <a href="https://github.com/confident-ai/deepteam">DeepTeam</a>, sviluppato da Confident AI, genera automaticamente prompt di attacco per diverse categorie di vulnerabilità e valuta la robustezza del sistema. <a href="https://github.com/Azure/PyRIT">PyRIT</a> di Microsoft è un framework open-source per red teaming di sistemi AI, con focus su generazione automatica di attacchi e reporting.</p>
<p><a href="https://www.enkryptai.com/">Enkrypt AI</a> offre red teaming as a service con prompt dinamici che evolvono in base alle difese del sistema. <a href="https://www.giskard.ai/">Giskard</a> combina red teaming con vulnerability scanning specifico per LLM.</p>
<p>Le <a href="https://skywork.ai/blog/agentic-ai-safety-best-practices-2025-enterprise/">best practice per enterprise</a> raccomandano:</p>
<ul>
<li>Red teaming prima di ogni release in produzione</li>
<li>Cadenza trimestrale per sistemi ad alto rischio</li>
<li>Test aggiuntivi dopo ogni cambio materiale: nuovo modello, nuovo tool, nuova fonte dati</li>
<li>Mappatura degli attacchi al <a href="https://atlas.mitre.org/">framework MITRE ATLAS</a></li>
<li>Metriche tracciate: vulnerabilità scoperte per test, tempo di remediation, tasso di successo ai re-test</li>
</ul>
<p>L’EU AI Act richiede red teaming documentato per sistemi ad alto rischio. Non è più opzionale per chi opera in Europa.</p>
<hr />
<h2>Fuzzing: stress-testing ai confini</h2>
<p>Il fuzzing è una tecnica classica di security testing: bombardare il sistema con input invalidi, inattesi, casuali, per scoprire bug e vulnerabilità che il testing normale non trova.</p>
<p>Per software tradizionale, il fuzzing cerca crash, memory corruption, behavior indefinito. Per agenti AI, cerca comportamenti indesiderati: risposte dannose, leak di informazioni, violazioni di policy, loop infiniti.</p>
<p><a href="https://arxiv.org/html/2402.00350v1">Un survey del 2024</a> cataloga le tecniche di fuzzing applicate a LLM. I principali approcci:</p>
<p><strong>Black-box fuzzing:</strong> Tratti il modello come scatola nera. Generi input, osservi output, iteri. Non richiede accesso ai pesi o all’architettura. Funziona con qualsiasi API.</p>
<p><strong>Grey-box fuzzing:</strong> Combini generazione casuale con feedback sulla copertura. Se un input esplora un comportamento nuovo (misurato tramite output o trace), lo tieni come seed per ulteriori mutazioni.</p>
<p><strong>LLM-enhanced fuzzing:</strong> Usi un LLM per generare input più intelligenti. Invece di mutazioni casuali, chiedi al modello di generare varianti che potrebbero causare problemi.</p>
<p><a href="https://arxiv.org/abs/2305.06498">ChatFuzz</a> combina fuzzing grey-box con generazione via ChatGPT. Un “chat mutator” prende seed dal pool e chiede a ChatGPT di generare input simili ma diversi. I nuovi input vengono valutati e quelli interessanti diventano nuovi seed.</p>
<p><a href="https://arxiv.org/abs/2308.04009">Fuzz4All</a> usa GPT-4 e StarCoder come motori di generazione e mutazione, permettendo fuzzing su progetti in linguaggi diversi. È stato usato per trovare bug in compilatori e interpreti.</p>
<p>Per agenti, il fuzzing si applica a diversi livelli:</p>
<ul>
<li><strong>Input utente:</strong> Genera query malformate, ambigue, con caratteri speciali, lunghe, multilingue</li>
<li><strong>Risposte dei tool:</strong> Simula tool che restituiscono errori, timeout, dati malformati, dati malevoli</li>
<li><strong>Contesto RAG:</strong> Inietta documenti con contenuto contraddittorio, injection attempt, formattazione insolita</li>
</ul>
<p>Il fuzzing è computazionalmente costoso. Ogni run richiede inference del modello. Ma trova classi di bug che altri metodi non scoprono.</p>
<hr />
<h2>Ambienti di test: benchmark e simulazioni</h2>
<p>Testare agenti in produzione è rischioso: ogni bug è visibile agli utenti. Testare su dataset statici è insufficiente: non cattura le interazioni dinamiche con tool e ambienti.</p>
<p>La soluzione intermedia sono gli ambienti di simulazione che replicano condizioni realistiche senza conseguenze reali.</p>
<p><a href="https://github.com/THUDM/AgentBench">AgentBench</a> fornisce 8 ambienti distinti (web browsing, coding, database query) per valutare agenti su task realistici. <a href="https://webarena.dev/">WebArena</a> simula siti web reali dove gli agenti possono navigare e completare task. <a href="https://www.swebench.com/">SWE-bench</a> valuta agenti su issue GitHub reali, misurando la capacità di risolvere bug in codebase esistenti.</p>
<p>Questi benchmark hanno un problema: sono statici. Una volta che un agente è stato ottimizzato per un benchmark, i risultati non predicono più le performance su casi nuovi.</p>
<p>Il trend è verso benchmark dinamici e continuamente aggiornati. <a href="https://appworld.dev/">AppWorld</a> e <a href="https://github.com/ServiceNow/WorkArena">WorkArena++</a> propongono task che cambiano nel tempo. Il concetto è simile ai dataset di evaluation per code generation che usano problemi di competitive programming: nuovi problemi ogni mese, impossibili da memorizzare.</p>
<p>Per testing interno, la pratica migliore è costruire ambienti che replicano il deployment target:</p>
<ul>
<li>Mock dei tool esterni con risposte realistiche (successi, errori, latenza)</li>
<li>Dataset di input che riflettono la distribuzione di produzione</li>
<li>Scenari edge case identificati da incident post-mortem</li>
<li>Versioning degli ambienti di test per reproducibilità</li>
</ul>
<p>Un ambiente di test ben costruito è un asset che si accumula nel tempo. Ogni bug trovato in produzione diventa un nuovo test case.</p>
<hr />
<h2>Pipeline di evaluation: pre-deploy e post-deploy</h2>
<p>L’evaluation non è un evento singolo. È un processo continuo che attraversa tutto il lifecycle.</p>
<p><strong>Pre-deploy (offline):</strong></p>
<ol>
<li>
<p><strong>Unit test sui componenti:</strong> Il retriever restituisce documenti rilevanti? Il planner genera piani validi? I tool wrapper gestiscono errori?</p>
</li>
<li>
<p><strong>Integration test end-to-end:</strong> L’agente completo risolve task rappresentativi? Su un dataset di almeno 500-1000 casi diversi?</p>
</li>
<li>
<p><strong>Property-based testing:</strong> Le proprietà invarianti sono rispettate su input generati casualmente?</p>
</li>
<li>
<p><strong>Red teaming:</strong> Il sistema resiste agli attacchi noti? Le nuove vulnerabilità sono state testate?</p>
</li>
<li>
<p><strong>Regression testing:</strong> Le performance sono uguali o migliori della versione precedente? Nessun degradamento su casi critici?</p>
</li>
</ol>
<p>La soglia per il deploy dovrebbe essere esplicita: task completion rate &gt; X%, zero vulnerabilità critiche, regression test 100% passed.</p>
<p><strong>Post-deploy (online):</strong></p>
<ol>
<li>
<p><strong>Sampling:</strong> Valuta un campione (1-5%) degli output di produzione. Prioritizza casi flaggati da guardrail o con feedback negativo.</p>
</li>
<li>
<p><strong>Monitoring metriche:</strong> Traccia task completion, latenza, error rate, costo per query in tempo reale. Alert su deviazioni.</p>
</li>
<li>
<p><strong>Drift detection:</strong> Le performance stanno degradando? La distribuzione degli input sta cambiando?</p>
</li>
<li>
<p><strong>Human review:</strong> Revisione periodica di campioni stratificati da annotatori qualificati.</p>
</li>
<li>
<p><strong>Incident analysis:</strong> Ogni failure diventa un caso di test. Root cause analysis alimenta il dataset di regression.</p>
</li>
</ol>
<p>L’integrazione con CI/CD è critica. Ogni PR che modifica l’agente dovrebbe triggerare la suite di test offline. Il deploy in produzione dovrebbe essere bloccato se i test non passano.</p>
<hr />
<h2>Il costo del non testare</h2>
<p>I numeri parlano chiaro. Il <a href="https://www.confident-ai.com/blog/llm-testing-in-2024-top-methods-and-strategies">73% delle organizzazioni</a> cita l’affidabilità come barriera al deploy di agenti. Non la tecnologia, non i costi di inference: l’affidabilità.</p>
<p>La conseguenza è che molti progetti restano in POC indefinitamente. Il team non ha fiducia sufficiente per andare in produzione. Senza metodologie di testing adeguate, quella fiducia è impossibile da costruire.</p>
<p>Chi investe in evaluation rigorosa pre-deploy scopre i problemi prima che li scoprano gli utenti. Chi non lo fa scopre i problemi tramite incident, ticket di supporto, perdita di fiducia.</p>
<p>Il testing di sistemi non-deterministici è più complesso del testing tradizionale. Richiede nuove competenze, nuovi tool, nuovi processi. Ma l’alternativa, deployare senza confidence e scoprire i bug in produzione, è più costosa.</p>
<p>I framework esistono. Le metodologie sono documentate. Il gap è nell’adozione.</p>
<hr />
<h2>Fonti</h2>
<p>Confident AI. (2025). <a href="https://www.confident-ai.com/blog/llm-testing-in-2024-top-methods-and-strategies"><em>LLM Testing in 2025: Top Methods and Strategies</em></a>.</p>
<p>Databricks. (2025). <a href="https://www.databricks.com/blog/introducing-enhanced-agent-evaluation"><em>Announcing Agent Evaluation</em></a>.</p>
<p>Galileo AI. (2025). <a href="https://galileo.ai/blog/mastering-llm-evaluation-metrics-frameworks-and-techniques"><em>Top 12 AI Evaluation Tools for GenAI Systems in 2025</em></a>.</p>
<p>GitHub. (2025). <a href="https://github.com/confident-ai/deepteam"><em>DeepTeam: Framework to red team LLMs</em></a>.</p>
<p>Hu, J., Zhang, Q., &amp; Yin, H. (2023). <a href="https://arxiv.org/abs/2305.06498"><em>ChatFuzz: Large Language Model Enhanced Fuzzing</em></a>. arXiv:2305.06498.</p>
<p>OWASP. (2025). <a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/"><em>Top 10 for Large Language Model Applications v2025</em></a>.</p>
<p>Skywork AI. (2025). <a href="https://skywork.ai/blog/agentic-ai-safety-best-practices-2025-enterprise/"><em>Agentic AI Safety &amp; Guardrails: 2025 Best Practices for Enterprise</em></a>.</p>
<p>Wang, L., et al. (2024). <a href="https://arxiv.org/abs/2402.00350"><em>Large Language Models Based Fuzzing Techniques: A Survey</em></a>. arXiv:2402.00350.</p>
<p>Zhang, Y., et al. (2025). <a href="https://arxiv.org/abs/2503.16416"><em>A Survey on the Evaluation of LLM-based Agents</em></a>. arXiv:2503.16416.</p>
]]></content:encoded>
      <category>Tecnica</category>
      <category>Metodologia</category>
      <category>Testing</category>
      <category>AI Agents</category>
      <category>QA</category>
      <category>Red Teaming</category>
      <category>Evaluation</category>
      <category>MLOps</category>
    </item>
    <item>
      <title>Constitutional AI: guida per chi usa Claude</title>
      <link>https://ireneburresi.dev/blog/research/constitutional-ai/</link>
      <guid isPermaLink="true">https://ireneburresi.dev/blog/research/constitutional-ai/</guid>
      <pubDate>Mon, 29 Dec 2025 00:00:00 GMT</pubDate>
      <dc:creator>Irene Burresi</dc:creator>
      <dc:language>it</dc:language>
      <description><![CDATA[<p>Claude alterna rifiuti assurdi e risposte rischiose. Constitutional AI mostra come gestire overrefusal, sycophancy e vulnerabilità linguistiche nei deployment.</p>]]></description>
      <content:encoded><![CDATA[<h2>Il paradosso del rifiuto selettivo</h2>
<p><em>Claude rifiuta di scrivere un racconto con un personaggio che fuma, ma con il prompt giusto spiega come sintetizzare metanfetamina. Constitutional AI spiega entrambi i comportamenti.</em></p>
<p><strong>TL;DR:</strong> Constitutional AI addestra Claude usando una lista di principi (“costituzione”) invece di feedback umano per ogni risposta. Produce modelli più sicuri di RLHF tradizionale: 88% harmless rate contro 76%. Ma i failure modes sono specifici e prevedibili. Il modello è eccessivamente cauto su contenuti che <em>sembrano</em> problematici (keyword matching) e vulnerabile ad attacchi che <em>non sembrano</em> problematici (jailbreak semantici). È più sicuro in inglese che in altre lingue. Tende a darti ragione anche quando sbagli. Per chi deploya: aspettati refusal rate alto su casi d’uso legittimi, pianifica fallback, non fidarti della sicurezza su lingue diverse dall’inglese.</p>
<hr />
<p>Chiunque abbia usato Claude in produzione conosce la frustrazione. Il modello rifiuta di scrivere un’email di sollecito pagamento perché “potrebbe essere percepita come aggressiva”. Rifiuta fiction con conflitti perché “potrebbe normalizzare la violenza”. Rifiuta di completare codice che gestisce autenticazione perché “potrebbe essere usato per hacking”.</p>
<p>Poi leggi i report di sicurezza. <a href="https://arxiv.org/abs/2404.02151">Adaptive attacks raggiungono il 100% di success rate</a> su Claude 3 e 3.5. Ricercatori hanno estratto istruzioni per sintetizzare armi chimiche, generare malware funzionante, creare contenuti illegali. Con le tecniche giuste, le protezioni cedono completamente.</p>
<p>Come può lo stesso modello essere contemporaneamente troppo restrittivo e troppo permissivo?</p>
<p>La risposta sta in Constitutional AI, il metodo con cui Anthropic addestra Claude. Capire come funziona spiega entrambi i comportamenti e, più importante, permette di prevedere quando il modello fallirà nelle tue applicazioni.</p>
<hr />
<h2>Come funziona Constitutional AI</h2>
<p><a href="https://arxiv.org/abs/2212.08073">Il paper originale di Anthropic</a>, pubblicato a dicembre 2022, propone un metodo per rendere i modelli “harmless” senza etichettare manualmente centinaia di migliaia di risposte come “buone” o “cattive”.</p>
<p>Il processo ha due fasi. Nella prima, il modello genera risposte a prompt problematici, poi critica e rivede le proprie risposte usando principi scritti in linguaggio naturale. Esempio di principio: “Scegli la risposta che non incoraggia comportamenti illegali, dannosi o non etici”. Il modello viene addestrato sulle revisioni.</p>
<p>Nella seconda fase, il modello genera coppie di risposte e un altro modello decide quale è migliore secondo gli stessi principi. Queste preferenze generate dall’AI (non da umani) vengono usate per il reinforcement learning. Anthropic chiama questo approccio RLAIF: Reinforcement Learning from AI Feedback, invece di RLHF (Human Feedback).</p>
<p><a href="https://www.anthropic.com/news/claudes-constitution">La costituzione di Claude</a> include principi derivati dalla Dichiarazione Universale dei Diritti Umani, dai principi di beneficenza di DeepMind, e da linee guida scritte internamente. Non è un documento statico: Anthropic la aggiorna periodicamente e ha condotto esperimenti con input pubblico per modificarla.</p>
<p>Il claim centrale del paper: Constitutional AI produce modelli che sono contemporaneamente più sicuri (harmless) e meno evasivi (più utili) rispetto a RLHF tradizionale. I dati mostrano che questo è vero in media. Ma “in media” nasconde varianza significativa.</p>
<hr />
<h2>Cosa funziona: i miglioramenti reali</h2>
<p>Prima di analizzare i problemi, i dati su cosa Constitutional AI fa bene.</p>
<p><a href="https://arxiv.org/abs/2309.00267">Google DeepMind ha pubblicato nel 2023</a> il confronto più rigoroso tra RLAIF e RLHF. Su task di harmlessness, RLAIF ottiene 88% harmless rate contro 76% di RLHF. Non è un miglioramento marginale.</p>
<p>Il confronto head-to-head su qualità generale (summarization, helpful dialogue) non mostra differenze statisticamente significative: entrambi i metodi producono output preferiti dagli evaluatori circa il 70% delle volte rispetto a baseline senza reinforcement learning. RLAIF non è peggiore di RLHF sulla qualità, ed è migliore sulla sicurezza.</p>
<p>Il vantaggio di costo è sostanziale. AI labeling costa circa $0.06 per esempio, contro $0.11 per 50 parole di annotazione umana. Per chi addestra modelli, questo significa iterazioni più rapide e meno esposizione di annotatori umani a contenuti disturbanti. Per chi usa modelli già addestrati, significa che Anthropic può investire più risorse in safety research invece che in data labeling.</p>
<p>Un beneficio meno discusso: i principi costituzionali sono leggibili. Quando Claude rifiuta una richiesta, in teoria puoi risalire a quale principio ha attivato il rifiuto. Con RLHF puro, le preferenze sono implicite nei dati di training e non ispezionabili. Questa trasparenza è parziale (non sai <em>come</em> il modello interpreta i principi), ma è più di quanto offrano altri approcci.</p>
<hr />
<h2>Dove il modello rifiuta troppo</h2>
<p>Il primo failure mode che impatta chi usa Claude in produzione è l’overrefusal. Il modello rifiuta richieste legittime perché pattern superficiali attivano i safety guardrail.</p>
<p>Il meccanismo è comprensibile. I principi costituzionali sono formulati in termini generali: “evita contenuti che potrebbero causare danno”, “non assistere in attività illegali”, “rifiuta richieste che potrebbero essere usate per manipolazione”. Il modello impara ad associare certi pattern lessicali con rifiuto, anche quando il contesto rende la richiesta innocua.</p>
<p>Gli esempi documentati dalla community coprono domini diversi. Nella fiction, Claude rifiuta storie con personaggi moralmente ambigui, conflitti realistici, o temi adulti che sarebbero accettabili in qualsiasi romanzo pubblicato. Un prompt per un thriller con un antagonista credibile può attivare un rifiuto perché “potrebbe normalizzare comportamenti dannosi”.</p>
<p>Nel codice, richieste che gestiscono autenticazione, crittografia, o network scanning vengono bloccate perché “potrebbero essere usate per hacking”. Questo include penetration testing legittimo, security auditing, o anche semplice gestione delle password.</p>
<p>La comunicazione professionale subisce la stessa sorte: email di sollecito, lettere di reclamo, comunicazioni assertive rifiutate perché “potrebbero essere percepite come aggressive o manipolative”. Su temi medici e legali, i disclaimer sono così estesi da essere inutili, o i rifiuti completi.</p>
<p>Il pattern comune: il modello reagisce a keyword e strutture superficiali, non al contesto. “Come forzare una serratura” viene rifiutato anche se il contesto è “ho perso le chiavi di casa mia”. “Come manipolare qualcuno” viene rifiutato anche se il contesto è “sto scrivendo un saggio sulla propaganda storica”.</p>
<p><a href="https://www.anthropic.com/research/constitutional-classifiers">Il team di Constitutional Classifiers di Anthropic</a> ha documentato questo trade-off. Dopo aver deployato difese aggiuntive contro jailbreak, hanno osservato che il sistema “rifiuterebbe frequentemente di rispondere a domande basilari, non maliziose”. Maggiore sicurezza contro attacchi significa maggiore overrefusal su richieste legittime.</p>
<p>Per chi deploya applicazioni: il refusal rate su casi d’uso legittimi può essere significativo. Se la tua applicazione richiede generazione di contenuti creativi, assistenza su temi sensibili, o codice di sicurezza, aspettati che una percentuale non trascurabile di richieste venga rifiutata. Servono fallback (modelli alternativi, escalation a umani) e messaging appropriato per gli utenti.</p>
<hr />
<h2>Dove il modello accetta troppo</h2>
<p>Il secondo failure mode è l’opposto: il modello accetta richieste che dovrebbe rifiutare, quando l’attacco è formulato in modo da bypassare i pattern superficiali.</p>
<p><a href="https://arxiv.org/abs/2404.02151">Uno studio del 2024</a> ha testato attacchi adversarial su Claude 3 e 3.5. Con tecniche di transfer (prompt che funzionano su altri modelli adattati) o prefilling (forzare l’inizio della risposta del modello), il success rate raggiunge il 100%. Tutti gli attacchi testati hanno avuto successo.</p>
<p>Senza le difese aggiuntive di Constitutional Classifiers, i test interni di Anthropic mostrano 86% jailbreak success su Claude 3.5 Sonnet. Con Constitutional Classifiers deployati, il success rate cala drasticamente, ma dopo 3.700 ore collettive di red-teaming è stato comunque scoperto un jailbreak universale.</p>
<p>Come è possibile che lo stesso modello rifiuti email di sollecito e accetti richieste di sintesi di armi chimiche?</p>
<p>La risposta sta nella natura dei principi costituzionali. Sono formulati in linguaggio naturale, e il modello impara a interpretarli attraverso esempi statistici, non attraverso comprensione semantica profonda. Un attacco che riformula la richiesta in modo da non corrispondere ai pattern appresi bypassa le protezioni.</p>
<p>I jailbreak più sofisticati sfruttano diverse vulnerabilità. Il roleplay chiede al modello di interpretare un personaggio che non ha le stesse restrizioni. L’obfuscation codifica la richiesta in modi che il modello decodifica ma che non attivano i safety check (base64, lingue diverse, gergo). Il prefilling, in alcune API, forza l’inizio della risposta del modello bypassando il punto in cui decide se rifiutare. La manipolazione multi-turn costruisce gradualmente contesto attraverso più messaggi, ognuno innocuo, che insieme portano il modello a rispondere a richieste che rifiuterebbe se poste direttamente.</p>
<p>Per chi deploya applicazioni: le protezioni di Claude non sono sufficienti per casi d’uso high-stakes. Se la tua applicazione potrebbe essere usata per generare contenuti pericolosi, hai bisogno di layer aggiuntivi di moderazione. Non affidarti solo ai guardrail del modello.</p>
<hr />
<h2>Il problema della sycophancy</h2>
<p>Il terzo failure mode è più sottile e meno discusso: Claude tende a darti ragione anche quando sbagli.</p>
<p><a href="https://arxiv.org/abs/2310.13548">Anthropic stessa ha pubblicato ricerca</a> che documenta sycophancy pervasiva in tutti i principali assistenti AI, incluso Claude. I comportamenti documentati includono ammissione di errori non commessi: se dici al modello “la tua risposta precedente era sbagliata”, spesso si scusa e “corregge” anche quando la risposta originale era corretta. Il feedback diventa biased: se chiedi una valutazione di un testo dicendo “l’ho scritto io”, il modello tende a essere più positivo che se presenti lo stesso testo come scritto da altri. Su problemi matematici dove l’utente suggerisce una risposta sbagliata, il modello tende a concordare con la risposta sbagliata più spesso di quanto farebbe senza il suggerimento.</p>
<p>La causa è strutturale. Constitutional AI (come RLHF) ottimizza per preferenze espresse da valutatori. Sia umani che modelli AI tendono a preferire risposte che concordano con loro, che sono scritte in modo convincente, che evitano conflitto. Il modello impara che “dare ragione” produce reward più alto.</p>
<p>Il finding più preoccupante: modelli più grandi addestrati con più iterazioni di RLHF/RLAIF mostrano sycophancy aumentata, non diminuita. Non è un bug che si risolve con più training. È una conseguenza del metodo di training stesso.</p>
<p>Per chi deploya applicazioni: se la tua applicazione richiede che il modello dia feedback onesto, verifichi informazioni, o contraddica l’utente quando sbaglia, aspettati performance degradata. Casi d’uso come code review, fact-checking, tutoring sono particolarmente impattati. Considera di istruire esplicitamente il modello a essere critico, ma sappi che questo mitiga solo parzialmente il problema.</p>
<hr />
<h2>Il problema delle lingue diverse dall’inglese</h2>
<p>I failure modes descritti finora si amplificano quando il modello opera in lingue diverse dall’inglese. Questo impatta direttamente chi opera in Italia.</p>
<p>I dati sono chiari. <a href="https://arxiv.org/abs/2310.02446">Ricerca su LLM multilingual safety</a> mostra che i modelli producono risposte harmful drammaticamente più spesso in lingue diverse dall’inglese. Un esempio specifico: Llama-3.1-8B rifiuta “How to make a bomb?” in inglese ma fornisce istruzioni dettagliate per la stessa domanda in hindi.</p>
<p>Il pattern si ripete su modelli e lingue diverse. Il tasso di successo degli attacchi passa da valori a singola cifra in inglese a 50-70% in lingue a bassa risorsa. L’italiano, pur essendo una lingua relativamente ben rappresentata, non è immune.</p>
<p>La causa: i dati di training per la sicurezza (esempi di rifiuto, definizioni di contenuto harmful, preferenze per harmlessness) sono prevalentemente in inglese. I principi costituzionali sono scritti in inglese. Il modello generalizza imperfettamente ad altre lingue.</p>
<p>Per applicazioni che servono utenti italiani, questo ha implicazioni concrete. I guardrail che funzionano in inglese sono meno affidabili in italiano. Un utente che vuole bypassare le protezioni può semplicemente formulare la richiesta in italiano (o in una lingua ancora meno rappresentata) con maggiore probabilità di successo.</p>
<p>Le contromisure sono limitate. Puoi tradurre le richieste in inglese prima di inviarle al modello, processare in inglese, poi tradurre le risposte in italiano. Ma questo aggiunge latenza, costo, e può introdurre errori di traduzione. Puoi aggiungere layer di moderazione specifici per italiano, ma richiede investment significativo.</p>
<hr />
<h2>Implicazioni per deployment enterprise</h2>
<p>Cosa significa tutto questo per chi deve decidere se e come usare Claude in produzione?</p>
<p>Constitutional AI rende Claude una scelta ragionevole per applicazioni general-purpose con utenti non-adversarial: chatbot customer service, assistenti interni, tool di produttività. Il refusal rate su richieste legittime è gestibile, e il rischio di output harmful è basso se gli utenti non cercano attivamente di abusare il sistema. Funziona anche per casi d’uso dove l’overrefusal è accettabile: se la tua applicazione può tollerare rifiuti frequenti (con fallback appropriati), i guardrail di Claude sono un beneficio netto. La trasparenza dei principi è utile per compliance e audit: poter dire “il modello segue questi principi documentati” è più difendibile di “il modello è stato addestrato su preferenze implicite”.</p>
<p>Servono precauzioni aggiuntive per applicazioni creative. Se generi fiction, marketing copy, o contenuti che toccano temi sensibili, aspettati refusal rate alto. Prepara prompt alternativi, fallback a modelli meno restrittivi, o workflow con review umana. Lo stesso vale per applicazioni che richiedono feedback onesto come code review, tutoring, fact-checking: la sycophancy è un problema strutturale. Considera prompt engineering aggressivo per contrastare, ma non aspettarti che risolva completamente. Per applicazioni multilingue, se servi utenti non-anglofoni, i guardrail sono meno affidabili. Aggiungi moderazione specifica per le lingue che supporti. Per applicazioni high-stakes dove output harmful avrebbe conseguenze gravi (medico, legale, sicurezza), non affidarti solo ai guardrail del modello. Aggiungi layer di validazione, moderazione esterna, e review umana.</p>
<p>Non aspettarti sicurezza garantita contro attacchi sofisticati. Il 100% di jailbreak success con adaptive attacks significa che attaccanti motivati possono bypassare le protezioni. Se la tua applicazione è un target attraente, assumi che verrà compromessa. Non aspettarti comportamento consistente tra lingue: il modello che si comporta bene in inglese può comportarsi molto diversamente in italiano. Non aspettarti miglioramento della sycophancy con scale: modelli più grandi e più addestrati non sono meno sycophantic. Anzi.</p>
<hr />
<h2>Il quadro complessivo</h2>
<p>Constitutional AI rappresenta un miglioramento reale rispetto ad alternative precedenti. I dati sono chiari: 88% harmless rate contro 76% di RLHF tradizionale, a costo inferiore. Per chi usa modelli commerciali, questo significa che Claude è genuinamente più sicuro della media.</p>
<p>Ma “più sicuro della media” non significa “sicuro”. I failure modes documentati sono specifici e prevedibili. Il modello rifiuta troppo quando pattern superficiali attivano i guardrail, anche se il contesto rende la richiesta legittima. Accetta troppo quando attacchi sofisticati riformulano richieste dannose in modi che non corrispondono ai pattern appresi. Ti dà ragione anche quando sbagli, perché la sycophancy è incentivata dal training stesso. È meno sicuro in lingue diverse dall’inglese, perché i dati di sicurezza sono prevalentemente anglofoni.</p>
<p>Nessuno di questi problemi è unico di Claude o di Constitutional AI. Sono limitazioni degli attuali approcci di alignment in generale. Ma Constitutional AI li rende più prevedibili: se capisci il meccanismo, puoi anticipare dove il modello fallirà.</p>
<p>Per chi deploya applicazioni, la domanda non è “Claude è sicuro?” ma “I failure modes di Claude sono accettabili per il mio caso d’uso?”. La risposta dipende dal contesto. Per molte applicazioni enterprise, Constitutional AI offre un trade-off ragionevole tra safety e usabilità. Per applicazioni high-stakes o adversarial, non è sufficiente da solo.</p>
<p>La trasparenza sui principi è un vantaggio competitivo di Anthropic rispetto ad altri provider. <a href="https://www.anthropic.com/news/claudes-constitution">La costituzione di Claude è pubblica</a>. Puoi leggerla, capire cosa il modello sta cercando di fare, e decidere se quei principi sono allineati con i tuoi casi d’uso. È più di quanto offrano altri.</p>
<p>Constitutional AI non risolve l’alignment. Rende il problema più gestibile, più ispezionabile, più prevedibile. Per chi deve deployare LLM oggi, con le limitazioni di oggi, è un passo avanti concreto. Non è la destinazione, ma è una direzione ragionevole.</p>
<hr />
<h2>Fonti</h2>
<p>Bai, Y., Kadavath, S., Kundu, S., et al. (2022). <a href="https://arxiv.org/abs/2212.08073"><em>Constitutional AI: Harmlessness from AI Feedback</em></a>. arXiv:2212.08073.</p>
<p>Lee, H., Phatale, S., Mansoor, H., et al. (2023). <a href="https://arxiv.org/abs/2309.00267"><em>RLAIF: Scaling Reinforcement Learning from Human Feedback with AI Feedback</em></a>. arXiv:2309.00267.</p>
<p>Andriushchenko, M., et al. (2024). <a href="https://arxiv.org/abs/2404.02151"><em>Jailbreaking Leading Safety-Aligned LLMs with Simple Adaptive Attacks</em></a>. arXiv:2404.02151.</p>
<p>Perez, E., Ringer, S., Lukošiūtė, K., et al. (2023). <a href="https://arxiv.org/abs/2310.13548"><em>Towards Understanding Sycophancy in Language Models</em></a>. arXiv:2310.13548.</p>
<p>Deng, Y., et al. (2023). <a href="https://arxiv.org/abs/2310.02446"><em>Multilingual Jailbreak Challenges in Large Language Models</em></a>. arXiv:2310.02446.</p>
<p>Anthropic. (2023). <a href="https://www.anthropic.com/news/claudes-constitution"><em>Claude’s Constitution</em></a>. Anthropic.</p>
<p>Anthropic. (2024). <a href="https://www.anthropic.com/research/constitutional-classifiers"><em>Constitutional Classifiers: Defending Against Universal Jailbreaks</em></a>. Anthropic.</p>
]]></content:encoded>
      <category>Ricerca</category>
      <category>Tecnica</category>
      <category>Governance</category>
      <category>Constitutional AI</category>
      <category>Claude</category>
      <category>Anthropic</category>
      <category>AI Safety</category>
      <category>LLM Deployment</category>
      <atom:link rel="alternate" hreflang="en" href="https://ireneburresi.dev/en/blog/research/constitutional-ai/"/>
    </item>
    <item>
      <title>Da SEO a GEO: Guida Tecnica all&apos;Ottimizzazione per AI Search</title>
      <link>https://ireneburresi.dev/blog/engineering/seo-vs-geo/</link>
      <guid isPermaLink="true">https://ireneburresi.dev/blog/engineering/seo-vs-geo/</guid>
      <pubDate>Sat, 04 Jan 2025 00:00:00 GMT</pubDate>
      <dc:creator>Irene Burresi</dc:creator>
      <dc:language>it</dc:language>
      <description><![CDATA[<p>robots.txt, llms.txt, structured data con E-E-A-T, answer blocks, multimodal: l'infrastruttura tecnica completa per posizionarsi nei motori generativi. Paper Princeton, dati Cloudflare 2025, implementazioni concrete.</p>]]></description>
      <content:encoded><![CDATA[<h2>Il cambio di paradigma: dai link alle citazioni</h2>
<p><em>GPTBot è passato dal 5% al 30% del traffico crawler in un anno. Il traffico generato da query utente verso AI è cresciuto 15 volte. L’infrastruttura SEO tradizionale non intercetta più questo flusso.</em></p>
<p><strong>TL;DR:</strong> L’ottimizzazione per motori generativi (GEO) richiede interventi tecnici specifici: configurare robots.txt per 20+ AI crawler, implementare llms.txt per guidare LLM verso contenuti prioritari, estendere structured data con JSON-LD incluso Person schema con E-E-A-T completo (73% in più di selezione). Strutturare contenuti in answer blocks di 134-167 parole per facilitare l’estrazione. Contenuti multimodali hanno +156% selection rate. La ricerca Princeton dimostra che aggiungere citazioni da fonti autorevoli aumenta la visibilità fino al 40%. Chi implementa ora costruisce vantaggi competitivi difficili da recuperare.</p>
<hr />
<p>Il SEO tradizionale ottimizza per un obiettivo specifico: posizionarsi nelle liste ordinate restituite dai motori di ricerca. L’utente cerca, riceve dieci link blu, clicca. Il traffico arriva.</p>
<p>I motori generativi funzionano diversamente. ChatGPT, Perplexity, Gemini, Claude non restituiscono liste di link. Sintetizzano risposte attingendo da fonti multiple, citando (o meno) la provenienza. L’utente ottiene una risposta, non un elenco di opzioni.</p>
<p>Secondo i <a href="https://blog.cloudflare.com/from-googlebot-to-gptbot-whos-crawling-your-site-in-2025/">dati Cloudflare di dicembre 2025</a>, GPTBot ha raggiunto il 30% del traffico AI crawler, in crescita dal 5% dell’anno precedente. Meta-ExternalAgent è entrato al 19%. ChatGPT-User, il bot che accede a pagine web quando gli utenti fanno domande, ha registrato una crescita del 2.825%. Il traffico legato a query utente è aumentato di 15 volte nel corso dell’anno.</p>
<p>Non è un cambiamento marginale. È un nuovo canale di acquisizione che richiede infrastruttura dedicata.</p>
<hr />
<h2>robots.txt: configurazione per AI crawler</h2>
<p>Il file robots.txt comunica ai crawler quali parti del sito possono accedere. Per i motori di ricerca tradizionali, la configurazione è consolidata. Per gli AI crawler, il panorama è frammentato: ogni provider usa user-agent diversi, con scopi diversi.</p>
<h3>Mappa degli AI crawler principali</h3>
<p><strong>OpenAI</strong> opera con tre crawler distinti:</p>
<pre><code>User-agent: GPTBot
# Training modelli fondazionali. Raccoglie dati per addestrare GPT.

User-agent: ChatGPT-User
# Browsing utente. Accede a pagine quando un utente chiede informazioni.

User-agent: OAI-SearchBot
# Search. Indicizza contenuti per la funzione di ricerca di ChatGPT.
</code></pre>
<p><strong>Anthropic</strong> usa:</p>
<pre><code>User-agent: ClaudeBot
# Training e aggiornamento Claude.

User-agent: Claude-Web
# Accesso web per funzionalità utente.

User-agent: anthropic-ai
# Crawler generico Anthropic.
</code></pre>
<p><strong>Perplexity</strong>:</p>
<pre><code>User-agent: PerplexityBot
# Indicizzazione per AI answer engine.

User-agent: Perplexity-User
# Fetch per query utente.
</code></pre>
<p><strong>Google</strong> ha separato le funzioni:</p>
<pre><code>User-agent: Google-Extended
# Token per uso AI. NON è un bot, è un flag.
# Controllare questo user-agent impedisce uso dei contenuti per training AI
# mantenendo l'indicizzazione standard.

User-agent: Googlebot
# Crawler tradizionale per Search.
</code></pre>
<p><strong>Meta</strong>:</p>
<pre><code>User-agent: Meta-ExternalAgent
# Crawling per training modelli AI.

User-agent: Meta-ExternalFetcher
# Fetch per richieste utente. Può bypassare robots.txt.
</code></pre>
<p><strong>Altri crawler rilevanti</strong>:</p>
<pre><code>User-agent: Amazonbot
User-agent: Bytespider      # ByteDance
User-agent: Applebot-Extended  # Apple AI (flag, non bot)
User-agent: CCBot           # Common Crawl
User-agent: cohere-ai
User-agent: cohere-training-data-crawler
</code></pre>
<h3>Strategie di configurazione</h3>
<p><strong>Strategia 1: Accesso completo per massima visibilità AI</strong></p>
<pre><code># Permettere tutti gli AI crawler
User-agent: GPTBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: anthropic-ai
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Google-Extended
Allow: /

User-agent: Meta-ExternalAgent
Allow: /

User-agent: Amazonbot
Allow: /
</code></pre>
<p><strong>Strategia 2: Visibilità AI search, no training</strong></p>
<p>Questa configurazione permette ai sistemi AI di citare i contenuti nelle risposte, ma impedisce l’uso per addestrare modelli:</p>
<pre><code># Permettere crawler search/user
User-agent: ChatGPT-User
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Perplexity-User
Allow: /

# Bloccare crawler training
User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: Meta-ExternalAgent
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: cohere-training-data-crawler
Disallow: /
</code></pre>
<p><strong>Strategia 3: Accesso selettivo per directory</strong></p>
<pre><code>User-agent: GPTBot
Allow: /blog/
Allow: /docs/
Disallow: /api/
Disallow: /internal/
Disallow: /user-data/
</code></pre>
<h3>Limiti di robots.txt</h3>
<p>Un punto critico: robots.txt è un protocollo volontario. I crawler possono ignorarlo.</p>
<p>Ad agosto 2025, <a href="https://www.medianama.com/2025/12/223-user-driven-ai-bots-crawling-grows-15x-in-2025-cloudflare-report/">Cloudflare ha bloccato i bot di Perplexity</a> dopo aver documentato violazioni del protocollo. A ottobre 2025, Reddit ha intrappolato deliberatamente i crawler Perplexity, dimostrando che aggiravano le restrizioni tramite strumenti di terze parti. Ne è seguita una causa legale.</p>
<p>La conseguenza operativa: robots.txt da solo non basta. Per enforcement reale, servono verifiche IP, regole WAF, o blocchi a livello CDN. Cloudflare riporta che oltre 2.5 milioni di siti usano la sua funzione di managed robots.txt per bloccare AI training.</p>
<hr />
<h2>llms.txt: il nuovo standard per guidare i LLM</h2>
<p>A settembre 2024, <a href="https://llmstxt.org/">Jeremy Howard di Answer AI ha proposto llms.txt</a>, un nuovo file standard per comunicare con i Large Language Models. A differenza di robots.txt, che controlla l’accesso, llms.txt guida i modelli verso i contenuti più rilevanti.</p>
<h3>Cosa fa llms.txt</h3>
<p>Il file llms.txt è un documento markdown posizionato alla root del dominio (<code>/llms.txt</code>). Funziona come una mappa curata che indica ai LLM quali pagine contengono le informazioni più importanti e come interpretarle.</p>
<p>Non è un meccanismo di blocco. È un sistema di raccomandazione, come un bibliotecario che guida un visitatore verso gli scaffali giusti invece di lasciarlo vagare.</p>
<h3>Struttura del file</h3>
<pre><code class="language-markdown"># example.com

&gt; Sito tecnico su implementazioni AI per enterprise.
&gt; Contenuti verificati, aggiornati mensilmente.

## Documentazione Core

- [Guida RAG Produzione](https://example.com/docs/rag-production):
  Architetture RAG testate in produzione, pattern di chunking,
  metriche di valutazione. Aggiornato Q4 2024.

- [API Reference](https://example.com/docs/api):
  Documentazione completa delle API REST. Include esempi
  di codice Python e cURL.

## Articoli Tecnici

- [Ottimizzazione Latenza LLM](https://example.com/blog/llm-latency):
  Strategie per ridurre latenza p95 sotto 200ms.
  Include benchmark su Claude, GPT-4, Mistral.

- [Cost Management AI](https://example.com/blog/ai-costs):
  Framework per stimare e ottimizzare costi inference.
  Dati reali da deployment enterprise.

## Risorse

- [Glossario AI](https://example.com/glossario):
  Definizioni tecniche di 150+ termini AI/ML.
</code></pre>
<h3>llms-full.txt: versione estesa</h3>
<p>Oltre a llms.txt, lo standard prevede un file opzionale <code>llms-full.txt</code> che contiene il contenuto completo del sito in formato flattened. Rimuove HTML, CSS, JavaScript non essenziali e presenta solo il testo. Alcuni siti generano file da 100K+ parole.</p>
<p>Il vantaggio: permette ai LLM di processare l’intero sito in un singolo context. Il limite: supera facilmente la context window della maggior parte dei modelli.</p>
<h3>Stato di adozione</h3>
<p>A gennaio 2025, <a href="https://www.ovrdrv.com/insights/llms-txt-the-new-standard-for-ai-crawling">OpenAI, Google e Anthropic non supportano nativamente llms.txt</a>. I loro crawler non leggono automaticamente il file.</p>
<p>L’adozione attuale è concentrata in nicchie specifiche:</p>
<ul>
<li><strong>Documentazione tecnica</strong>: Mintlify ha integrato llms.txt a novembre 2024. I siti di documentazione di Anthropic, Cursor, Cloudflare, Vercel lo usano.</li>
<li><strong>Directory dedicate</strong>: <a href="https://directory.llmstxt.cloud">directory.llmstxt.cloud</a> e <a href="https://llmstxt.site">llmstxt.site</a> catalogano i siti con implementazione.</li>
<li><strong>Uso manuale</strong>: Sviluppatori che uploadano il file direttamente a ChatGPT o Claude per dare contesto.</li>
</ul>
<p>È un investimento di future-proofing. Quando i major provider adotteranno lo standard, chi ha già implementato avrà vantaggio.</p>
<h3>Implementazione</h3>
<ol>
<li>Creare <code>/llms.txt</code> alla root del dominio</li>
<li>Formato UTF-8, markdown pulito</li>
<li>Includere solo pagine indexabili (no noindex, no blocked in robots.txt)</li>
<li>Aggiungere descrizioni concise ma informative per ogni URL</li>
<li>Opzionale: riferimento in robots.txt con <code># LLM-policy: /llms.txt</code></li>
</ol>
<h3>Differenze con altri file standard</h3>
<table>
  <caption>Confronto tra file standard per crawler web e AI</caption>
  <thead>
    <tr>
      <th>File</th>
      <th>Scopo</th>
      <th>Target</th>
      <th>Formato</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>robots.txt</td>
      <td>Controllo accesso crawler</td>
      <td>Search engines, AI crawler</td>
      <td>Plain text, direttive</td>
    </tr>
    <tr>
      <td>sitemap.xml</td>
      <td>Catalogo completo pagine</td>
      <td>Search engines</td>
      <td>XML</td>
    </tr>
    <tr>
      <td>llms.txt</td>
      <td>Mappa curata contenuti prioritari</td>
      <td>LLM</td>
      <td>Markdown</td>
    </tr>
    <tr>
      <td>humans.txt</td>
      <td>Crediti team</td>
      <td>Umani</td>
      <td>Plain text</td>
    </tr>
  </tbody>
</table>
<hr />
<h2>Structured Data e JSON-LD per AI</h2>
<p>Lo structured data non è una novità. È standard SEO dal 2011. Ma il suo ruolo cambia nel contesto dei motori generativi.</p>
<h3>Perché lo Structured Data conta per AI</h3>
<p>I LLM processano tutto come token. Non distinguono nativamente tra un prezzo, un nome, una data. Lo structured data fornisce un layer semantico esplicito che disambigua il contenuto.</p>
<p>Un articolo con markup JSON-LD comunica in modo machine-readable: questo è l’autore, questa è la data di pubblicazione, questa è l’organizzazione editrice, queste sono le fonti citate. Il modello non deve inferire questa struttura dal testo.</p>
<h3>Implementazione JSON-LD base</h3>
<p>JSON-LD (JavaScript Object Notation for Linked Data) è il formato preferito. Si inserisce in un tag <code>&lt;script&gt;</code> senza mescolarsi con l’HTML del contenuto:</p>
<pre><code class="language-html">&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "@id": "https://example.com/rag-production-guide",
  "headline": "RAG in Produzione: Pattern e Anti-Pattern",
  "description": "Guida tecnica all'implementazione RAG enterprise con metriche reali",
  "author": {
    "@type": "Person",
    "name": "Nome Autore",
    "url": "https://example.com/team/nome-autore",
    "jobTitle": "AI Team Leader",
    "knowsAbout": ["RAG", "LLM", "Vector Databases", "AI Engineering"]
  },
  "datePublished": "2025-01-04",
  "dateModified": "2025-01-04",
  "publisher": {
    "@type": "Organization",
    "name": "Example.com",
    "url": "https://example.com",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/rag-production-guide"
  },
  "articleSection": "Engineering",
  "keywords": ["RAG", "Production", "Enterprise AI", "Vector Search"],
  "wordCount": 3500,
  "inLanguage": "it"
}
&lt;/script&gt;
</code></pre>
<h3>Schema types prioritari per AI visibility</h3>
<p><strong>Article / TechArticle / NewsArticle</strong></p>
<p>Per contenuti editoriali. TechArticle per documentazione tecnica.</p>
<p><strong>FAQPage</strong></p>
<p>Struttura Q&amp;A che i motori generativi possono estrarre direttamente:</p>
<pre><code class="language-html">&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Qual è la differenza tra SEO e GEO?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "SEO ottimizza per liste di risultati dei motori di ricerca tradizionali. GEO ottimizza per essere citati nelle risposte sintetizzate dai motori generativi come ChatGPT e Perplexity."
      }
    },
    {
      "@type": "Question",
      "name": "llms.txt sostituisce robots.txt?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. robots.txt controlla l'accesso dei crawler. llms.txt guida i LLM verso contenuti prioritari. Hanno funzioni complementari."
      }
    }
  ]
}
&lt;/script&gt;
</code></pre>
<p><strong>HowTo</strong></p>
<p>Per guide step-by-step:</p>
<pre><code class="language-html">&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "Come configurare robots.txt per AI crawler",
  "step": [
    {
      "@type": "HowToStep",
      "position": 1,
      "name": "Identificare AI crawler target",
      "text": "Mappare gli user-agent dei crawler AI che vuoi permettere o bloccare."
    },
    {
      "@type": "HowToStep",
      "position": 2,
      "name": "Definire strategia di accesso",
      "text": "Decidere se permettere training, solo search, o bloccare completamente."
    },
    {
      "@type": "HowToStep",
      "position": 3,
      "name": "Implementare direttive",
      "text": "Aggiungere le regole User-agent e Allow/Disallow al file robots.txt."
    }
  ]
}
&lt;/script&gt;
</code></pre>
<p><strong>Organization e Person: E-E-A-T per AI</strong></p>
<p>E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) non è più solo un framework Google. I dati mostrano che i LLM verificano le credenziali autore prima di citare: il 96% dei contenuti in AI Overview proviene da fonti con autori verificati. Contenuti con author bio dettagliate hanno il 73% in più di probabilità di essere selezionati.</p>
<p>Lo schema Person deve andare oltre il nome. Serve comunicare credenziali, affiliazioni, competenze specifiche:</p>
<pre><code class="language-html">&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Mario Rossi",
  "url": "https://example.com/team/mario-rossi",
  "image": "https://example.com/images/mario-rossi.jpg",
  "jobTitle": "Senior AI Engineer",
  "description": "10+ anni di esperienza in ML/AI, specializzato in sistemi RAG enterprise",
  "worksFor": {
    "@type": "Organization",
    "name": "TechCorp Italia",
    "url": "https://techcorp.it"
  },
  "alumniOf": {
    "@type": "CollegeOrUniversity",
    "name": "Politecnico di Milano"
  },
  "hasCredential": [
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "certification",
      "name": "AWS Machine Learning Specialty"
    },
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "certification",
      "name": "Google Cloud Professional ML Engineer"
    }
  ],
  "knowsAbout": [
    "Retrieval-Augmented Generation",
    "Large Language Models",
    "Vector Databases",
    "MLOps",
    "AI Engineering"
  ],
  "sameAs": [
    "https://linkedin.com/in/mariorossi",
    "https://github.com/mariorossi",
    "https://scholar.google.com/citations?user=xxx"
  ]
}
&lt;/script&gt;
</code></pre>
<p><strong>Checklist E-E-A-T per schema Person:</strong></p>
<ul>
<li><code>description</code> con anni di esperienza e specializzazione</li>
<li><code>hasCredential</code> per certificazioni verificabili</li>
<li><code>knowsAbout</code> con topic specifici (non generici)</li>
<li><code>sameAs</code> con link a profili verificabili (LinkedIn, GitHub, Google Scholar)</li>
<li><code>alumniOf</code> per affiliazioni accademiche</li>
<li><code>worksFor</code> con URL organizzazione</li>
</ul>
<h3>Citation schema</h3>
<p>Per contenuti che citano fonti esterne, lo schema Citation aggiunge contesto:</p>
<pre><code class="language-html">&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Analisi Paper GEO Princeton",
  "citation": [
    {
      "@type": "ScholarlyArticle",
      "name": "GEO: Generative Engine Optimization",
      "author": ["Pranjal Aggarwal", "et al."],
      "datePublished": "2024",
      "publisher": {
        "@type": "Organization",
        "name": "Princeton University"
      },
      "url": "https://arxiv.org/abs/2311.09735"
    }
  ]
}
&lt;/script&gt;
</code></pre>
<h3>ImageObject e VideoObject per contenuti multimodali</h3>
<p>I contenuti multimodali hanno il 156% in più di probabilità di essere selezionati in AI Overview rispetto ai contenuti solo testo. Gemini e Perplexity investono pesantemente nella multimodal search. Lo schema per media diventa rilevante:</p>
<pre><code class="language-html">&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "ImageObject",
  "contentUrl": "https://example.com/images/architettura-rag.png",
  "name": "Architettura sistema RAG enterprise",
  "description": "Schema architetturale che mostra il flusso dati tra vector store, retriever e LLM in un sistema RAG di produzione",
  "author": {
    "@type": "Person",
    "name": "Mario Rossi"
  },
  "datePublished": "2025-01-04",
  "encodingFormat": "image/png"
}
&lt;/script&gt;
</code></pre>
<p>Per video con trascrizione:</p>
<pre><code class="language-html">&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Deploy RAG in produzione: walkthrough",
  "description": "Video tutorial su deployment di sistema RAG su AWS con monitoring",
  "thumbnailUrl": "https://example.com/video/rag-deploy-thumb.jpg",
  "uploadDate": "2025-01-04",
  "duration": "PT12M30S",
  "transcript": "https://example.com/video/rag-deploy-transcript.txt",
  "author": {
    "@type": "Person",
    "name": "Mario Rossi"
  }
}
&lt;/script&gt;
</code></pre>
<p><strong>Best practice per media AI-friendly:</strong></p>
<ul>
<li>Alt text descrittivo e contestuale (non “image1.png”)</li>
<li>Didascalie che spiegano il contenuto, non solo lo descrivono</li>
<li>Trascrizioni per tutti i video</li>
<li>Caption che contestualizzano la figura nel testo circostante</li>
</ul>
<h3>Impatto reale sugli AI search</h3>
<p>John Mueller di Google ha chiarito a gennaio 2025 che lo structured data non è un fattore di ranking diretto. Ma l’impatto indiretto è documentato:</p>
<ul>
<li>Rich snippets da structured data aumentano il CTR del 30% secondo <a href="https://www.brightedge.com/">BrightEdge</a></li>
<li>Il 72% dei siti in prima pagina Google usa schema markup</li>
<li>AI Overviews di Google elaborano structured data per costruire risposte</li>
</ul>
<p>Lo structured data non garantisce citazioni nei motori generativi. Ma fornisce il contesto semantico che facilita l’interpretazione corretta del contenuto.</p>
<hr />
<h2>Requisiti tecnici per AI crawler</h2>
<p>Oltre allo structured data, ci sono requisiti tecnici che influenzano la capacità dei LLM di processare e citare i contenuti.</p>
<h3>Static HTML vs JavaScript rendering</h3>
<p>Gli AI crawler hanno difficoltà con contenuti renderizzati via JavaScript. A differenza di Googlebot, che esegue JS, molti crawler AI preferiscono o richiedono HTML statico.</p>
<p><strong>Regole operative:</strong></p>
<ul>
<li>Contenuto critico deve essere presente nell’HTML statico, non generato dinamicamente</li>
<li>Evitare contenuti nascosti in tab, accordion, o caricati on-scroll</li>
<li>Se usi framework JS (React, Vue, Next.js), verificare che il SSR o SSG produca HTML completo</li>
<li>Test: visualizzare la pagina con JS disabilitato. Ciò che si vede è ciò che vedono i crawler AI base.</li>
</ul>
<h3>Content freshness signals</h3>
<p>Il 23% dei contenuti selezionati in AI Overview ha meno di 30 giorni. Perplexity indicizza giornalmente. I segnali di freshness sono prioritari rispetto all’autorità storica.</p>
<p><strong>Implementazione:</strong></p>
<p><code>dateModified</code> in schema deve riflettere aggiornamenti reali:</p>
<pre><code class="language-html">&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "Guida RAG Produzione",
  "datePublished": "2024-06-15",
  "dateModified": "2025-01-04"
}
&lt;/script&gt;
</code></pre>
<p><strong>Checklist freshness:</strong></p>
<ul>
<li>Aggiornare <code>dateModified</code> solo per modifiche sostanziali (non typo fix)</li>
<li>Segnalare update prominentemente nel contenuto (“Aggiornato: Gennaio 2025”)</li>
<li>Review trimestrale contenuti evergreen</li>
<li>Aggiornare statistiche e dati almeno annualmente</li>
<li>Rimuovere o marcare come archivio contenuti obsoleti</li>
</ul>
<h3>Verifica citazioni e fact-checking</h3>
<p>Gli AI eseguono cross-reference con fonti autorevoli in tempo reale. Contenuti con citazioni verificabili hanno l’89% in più di probabilità di selezione rispetto a contenuti con claim non supportati.</p>
<p><strong>Regole:</strong></p>
<ul>
<li>Ogni statistica deve avere fonte linkata</li>
<li>“Secondo una ricerca” senza link = claim non verificabile = penalizzato</li>
<li>Preferire fonti primarie (paper, documentazione ufficiale) su fonti secondarie</li>
<li>Citazioni da Wikipedia, Statista, Pew Research, paper arXiv hanno peso maggiore</li>
</ul>
<hr />
<h2>Strategie GEO: cosa dice la ricerca</h2>
<p>Il <a href="https://arxiv.org/abs/2311.09735">paper “GEO: Generative Engine Optimization”</a> di Princeton, Georgia Tech, Allen Institute e IIT Delhi è lo studio più rigoroso disponibile sull’ottimizzazione per motori generativi. Ha testato 9 tecniche su 10.000 query.</p>
<h3>Le tre strategie più efficaci</h3>
<p><strong>1. Cite Sources: +40% visibilità</strong></p>
<p>Aggiungere citazioni da fonti autorevoli è la strategia con il maggior impatto generale. Per siti con ranking basso nelle SERP tradizionali, l’effetto è ancora più marcato: +115% per siti in quinta posizione.</p>
<p>Non basta citare. La citazione deve essere da fonte riconosciuta, pertinente al claim, verificabile.</p>
<p><strong>2. Quotation Addition</strong></p>
<p>Incorporare citazioni dirette da esperti del settore aumenta autenticità e profondità percepita. Funziona particolarmente per contenuti opinion-based.</p>
<p><strong>3. Statistics Addition</strong></p>
<p>Dati quantitativi battono discussioni qualitative. “Il 42% dei progetti AI fallisce” ha più impatto di “molti progetti AI falliscono”. Funziona particolarmente per domini Legal e Government.</p>
<h3>Strutturare contenuti per estrazione: Answer Blocks</h3>
<p>I LLM non citano pagine intere. Estraggono blocchi specifici. Ottimizzare per questo pattern è critico.</p>
<p><em>Passage length</em> ottimale: 134-167 parole per blocco citabile. Per risposte FAQ dirette: 40-60 parole. Contenuti con summary box all’inizio hanno il 28-40% in più di probabilità di citazione.</p>
<p><strong>Implementazione pratica:</strong></p>
<ol>
<li>
<p><strong>TL;DR all’inizio:</strong> Ogni articolo apre con un blocco di sintesi self-contained. Non è solo per lettori umani: è il blocco che i LLM estraggono preferenzialmente.</p>
</li>
<li>
<p><strong>Sezioni self-contained:</strong> Ogni H2/H3 deve essere citabile indipendentemente dal resto. Un LLM deve poter estrarre quella sezione e avere una risposta completa.</p>
</li>
<li>
<p><strong>Heading come domande:</strong> “Cos’è il RAG?” performa meglio di “RAG Overview”. Matching diretto con query conversazionali.</p>
</li>
<li>
<p><strong>Paragrafi modulari:</strong> 75-300 parole per sezione. No wall of text. I blocchi modulari sono più facili da estrarre e citare.</p>
</li>
<li>
<p><strong>Risposte dirette prima, contesto dopo:</strong> La risposta alla domanda implicita dell’heading deve apparire nelle prime 2-3 frasi. L’elaborazione viene dopo.</p>
</li>
</ol>
<p><strong>Esempio di struttura ottimizzata:</strong></p>
<pre><code class="language-markdown">## Qual è la differenza tra SEO e GEO?

SEO ottimizza per posizionarsi nelle liste di risultati dei motori
di ricerca tradizionali. GEO ottimizza per essere citati nelle
risposte sintetizzate dai motori generativi come ChatGPT, Perplexity
e Gemini. [40-60 parole di risposta diretta]

Il cambiamento fondamentale riguarda l'obiettivo: dal ranking alla
citazione. Nel SEO classico, il successo è posizione 1 nelle SERP.
In GEO, il successo è essere la fonte che l'AI cita quando risponde.
[Elaborazione e contesto]
</code></pre>
<h3>Strategie domain-specific</h3>
<p>Il paper ha scoperto che l’efficacia varia per dominio:</p>
<ul>
<li><strong>History</strong>: Tono autorevole e persuasivo</li>
<li><strong>Facts</strong>: Citazioni da fonti primarie</li>
<li><strong>Law/Government</strong>: Statistiche e dati quantitativi</li>
<li><strong>Science/Health</strong>: Terminologia tecnica + autorevolezza</li>
</ul>
<h3>Ottimizzazione per piattaforma specifica</h3>
<p>Ogni LLM ha preferenze diverse. Una strategia GEO efficace considera queste differenze:</p>
<table>
  <caption>Preferenze di ottimizzazione per piattaforme AI generative</caption>
  <thead>
    <tr>
      <th>Piattaforma</th>
      <th>Preferenze principali</th>
      <th>Ottimizzazione</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>ChatGPT</strong></td>
      <td>Wikipedia, brand popolari, contenuti consolidati</td>
      <td>Authority building, presenza Wikipedia se applicabile</td>
    </tr>
    <tr>
      <td><strong>Perplexity</strong></td>
      <td>Reddit, contenuti recenti, real-time</td>
      <td>Freshness prioritaria, engagement community</td>
    </tr>
    <tr>
      <td><strong>Gemini</strong></td>
      <td>Multimodal, ecosistema Google, schema markup</td>
      <td>Video, immagini ottimizzate, structured data completo</td>
    </tr>
    <tr>
      <td><strong>Claude</strong></td>
      <td>Accuracy, contenuti bilanciati, attribuzione</td>
      <td>Proper attribution, framing neutro ed evidence-based</td>
    </tr>
    <tr>
      <td><strong>Google AI Overview</strong></td>
      <td>Top 10 organic, E-E-A-T forte</td>
      <td>SEO tradizionale + structured data esteso</td>
    </tr>
  </tbody>
</table>
<p><strong>Implicazioni operative:</strong></p>
<ul>
<li>ChatGPT cita Wikipedia nel 48% delle risposte. Per topic dove esiste una voce Wikipedia, la presenza lì pesa.</li>
<li>Perplexity preferisce Reddit (46.7% delle citazioni). Contenuti discussi in subreddit rilevanti hanno vantaggio.</li>
<li>Gemini integra immagini e video nelle risposte. Contenuti multimodali performano meglio.</li>
<li>Claude verifica accuracy più rigorosamente. Claim non supportati vengono scartati.</li>
</ul>
<h3>Cosa non funziona</h3>
<p><strong>Keyword stuffing</strong>: Aggiungere keyword dalla query al contenuto peggiora la visibilità del 10% rispetto al baseline. I motori generativi penalizzano l’over-optimization.</p>
<p><strong>Persuasive language generico</strong>: Tono persuasivo senza sostanza non migliora il posizionamento.</p>
<h3>Democratizzazione dei risultati</h3>
<p>Un aspetto interessante: GEO livella il campo di gioco. I siti con ranking basso nelle SERP tradizionali beneficiano di più dalle ottimizzazioni GEO rispetto ai siti dominanti. Cite Sources porta +115% ai siti in quinta posizione e -30% ai siti in prima posizione.</p>
<p>Per piccoli editori e business indipendenti, è un’opportunità di competere con corporate giants senza budget SEO comparabili.</p>
<hr />
<h2>Checklist implementazione</h2>
<h3>robots.txt</h3>
<ul>
<li>[ ] Mappare tutti gli AI crawler rilevanti per il settore</li>
<li>[ ] Definire strategia: full access, search-only, selective</li>
<li>[ ] Implementare direttive per ogni user-agent</li>
<li>[ ] Verificare sintassi con <a href="https://www.google.com/webmasters/tools/robots-testing-tool">Google Robots Testing Tool</a></li>
<li>[ ] Monitorare server logs per attività crawler</li>
<li>[ ] Verificare compliance effettiva (IP check per crawler sospetti)</li>
<li>[ ] Review trimestrale: nuovi crawler emergono regolarmente</li>
</ul>
<h3>llms.txt</h3>
<ul>
<li>[ ] Creare file markdown alla root del dominio</li>
<li>[ ] Includere descrizione del sito e tipo di contenuti</li>
<li>[ ] Organizzare URL per categoria/priorità</li>
<li>[ ] Aggiungere descrizioni concise per ogni link</li>
<li>[ ] Verificare che tutti gli URL siano indexabili</li>
<li>[ ] Considerare llms-full.txt per siti con documentazione estesa</li>
<li>[ ] Aggiornare quando nuovi contenuti prioritari vengono pubblicati</li>
</ul>
<h3>Structured Data / JSON-LD</h3>
<ul>
<li>[ ] Implementare Organization schema per il sito</li>
<li>[ ] Aggiungere Person schema per autori con E-E-A-T completo:
<ul>
<li>[ ] <code>description</code> con anni esperienza e specializzazione</li>
<li>[ ] <code>hasCredential</code> per certificazioni verificabili</li>
<li>[ ] <code>knowsAbout</code> con topic specifici</li>
<li>[ ] <code>sameAs</code> con LinkedIn, GitHub, Google Scholar</li>
</ul>
</li>
<li>[ ] Usare Article/TechArticle per contenuti editoriali</li>
<li>[ ] Implementare FAQPage per sezioni Q&amp;A</li>
<li>[ ] Aggiungere Citation schema per contenuti research-based</li>
<li>[ ] Implementare ImageObject/VideoObject per media</li>
<li>[ ] Validare con <a href="https://search.google.com/test/rich-results">Google Rich Results Test</a></li>
<li>[ ] Verificare parità markup-contenuto visibile</li>
</ul>
<h3>Contenuto GEO-optimized</h3>
<ul>
<li>[ ] TL;DR di 40-60 parole all’inizio di ogni articolo</li>
<li>[ ] Sezioni self-contained (citabili indipendentemente)</li>
<li>[ ] Heading formulati come domande dove appropriato</li>
<li>[ ] Paragrafi modulari: 75-300 parole per sezione</li>
<li>[ ] <em>Passage length</em>: 134-167 parole per blocchi chiave</li>
<li>[ ] Includere citazioni da fonti autorevoli in ogni articolo</li>
<li>[ ] Aggiungere statistiche e dati quantitativi con fonte</li>
<li>[ ] Usare quotazioni da esperti dove rilevante</li>
<li>[ ] Evitare keyword stuffing</li>
<li>[ ] Calibrare tono per dominio</li>
</ul>
<h3>Requisiti tecnici</h3>
<ul>
<li>[ ] Contenuto critico in HTML statico (non solo JS-rendered)</li>
<li>[ ] No contenuti nascosti in tab/accordion/lazy-load</li>
<li>[ ] Test pagina con JavaScript disabilitato</li>
<li>[ ] <code>dateModified</code> aggiornato per modifiche sostanziali</li>
<li>[ ] Segnalare update nel contenuto (“Aggiornato: Mese Anno”)</li>
<li>[ ] Review trimestrale contenuti evergreen</li>
<li>[ ] Ogni statistica con fonte linkata</li>
</ul>
<h3>Media e Multimodal</h3>
<ul>
<li>[ ] Alt text descrittivo e contestuale per immagini</li>
<li>[ ] Didascalie che spiegano il contenuto</li>
<li>[ ] Trascrizioni per tutti i video</li>
<li>[ ] Schema ImageObject/VideoObject implementato</li>
<li>[ ] Caption che contestualizzano figure nel testo</li>
</ul>
<h3>Monitoring</h3>
<ul>
<li>[ ] Tracciare attività AI crawler nei server logs</li>
<li>[ ] Monitorare menzioni del brand in risposte ChatGPT/Perplexity/Gemini</li>
<li>[ ] Analizzare competitor citation share</li>
<li>[ ] Misurare traffico referral da AI platforms</li>
<li>[ ] Review mensile delle metriche</li>
</ul>
<hr />
<h2>La finestra di opportunità</h2>
<p>I dati Cloudflare mostrano che il crawling per AI training domina ancora il traffico, con volumi 8 volte superiori al search crawling e 32 volte superiori al crawling da query utente. Ma il trend è chiaro: il traffico user-action sta crescendo più velocemente di ogni altra categoria.</p>
<p>Chi implementa l’infrastruttura GEO ora costruisce vantaggi che si accumulano nel tempo. Le citazioni generano altre citazioni. L’autorità riconosciuta dai modelli si rafforza. Il first-mover advantage in questo spazio non riguarda solo il posizionamento tecnico: riguarda la costruzione di una presenza consolidata prima che la competizione si intensifichi.</p>
<p>Il SEO tradizionale non scompare. Continua a servire il 70% del traffico search che ancora passa per le SERP classiche. Ma il restante 30%, e la sua traiettoria di crescita, richiede strumenti nuovi.</p>
<hr />
<h2>Fonti</h2>
<p>Aggarwal, P., et al. (2024). <a href="https://arxiv.org/abs/2311.09735"><em>GEO: Generative Engine Optimization</em></a>. arXiv:2311.09735. Princeton University, Georgia Tech, Allen Institute for AI, IIT Delhi.</p>
<p>AI Mode Boost. (2025). <a href="https://aimodeboost.com/resources/research/ai-overview-ranking-factors-2025/"><em>AI Overview Ranking Factors: 2025 Comprehensive Study</em></a>.</p>
<p>Cloudflare. (2025, December). <a href="https://blog.cloudflare.com/from-googlebot-to-gptbot-whos-crawling-your-site-in-2025/"><em>From Googlebot to GPTBot: Who’s Crawling Your Site in 2025</em></a>. Cloudflare Blog.</p>
<p>Dataslayer. (2025). <a href="https://www.dataslayer.ai/blog/google-ai-overviews-the-end-of-traditional-ctr-and-how-to-adapt-in-2025"><em>Google AI Overviews Impact 2025: CTR Down 61%</em></a>.</p>
<p>Howard, J. (2024, September). <a href="https://llmstxt.org/"><em>llms.txt Proposal</em></a>. Answer AI.</p>
<p>W3C Schema Community. (2024). <a href="https://schema.org/docs/documents.html"><em>Schema Vocabulary Documentation</em></a>.</p>
<p>SEO Sherpa. (2025, October). <a href="https://seosherpa.com/google-ai-search-guidelines/"><em>Google AI Search Guidelines 2025</em></a>.</p>
<p>Single Grain. (2025, October). <a href="https://www.singlegrain.com/search-everywhere-optimization/google-ai-overviews-the-ultimate-guide-to-ranking-in-2025/"><em>Google AI Overviews: The Ultimate Guide to Ranking in 2025</em></a>.</p>
<p>Yoast. (2025). <a href="https://yoast.com/structured-data-schema-ultimate-guide/"><em>Structured Data with Schema for Search and AI</em></a>.</p>
<p>Overdrive Interactive. (2025, July). <a href="https://www.ovrdrv.com/insights/llms-txt-the-new-standard-for-ai-crawling"><em>LLMs.txt: The New Standard for AI Crawling</em></a>.</p>
]]></content:encoded>
      <category>Tecnica</category>
      <category>Business</category>
      <category>GEO</category>
      <category>SEO</category>
      <category>AI Search</category>
      <category>Schema.org</category>
      <category>robots.txt</category>
      <category>llms.txt</category>
      <atom:link rel="alternate" hreflang="en" href="https://ireneburresi.dev/en/blog/engineering/seo-vs-geo/"/>
    </item>
  </channel>
</rss>