@patrunomeister — per questa modifica aspetto il tuo consenso prima di procedere.
Problema
Quando un LLM chiede dati ISTAT, il tool get_constraints restituisce tutti i valori di tutte le dimensioni con descrizioni — per il dataflow coltivazioni sono ~14.7k token e 456 righe.
L'LLM ha bisogno solo di trovare 2-3 codici (es. "Sicilia" e "olio di oliva"), ma riceve l'intera lista di 143 territori, 244 colture, ecc. Questo:
- Riempie il contesto rapidamente (warning "Large MCP response")
- Costringe l'LLM a workaround per parsare risposte troppo grandi
- Spreca token inutilmente
Soluzione proposta
Non cambia nulla lato API o cache — i dati vengono scaricati e cachati esattamente come ora. Cambia solo cosa mostriamo all'LLM.
Prima (attuale)
get_constraints("101_1015_DF_DCSP_COLTIVAZIONI_1")
→ 14.7k token, 456 righe con tutti i valori:
REF_AREA: IT=Italia, IT108=Monza, IT109=Fermo, ITC=Nord-ovest, ITC1=Piemonte,
ITC11=Torino, ITC12=Vercelli, ... (143 valori)
TYPE_OF_CROP: APPLE=mele, BARLEY=orzo, CHERRY=ciliegie, ... (244 valori)
...
Dopo (proposta)
Step 1 — get_constraints restituisce solo un riepilogo compatto (~200 token):
{
"dimensions": [
{"dimension": "FREQ", "codelist": "CL_FREQ", "value_count": 1},
{"dimension": "REF_AREA", "codelist": "CL_ITTER107", "value_count": 143},
{"dimension": "DATA_TYPE", "codelist": "CL_TIPO_DATO5", "value_count": 8},
{"dimension": "TYPE_OF_CROP", "codelist": "CL_AGRI_MADRE", "value_count": 244},
{"dimension": "DESTINATION_WINEGRAPES", "codelist": "CL_DESTINAZIONEUVA", "value_count": 1},
{"dimension": "TIME_PERIOD", "StartPeriod": "2000", "EndPeriod": "2024"}
]
}
Step 2 — L'LLM cerca solo quello che gli serve con il nuovo tool search_constraint_values:
search_constraint_values(dataflow_id="...", dimension="REF_AREA", search="sicil")
→ ITG1: Sicilia (~1 KB)
search_constraint_values(dataflow_id="...", dimension="TYPE_OF_CROP", search="oliv")
→ OLIVO: oil olives, PRESIL: olive oil (~1 KB)
Step 3 — get_data con i codici trovati (come prima).
Confronto token
| Step |
Prima |
Dopo |
| get_constraints |
~14.700 token |
~200 token |
| Ricerca codici |
(inclusa sopra) |
~500 token (2 search) |
| Totale metadati |
~14.700 token |
~700 token |
Riduzione: ~95% del consumo token per i metadati.
Cosa NON cambia
- La chiamata REST ad
availableconstraint resta identica
- La cache resta identica (tutti i valori vengono salvati)
get_data resta identico
get_structure, get_codelist_description restano identici
@patrunomeister — per questa modifica aspetto il tuo consenso prima di procedere.
Problema
Quando un LLM chiede dati ISTAT, il tool
get_constraintsrestituisce tutti i valori di tutte le dimensioni con descrizioni — per il dataflow coltivazioni sono ~14.7k token e 456 righe.L'LLM ha bisogno solo di trovare 2-3 codici (es. "Sicilia" e "olio di oliva"), ma riceve l'intera lista di 143 territori, 244 colture, ecc. Questo:
Soluzione proposta
Non cambia nulla lato API o cache — i dati vengono scaricati e cachati esattamente come ora. Cambia solo cosa mostriamo all'LLM.
Prima (attuale)
Dopo (proposta)
Step 1 —
get_constraintsrestituisce solo un riepilogo compatto (~200 token):{ "dimensions": [ {"dimension": "FREQ", "codelist": "CL_FREQ", "value_count": 1}, {"dimension": "REF_AREA", "codelist": "CL_ITTER107", "value_count": 143}, {"dimension": "DATA_TYPE", "codelist": "CL_TIPO_DATO5", "value_count": 8}, {"dimension": "TYPE_OF_CROP", "codelist": "CL_AGRI_MADRE", "value_count": 244}, {"dimension": "DESTINATION_WINEGRAPES", "codelist": "CL_DESTINAZIONEUVA", "value_count": 1}, {"dimension": "TIME_PERIOD", "StartPeriod": "2000", "EndPeriod": "2024"} ] }Step 2 — L'LLM cerca solo quello che gli serve con il nuovo tool
search_constraint_values:Step 3 —
get_datacon i codici trovati (come prima).Confronto token
Riduzione: ~95% del consumo token per i metadati.
Cosa NON cambia
availableconstraintresta identicaget_dataresta identicoget_structure,get_codelist_descriptionrestano identici