L’AI enrichment è il processo con cui Azure AI Search trasforma contenuti grezzi (PDF, immagini, documenti Office, JSON) in dati strutturati e ricercabili. Il cuore di questo processo è lo skillset: una definizione riutilizzabile che orchestra una sequenza di skill, ciascuna delle quali riceve input, produce output e li aggiunge a un enrichment tree (l’albero arricchito costruito sul documento). Lo skillset viene invocato dall’indexer, che coordina l’intera pipeline.

La pipeline dell’indexer

L’indexer esegue passi ben precisi, e all’esame è fondamentale conoscerne l’ordine:

  1. Connessione alla data source (Blob Storage, ADLS Gen2, SQL, Cosmos DB).
  2. Document cracking: il file viene aperto ed estratti testo e immagini.
  3. Enrichment: esecuzione delle skill dello skillset.
  4. Output field mapping e/o knowledge store: proiezione dei risultati.
  5. Scrittura nell’index.

È qui che l’enrichment fa da collante tra Vision e Language: la stessa pipeline può passare un’immagine estratta a una skill di OCR o di image analysis (Azure AI Vision) e poi inoltrare il testo risultante a skill di entity recognition o translation (Azure AI Language), tutto in un unico flusso.

Built-in cognitive skills

Le built-in skills coprono i casi più comuni senza scrivere codice:

  • OcrSkill: estrae testo da immagini e PDF scansionati (Vision).
  • ImageAnalysisSkill: genera tag, caption e descrizioni visive (Vision).
  • EntityRecognitionSkill / PIIDetectionSkill: identifica persone, luoghi, organizzazioni, dati sensibili (Language).
  • KeyPhraseExtractionSkill: estrae i concetti chiave del testo.
  • LanguageDetectionSkill e TextTranslationSkill: rilevano e traducono la lingua.
  • MergeSkill e SplitSkill: ricompongono testo + testo-da-OCR o segmentano documenti lunghi (utile prima del chunking per scenari RAG).

Una scelta architetturale tipica: per unire il testo nativo del documento con quello estratto via OCR dalle immagini incorporate si usa MergeSkill, così l’indice contiene un unico campo di contenuto completo.

Custom skills via Web API

Quando la logica non è coperta dalle skill native, si usa la WebApiSkill (o l’AmlSkill per modelli su Azure Machine Learning / Azure AI Foundry). La custom skill chiama un endpoint HTTP esterno — tipicamente una Azure Function — che deve rispettare un contratto rigido: input e output in formato { "values": [ { "recordId", "data", "errors", "warnings" } ] }. Serve per arricchimenti proprietari: classificazioni di dominio, chiamate a un modello LLM, lookup su sistemi esterni.

Output field mapping e knowledge store

Le skill producono nodi nell’enrichment tree, ma questi non finiscono nell’indice automaticamente. Occorre mappare esplicitamente:

  • Field mappings: collegano un campo della sorgente a un campo dell’indice (prima dell’enrichment).
  • Output field mappings: collegano un nodo arricchito (es. /document/normalized_images/*/text) a un campo dell’indice. Distinzione classica da esame: i primi lavorano sui dati sorgente, i secondi sull’output delle skill.

Il knowledge store è invece la proiezione persistente dei dati arricchiti verso Azure Storage, indipendente dall’indice di ricerca. Consente tre tipi di projection:

  • table projections → tabelle relazionali interrogabili (es. da Power BI o Microsoft Fabric);
  • object projections → blob JSON per ogni documento;
  • file projections → immagini estratte salvate come file.

Il knowledge store serve quando l’arricchimento deve alimentare analisi downstream, non solo la ricerca full-text.

Costi e caching

L’esecuzione delle skill di Vision e Language a scala consuma transazioni a pagamento: per andare oltre le poche transazioni gratuite bisogna collegare allo skillset una risorsa Azure AI services multi-service (chiave nella proprietà cognitiveServices dello skillset). Senza risorsa collegata, l’enrichment si blocca appena superato il tier gratuito.

Per contenere i costi si abilita l’enrichment cache (incremental enrichment), che memorizza gli output intermedi in un Azure Storage account: reindicizzazioni successive rieseguono solo le skill i cui input o la cui definizione sono cambiati, evitando di ripagare OCR e analisi su documenti immutati.

Trappole tipiche d’esame

  • Scenario: l’enrichment fallisce dopo poche migliaia di documenti → serve una risorsa Azure AI services multi-service collegata allo skillset; il tier gratuito copre solo circa 20 documenti/giorno.
  • Scenario: devi ridurre i costi di reindicizzazione frequente → abilita l’enrichment (incremental) cache su un Storage account, non aumentare il tier del search service.
  • Scenario: il testo estratto via OCR non compare nell’indice → mancano gli output field mappings (non i field mappings), perché il dato nasce dall’enrichment tree.
  • Scenario: serve proiettare i dati arricchiti in tabelle per analisi in Power BI/Fabric → usa il knowledge store con table projections, non l’indice di ricerca.
  • Scenario: logica di arricchimento proprietaria non coperta dalle skill native → WebApiSkill verso una Azure Function che rispetti il contratto values/recordId/data.