Agente AI su Azure Foundry per ISO 27001

Agente

Agente

Come GPT-4o e GPT-4o-mini e il nuovo “Model Router” hanno tentato di boicottare il mio esame ISO 27001.
Come GPT 5.2 ha permesso di passarlo.
Cosa ho imparato sugli LLM.

Partiamo dall’inizio

Dovevo prepararmi per l’esame di certificazione ISO 27001 e ho quindi deciso che un agente in grado di simulare le domande e le risposte dell’esame sarebbe stato perfetto per esercitarmi.

Sono quindi partito da un set di 250 domande, delle quali conoscevo già la risposta corretta, e ho creato un indice su Azure AI Search. L’obiettivo era fare in modo che l’agente, data una domanda del tipo:

The IRT has been notified of a potential compromise in the organization’s network. Which type of services would be most appropriate for the IRT to provide in this situation?
Reactive services.
Proactive services.
Security quality management services.
Rispondesse: Reactive services

L’agente che avevo in mente doveva usare tutte le ultime novità introdotte da Microsoft con il Microsoft Agent Framework, e volevo utilizzare il nuovo modello Model Router. Il Model Router di Azure AI Foundry serve a evitare di scegliere manualmente un singolo LLM per ogni chiamata, lasciando che sia il router a instradare la richiesta verso il modello più adatto in base al prompt o al task. Microsoft lo descrive nel catalogo di Azure AI Foundry come un modello distribuibile, addestrato per selezionare il modello più appropriato.

Detto meglio: non sceglie sempre “il modello migliore in assoluto”, ma cerca di individuare il modello più adatto rispetto al bilanciamento tra qualità della risposta, complessità del task, costo, latenza/prestazioni e disponibilità dei modelli sottostanti. A leggerlo così, questo modello sembrava proprio perfetto per raggiungere il mio scopo: rispondere correttamente alle famose 250 domande. Descritto ad alto livello, si tratta quindi di un agente su Microsoft Foundry collegato a una knowledge base su Azure AI Search.

Primo passo: Azure AI Search

Sono quindi partito da un set di 250 domande, delle quali conoscevo già la risposta corretta, e ho creato un indice su Azure AI Search. Per prima cosa, ho configurato l’indice in modo che rispettasse i requisiti del Microsoft Agent Framework.
Ho quindi creato un indice con il seguente codice:

Agente AI su Azure Foundry per ISO 27001

Il codice sopra crea un indice Azure AI Search con supporto a:

  1. ricerca testuale full-text;
  2. ricerca vettoriale ANN tramite HNSW;
  3. semantic search / semantic ranking;
  4. possibili query ibride, cioè keyword search + vector search + semantic reranking.

Questa parte abilita la ricerca vettoriale usando l’algoritmo HNSW, cioè Hierarchical Navigable Small World. Il campo più importante, lato vector search, è questo:

Agente AI su Azure Foundry per ISO 27001

Questo definisce un campo vettoriale contenente una lista di float, cioè un embedding. In pratica, non si tratta di un semplice indice testuale: è un indice ibrido semantico-vettoriale.
Azure AI Search userà quindi Question come campo principale e Answer come contenuto da analizzare semanticamente.

Agente AI su Azure Foundry per ISO 27001

Questo consente di eseguire query testuali sulla domanda, ma anche filtri e ordinamenti.
Answer, invece, è dichiarato come SimpleField, non come SearchableField.
Quindi non è ricercabile tramite full-text search. Può però essere usato dalla semantic configuration come campo di contenuto, se presente nei documenti.

In conclusione, questo codice crea un indice Azure AI Search di tipo hybrid search index, con vector search HNSW e semantic ranking. È pensato probabilmente per uno scenario RAG o Q&A, dove:

  • Question contiene il testo della domanda;
  • Answer contiene la risposta;
  • QuestionVector contiene l’embedding della domanda;
  • la ricerca vettoriale trova domande semanticamente simili;
  • la semantic search può migliorare ranking, captions e answers;
  • QuestionId identifica univocamente ogni documento.

Una volta creato, l’indice viene visualizzato nel portale come mostrato in figura:

Agente AI su Azure Foundry per ISO 27001

Interrogandolo tramite console, ho verificato il corretto funzionamento dell’indice appena creato.

Agente AI su Azure Foundry per ISO 27001

Secondo passo: Microsoft Foundry

Ho quindi creato l’agente dal portale Azure.

Agente AI su Azure Foundry per ISO 27001

Ho quindi collegato l’agente alla knowledge base basata su Azure AI Search.

E ho impostato il seguente prompt:
You are a Knowledge Base Retrieval Assistant. Your task is to determine whether the user’s query matches a specific question stored in the knowledge base.

You will be provided with:
– The user query
– A list of candidate knowledge base entries retrieved from search

Each knowledge base entry contains:
– QuestionId
– Question
– Answer

Instructions:
– Compare the user query with the provided knowledge base questions.
– Identify the single best matching question.
– If a match is found: – Return the corresponding id, question, and answer.
– If no sufficiently match exists: – Return “not_found”: true.

Strict Output Requirements:
– Respond ONLY in valid JSON.
– Do not include explanations.
– Do not add extra fields.
– Do not fabricate content.
– Do not modify the stored answer.

Output format if match found:
{
“not_found”: false,
“id”: “”,
“question”: “”,
“answer”: “”
}
Output format if no match: { “not_found”: true }

Fatto questo, ho voluto creare una console application che, partendo dalle 250 domande, generasse un file da dare in pasto al valutatore, così da capire se l’agente “allucinasse” oppure fornisse la risposta attesa.
Con non poca fatica, a causa delle frequentissime modifiche alla libreria, sono riuscito a trovare il codice più aggiornato e compatibile.
La prima parte si occupa di istanziare gli oggetti dell’Agent Framework.

Agente AI su Azure Foundry per ISO 27001

Un ciclo chiede poi all’agente ciascuna delle domande, attende la risposta e salva i dati in una struttura utile per la successiva valutazione da parte dei valutatori.

Agente AI su Azure Foundry per ISO 27001

Il sorpresone, la riflessione e le conclusioni.

Mi aspettavo il 100% di risposte corrette. Ed è qui che ho avuto una bella sorpresa.

Tutti i modelli più “economici”, come GPT-4o, GPT-4o-mini e il nuovo Model Router, fornivano risposte non coerenti con quella attesa: in alcuni casi non trovavano la risposta, in altri rispondevano con la risposta relativa a un’altra domanda.

Temendo che si trattasse di un bug nel codice, ho fatto più e più volte la code review dell’applicazione.
Utilizzando però anche la console di Foundry, si verificava la stessa situazione. La problematica, quindi, non era nel codice, ma nel comportamento dell’agente.

Ho risolto il problema utilizzando GPT-5.2 che, su 250 domande, ha sbagliato una sola risposta.

Da notare come il modello non dovesse, in effetti, usare la knowledge interna, ma affidarsi completamente alla knowledge esterna. Si tratta quindi di pura abilità nel ricercare la risposta all’interno di Azure Search. Non mi aspettavo sicuramente che i modelli più comuni avessero difficoltà a svolgere questa operazione, abbastanza comune. 

Conclusione

Facendo poi un’analisi più accurata, e cercando di trarne una lezione, ho capito che avevo riposto un’eccessiva fiducia nel modello. La realtà è che, se un modello costa 10 e un altro costa 20, spesso anche la qualità segue una proporzione simile.
Immagine di Alberto Valenti

Alberto Valenti

MCT/MCP Microsoft Certified Professional

Se vuoi maggiori informazioni

Se vuoi maggiori informazioni

Agente

Agente AI su Azure Foundry per ISO 27001

Agente

Agente AI su Azure Foundry per ISO 27001
Tags
Share this blog
Latest Posts
Categories
Solutions
Share this blog
What do you think?

What to read next

Got a project? Let’s talk!

Got a project?
Let’s talk!