Introduzione al livello semantico agentico
In questo post mostriamo come costruire un livello semantico per l’intelligenza artificiale agentica utilizzando EDB Postgres AI. L’agente Strands Agents viene eseguito su Amazon Bedrock AgentCore e interroga il livello semantico per rispondere a domande tipiche di un profilo cliente a 360° (C360). Le pubblicazioni precedenti della serie hanno realizzato lo stesso modello C360 con Stardog, Denodo, AtScale e Strategy Mosaic.
EDB Postgres AI inserisce il livello semantico all’interno del database operativo PostgreSQL grazie all’estensione AIDB. Il significato di business vive accanto ai dati nei normali comandi COMMENT, il grafo di join è ricavato dalle chiavi esterne di PostgreSQL e la governance si basa su GRANT e sulla sicurezza a livello di riga tramite il Model Context Protocol (MCP) fornito con AIDB.
Obiettivi di apprendimento
Al termine della lettura saprai:
- Come costruire un SemKB (Semantic Knowledge Base) AIDB su uno schema PostgreSQL, utilizzando
COMMENT ONe la funzioneaidb.createsemanticaliascome superficie di authoring, e come le chiavi esterne generano i percorsi di join. - Come esporre il catalogo degli strumenti AIDB a un agente esterno tramite l’endpoint MCP integrato, protetto da un Application Load Balancer (ALB) e registrato come target MCP su AgentCore Gateway.
- Come i ruoli PostgreSQL, i
GRANTa livello di colonna e la sicurezza a livello di riga producono risultati diversi per chiamanti diversi, mantenendo invariati prompt, catalogo strumenti e codice agente. - Come AIDB cattura tracce OpenTelemetry per ogni esecuzione SQL, salvandole nella schema
aidb_otele rendendole interrogabili con SQL tradizionale.
Le tre componenti di un agente
Un agente che risponde a domande di business su dati in tempo reale necessita di tre livelli:
1. Modello di pianificazione
Il livello modello è rappresentato da Anthropic Claude su Amazon Bedrock, lo stesso modello usato nelle pubblicazioni precedenti (la disponibilità varia per AWS Region).
2. Livello di significato
Qui interviene la novità: un SemKB residente all’interno del database PostgreSQL operativo. Schema e definizioni di business sono indicizzati insieme; i permessi di accesso sono gestiti da GRANT, sicurezza a livello di riga e a livello di colonna, senza ricorrere a prompt di sistema.
3. Runtime
Il runtime è AgentCore, una capacità di Amazon Bedrock AgentCore. AgentCore Gateway gestisce l’autorizzazione in ingresso, mentre AgentCore Identity conserva le credenziali di uscita per i target di strumenti, analogamente a quanto fatto nelle versioni precedenti.
Caso d’uso: C360 su EDB Postgres AI
Il dataset proviene dal Stardog C360 Knowledge Kit, caricato in un’istanza dedicata di EDB Postgres AI all’interno dello schema c360. Il modello dati comprende quattro tabelle e una vista derivata:
- customers: cid, firstname, lastname, full_name, email, ssn, phone, picture, location (FK a locations.id)
- locations: id, city, state, zip
- products: id, name, brand, dept, price
- purchases: id, cid (FK a customers.cid), pid (FK a products.id), date, quantity, price
- bigspender (view): cid, fullname, state, largeorders, largestorder
Il grafo di join è semplice: un cliente vive in una location, effettua acquisti, e ogni acquisto è associato a un prodotto. La semantica aggiuntiva, non evidente dai nomi delle colonne, è definita tramite commenti:
- State non è una colonna del cliente, ma è recuperata da
locationstramite la chiave esternacustomers.location, con un commento che indica al SemKB dove trovarla. - purchases.price rappresenta il totale dell’ordine, non il prezzo unitario; un agente che lo interpreta erroneamente moltiplicerebbe per
quantity, generando risultati gonfiati. - Il concetto di big spender è definito tramite una
COMMENT ON VIEWsulla vistabig_spender, garantendo una singola fonte di verità per tutti gli agenti, dashboard e query.
Le domande tipiche poste all’agente includono:
- Chi sono i primi 10 clienti per spesa totale e in quale stato risiedono?
- Quanti big spender esistono per stato?
- Elencare 10 clienti con lo stato di residenza.
- Quali 10 prodotti hanno venduto più unità?
- Elencare cinque clienti con i relativi numeri di Social Security (usati per verificare la governance).
Architettura di riferimento
Il diagramma sottostante (non mostrato) descrive il percorso dalla richiesta dell’analista fino al livello semantico in EDB Postgres AI. L’analista si autentica tramite Amazon Cognito e invia una chiamata a AgentCore Gateway** con il JWT come token Bearer. Il gateway valida il token, applica le politiche Cedar e indirizza la chiamata al runtime di AgentCore, dove Claude pianifica e compone la risposta.
Il tool call dell’agente è una richiesta MCP. AgentCore Gateway supporta direttamente target MCP; l’endpoint edb-endpoints di AIDB espone un server HTTP MCP con autenticazione Basic, raggiungibile tramite un ALB con listener HTTPS e certificato ACM. L’ALB URL è registrato come target del gateway.
Le credenziali del ruolo PostgreSQL sono gestite da AgentCore Identity**, che le inserisce come Basic Auth in ogni chiamata in uscita. L’agente non vede direttamente le credenziali.
Per l’osservabilità, AgentCore invia tracce a Amazon CloudWatch Transaction Search, mentre AIDB registra tracce OpenTelemetry in aidb_otel, interrogabili con SQL una volta attivata la telemetria sul database.
Flussi di comunicazione tra AgentCore e EDB Postgres AI
Flusso in ingresso
1. Il client chiama AgentCore Gateway con un token JWT rilasciato da un pool Amazon Cognito.
2. Il gateway verifica il token tramite l’URL di discovery di Cognito e applica la policy Cedar per determinare i tool autorizzati.
3. La chiamata viene instradata al runtime di AgentCore, dove Claude genera il piano di query.
Flusso in uscita verso il livello semantico
1. L’agente invoca un tool MCP. AgentCore Gateway tratta l’endpoint edb-endpoints come server MCP target.
2. L’ALB riceve la richiesta, la instrada a un’istanza EC2 che esegue il server MCP di AIDB.
3. AIDB risponde con i risultati del SemKB, applicando i permessi definiti da ruoli, GRANT a livello di colonna e sicurezza a livello di riga.
4. Le tracce di esecuzione SQL sono salvate in aidb_otel per analisi successiva.
Costruzione del livello semantico
Le seguenti istruzioni assumono che AIDB sia installato e attivo sull’istanza EDB Postgres AI e che i quattro CSV del kit C360 siano stati caricati nello schema c360 con le chiavi primarie e esterne illustrate in precedenza.
Poiché il livello semantico risiede nello stesso database dei dati, non è necessario un secondo sistema né un catalogo da sincronizzare. La definizione semantica avviene interamente in SQL.
Passaggi chiave:
- Creare il SemKB indicizzando lo schema con
aidb.createsemanticaliase aggiungendoCOMMENT ONper colonne e viste. - Definire alias semantici per concetti come “state”, “totalprice” e “bigspender” tramite commenti e alias.
- Abilitare la sicurezza impostando ruoli PostgreSQL,
GRANTa livello di colonna e politiche di sicurezza a livello di riga (ROW LEVEL SECURITY). - Esportare il catalogo come endpoint MCP tramite
edb-endpoints, configurando l’ALB e registrando l’URL nel gateway. - Abilitare la telemetria con
SELECT aidb.enable_telemetry();per raccogliere tracce OpenTelemetry.
Esempio di definizione semantica
Di seguito un estratto di SQL che mostra come commentare le colonne e creare alias semantici:
COMMENT ON COLUMN c360.customers.location IS 'location_fk: collegamento a locations.id per ottenere lo stato del cliente';COMMENT ON COLUMN c360.purchases.price IS 'order_total: totale dell’ordine, non prezzo unitario';
COMMENT ON VIEW c360.big_spender IS 'Definizione di big spender: clienti con spesa totale > 10000';
SELECT aidb.createsemanticalias('state', 'SELECT l.state FROM c360.locations l WHERE l.id = customers.location');
SELECT aidb.createsemanticalias('total_spent', 'SELECT SUM(p.price) FROM c360.purchases p WHERE p.cid = customers.cid');
Questi commenti guidano AIDB nella costruzione del grafo semantico e nella generazione di percorsi di join automatici.
Gestione di ruoli e governance
Supponiamo due ruoli PostgreSQL:
- analyst_role: ha
GRANT SELECTsu tutte le colonne eccettossn. - compliance_role: ha
GRANT SELECTsu tutte le colonne, inclusossn, ma è soggetto a una policy di sicurezza a livello di riga che filtra i record per regione.
L’agente utilizza lo stesso prompt e lo stesso catalogo di tool, ma le risposte variano a seconda del ruolo con cui il tool MCP è autenticato. L’analista non vedrà i numeri di SSN, mentre il compliance officer li potrà visualizzare ma solo per i clienti della propria regione.
Osservabilità e diagnostica
Le tracce OpenTelemetry generate da AIDB vengono inserite nella tabella aidbotel.sqltraces. Un tipico interrogazione per analizzare le query più lente è:
SELECT query, avg(durationms) AS avgms, count(*) AS exec_countFROM aidbotel.sqltraces
GROUP BY query
ORDER BY avg_ms DESC
LIMIT 10;
Queste informazioni consentono di ottimizzare il modello semantico, aggiungere indici o ristrutturare le viste per migliorare le performance dell’agente.
Conclusioni
Integrando EDB Postgres AI con Amazon Bedrock AgentCore, è possibile creare un livello semantico robusto e governato direttamente all’interno del database operativo. La combinazione di commenti SQL, alias semantici, sicurezza nativa di PostgreSQL e l’interfaccia MCP consente agli agenti di accedere a dati ricchi di significato senza dipendere da sistemi esterni di catalogo o da prompt di governance. Inoltre, la traccia end‑to‑end tramite CloudWatch e OpenTelemetry offre una visibilità completa per il monitoraggio e l’ottimizzazione.
Questo approccio dimostra come la composizione di componenti cloud‑native e di estensioni database avanzate possa semplificare l’architettura, ridurre la latenza e garantire una governance rigorosa, aprendo la strada a future implementazioni di AI agentica su scala aziendale.
