Dove interviene l'AI
AppaltIntel usa AI generativa (Claude di Anthropic) in sette punti precisi del prodotto. Questa pagina elenca ognuno: cosa fa, su quali dati lavora, quali sono i vincoli linguistici imposti nel prompt, quale modello viene chiamato, quanto costa, come funziona la cache, per chi è disponibile. Niente "scatola nera": ogni feature AI è documentata qui in modo trasparente.
Principio guida
Tutto il testo AI generato è opt-in via click (mai auto-load) e rigorosamente descrittivo. I prompt vietano esplicitamente:
- Valutazioni qualitative su imprese o stazioni appaltanti ("aggressivo", "competitivo", "leader", "dominante", "rischio").
- Raccomandazioni di partecipazione ("consigliato", "vale la pena", "imperdibile", "ottima opportunità").
- Previsioni di vittoria ("vincerai", "alta probabilità", "buona chance").
- Linguaggio statistico-tecnico nei testi user-facing ("mediana", "percentile", "campione", "distribuzione").
Quando vedi una sintesi AI sull'interfaccia, è descrizione di fatti presenti nei dati o nel documento — non valutazione, non previsione, non consiglio. La decisione operativa (partecipare a una gara, fidarsi di un fornitore, ecc.) resta sempre del tuo ufficio gare.
Privacy: dove vanno i dati
Ogni chiamata AI invia i dati strutturati o il testo del documento ad Anthropic (Stati Uniti), sub-processor dichiarato nella privacy con Standard Contractual Clauses UE. Anthropic ha politiche di non-training sui dati API enterprise. Niente PDF binari viene archiviato sui nostri server: il riassunto testuale prodotto sì (solo per cache), il file originale no.
I sei punti di intervento
1. Assistente AI conversazionale
Dove: pagina /assistente. Chat in italiano, due intent gestiti contestualmente:
- search_open_tenders: traduce richieste in filtri strutturati (CPV, regione, importo, scadenza) e mostra i bandi attivi corrispondenti.
- market_analytics: risponde a domande sul mercato storico (top fornitori/buyer su CPV+regione, andamento annuale, distribuzione procedure).
Input: messaggio utente + cronologia conversazione
(cap 10 turni). Output: filtri/query strutturati
via Pydantic + breve messaggio testuale. Modello:
claude-sonnet-4-6. Costo: ~$0.005-0.01
per turno. Cache: prompt cache ephemeral sul system
frozen.
2. Briefing AI sui profili (fornitore, SA, bando aperto)
Dove: bottone "Genera analisi AI" sulle pagine
di profilo fornitore /fornitore/{slug}-{id}, stazione
appaltante /stazione-appaltante/{slug}-{id} e dettaglio
bando aperto.
Produce 2-3 paragrafi narrativi descrittivi: volume, controparti
ricorrenti, regioni, ribassi tipici (solo se sample ≥ 20).
Input: dati strutturati aggregati dalle view DuckDB
(top buyer, top CPV, distribuzione regioni, ribassi p25-p50-p75).
Modello: claude-sonnet-4-6.
Costo: ~$0.005-0.01.
Cache: tabella Postgres ai_briefings
con TTL 30 giorni; flag "riutilizzato" visibile quando il briefing
arriva dalla cache.
3. Riassunto AI dei documenti di gara (PDF)
Dove: bottone "Riassumi con AI" accanto a ogni PDF
nella sezione "Documenti di gara" del dettaglio bando regionale; +
pagina /strumenti/riassumi-bando
per upload PDF custom.
Estrae oggetto, punti chiave, requisiti partecipazione/tecnici,
criteri aggiudicazione, importi, scadenze, note di attenzione.
Input: testo estratto dal PDF con pypdf (cap 60.000
caratteri). Output: schema Pydantic
DocumentSummary. Modello:
claude-sonnet-4-6. Costo: ~$0.12-0.25 al
primo riassunto (PDF lungo).
Cache: cross-utente per i regionali su chiave
(ocid, document_id, content_sha256) — il SHA-256 è
quello già calcolato dai crawler upstream;
per-utente per gli upload custom su (user_id, sha256).
Privacy upload: il PDF NON viene archiviato; vive
solo in RAM per il tempo del processing.
4. Match-fit bando vs profilo fornitore
Dove: bottone "Valuta il fit con la mia impresa"
nel dettaglio di un bando aperto.
Confronta il bando (CPV, regione, importo, scadenza) col profilo
storico delle aggiudicazioni del fornitore loggato e produce
un'etichetta descrittiva (sovrapposizione alta / media /
esplorativa) + narrazione + fattori pro/contro.
Etichetta NEUTRA, NON probabilità di vittoria — vedi
principio guida sopra.
Input: profilo aggregato del supplier (top CPV/regioni,
fascia importo, distribuzione ribassi) + dati del bando + contesto di
mercato sul CPV. Gate: tenant con P.IVA verificata
(vat_verified_at NOT NULL).
Modello: claude-sonnet-4-6 (impostazione
attuale; Haiku in roadmap per ridurre costo). Costo:
~$0.005. Cache: per-supplier in
match_fit_evaluations, TTL 7 giorni.
5. Intro narrativo nel digest watchlist settimanale
Dove: l'email digest del lunedì mattina (CLI
appaltintel-watchlist-digest, cron 08:00 CEST), in TESTA
al body. NIENTE nuova email: l'intro è inline nella
mail che già parte. Sintetizza in 3-4 frasi cosa è successo nella
settimana (totale match, bando di maggior valore, controparti
ricorrenti). Gate: tenant Pro Studio o
superiore con almeno 5 nuovi match in settimana. Free continua
a ricevere la lista pulita.
Modello: claude-sonnet-4-6.
Costo: ~$0.01-0.02/tenant/settimana.
Resilienza: se Claude fallisce, il digest spedisce
comunque la lista esistente.
6. Allargamento semantico keyword watchlist
Dove: bottone "Suggerisci sinonimi" nel form keyword
della watchlist (/account/watchlists/{id}). Date le
keyword libere dell'utente + contesto CPV/regione, l'AI propone
5-8 varianti tipiche dei bandi italiani PA (es. "manutenzione strade"
→ "ripristino sede stradale", "rifacimento manto", "asfaltatura").
L'utente spunta quelle che vuole tenere; vanno in
watchlists.ai_expanded_keywords e amplificano il
matching testuale del crawler.
Modello: claude-sonnet-4-6.
Costo: ~$0.005-0.01 per chiamata.
Cache: nessuna (one-shot user-curato).
7. Inferenza filtri watchlist dalla frase di creazione
Dove: form "Crea una nuova watchlist" in
/account/watchlists. Il campo unico
in cui scrivi il titolo della watchlist (es. "formazione
specialistica sotto i 70.000 € in Lombardia") viene riusato come
prompt: l'AI estrae i filtri strutturati (macro categoria CPV, regione,
importi minimi/massimi) e fino a 5 parole chiave testuali, e pre-popola
il form della pagina successiva. Tutti i campi proposti restano
modificabili: la frase è interpretata in modo conservativo (un campo
resta vuoto se non è chiaramente desumibile) e l'utente può aggiustare
o svuotare ciò che non lo convince prima di salvare.
Gate: utente con email verificata e quota AI residua;
in mancanza di una delle due condizioni la watchlist viene creata
senza prefill, come prima.
Modello: claude-sonnet-4-6.
Costo: ~$0.002 per creazione (max 1 chiamata per
watchlist nella vita del piano).
Cache: nessuna (la frase è unica e una watchlist si
crea raramente).
Resilienza: in caso di errore Anthropic, quota
esaurita o output vuoto, la watchlist viene comunque creata e l'utente
atterra sul form vuoto, identico al flusso pre-AI.
Quota AI giornaliera
Tutte le funzioni AI attivate da un'azione esplicita dell'utente
(Assistente, Briefing, Riassumi PDF, Match-fit, Suggerisci sinonimi,
Inferenza filtri watchlist) consumano dalla stessa quota giornaliera
unificata ai_messages_per_day:
- Free: 5 messaggi al giorno cumulativi.
- Pro Studio e superiori: illimitato (con cap soft anti-abuse non attivo nel MVP).
L'intro AI nel digest (#5) e il riassunto upload custom NON sono rate-limited dalla quota giornaliera dell'utente perché sono trigger diversi (cron settimanale, upload manuale con limite dimensione e cache per-utente).
Disattivare l'AI
Le funzioni AI si attivano solo su click esplicito (e il digest AI solo via cron settimanale). Se preferisci usare AppaltIntel senza alcuna chiamata AI:
- Ignora i bottoni "Genera analisi AI", "Riassumi con AI", "Valuta il fit", "Suggerisci sinonimi" — nessuna telemetria passa ad Anthropic se non clicchi.
- Per il digest narrativo del lunedì: contattaci a info@appaltintel.it e ti escludiamo dal flow narrativo — riceverai la lista pulita come i piani Free.
Vincoli linguistici controllati nel prompt
Tutti i prompt sono frozen (cache breakpoint Anthropic per efficienza) e contengono una sezione "vincoli assoluti" che vieta le parole listate nel Principio guida di apertura. Il modello è istruito a rifiutare la generazione se la richiesta utente forza a violare quei vincoli (es. domanda diretta del tipo "vincerai questo bando?" → risposta che riformula in termini di sovrapposizione storica, non probabilità).
Se trovi un output AI che viola questi vincoli, segnalacelo a info@appaltintel.it con un copia-incolla del testo problematico: lo trattiamo come bug del prompt da rafforzare, non come "comportamento normale del modello".
Questa pagina ti è stata utile? Sezione assente o poco chiara? Scrivici a info@appaltintel.it.