Assistente clienti: la FAQ giusta (QA4FAQ, query reali)
28 domande · scoring mcq · contaminazione public
Cosa misura
Il task di produzione di un assistente clienti: data la richiesta di un cliente e una rosa di FAQ candidate, indicare quella che risponde — o riconoscere che nessuna risponde e passare a un operatore. Le query sono messaggi reali di clienti dell'Acquedotto Pugliese (refusi, dialetto e giri di parole inclusi), dal dataset QA4FAQ di EVALITA 2016: ~1100 query con la FAQ corretta verificata a mano dagli esperti del supporto AQP. Nessuna traduzione: italiano nativo, anzi vernacolare.
Formato: 28 item, ognuno con 3 FAQ candidate (domanda + risposta ufficiale) più l'opzione fissa «nessuna di queste → operatore», corretta nei 5 item-trappola. I distrattori sono hard negative: le FAQ non pertinenti con il massimo overlap lessicale con la query (bollette con bollette, contatori con contatori).
Com'è andata
Primo giro, 9 modelli cloud ×2 ripetizioni. In testa tre modelli al 100%: gpt-5.4, GLM-5.2 e Kimi K2.5 — e i due open ci arrivano spendendo centesimi. Ma questa classifica si legge dal basso: la domanda dell'eval non è «chi è il più bravo», è «qual è il modello più piccolo ed economico che basta per fare l'assistente clienti?». Risposta di questo giro: gpt-5.4-mini al 96.5% (~$0.015/run), Haiku 4.5 al 92.9%, DeepSeek Flash al 91.1%. In coda gpt-5.4-nano (87.5%): su query vere significa sbagliare ~1 cliente su 8.
La sorpresa è Qwen3-235B, ultimo (83.9%). Su AIME e tool use compete con i frontier; qui, davanti all'italiano colloquiale e sgrammaticato dei clienti veri («crdo di non aver ricevuto una fattura come faccio ha sapere se eventualmente è stata smarriota»), cede. La competenza linguistica dell'italiano reale non si compra con i parametri, e non premia gli stessi modelli della matematica.
Sapersi fermare. Nei 5 item-trappola la FAQ giusta non c'è e la risposta corretta è «inoltra a un operatore». I grandi non ci cascano (gpt-5.4, GLM, Kimi, Sonnet: 10/10); Haiku e nano si fermano 8 volte su 10 — i piccoli tendono a rispondere comunque, anche quando non dovrebbero. È la stessa moderazione misurata dai task condizionali agentic.
Il locale (secondo giro). Gemma-12B Q4 sul Jetson, thinking budget 768 enforced lato server: 96.4% (27/28) e trappole 5/5 — alla pari di gpt-5.4-mini, sopra Haiku, e con la disciplina delle astensioni dei frontier. Un 12B quantizzato batte sul vernacolare pugliese un 235B cloud (Qwen3, 83.9%): conferma che qui contano lingua e giudizio, non i parametri. Il prezzo è la latenza: ~61 s/domanda contro gli 0.6–25 s dei cloud — da coda notturna o smistamento asincrono, non da chat dal vivo. L'unico errore (q023, allacciamento) è genuino: anche col ragionamento, sceglie la FAQ sbagliata. Nota di metodo imparata a spese di questo run: per llama-server il budget per-richiesta è un no-op, va passato con --reasoning-budget all'avvio — il primo tentativo (thinking libero) è finito con un item in loop da 2048 token senza risposta.
Curatela: da 30 a 28 item
I giudizi di rilevanza QA4FAQ, pur verificati, hanno rumore documentato (query identiche con gold diverse, gold meno pertinente di un distrattore). La selezione è stata rivista a mano prima del run (esclusi i casi ambigui) e dopo il primo giro: 2 item sono risultati iniqui alla prova dei fatti e sono stati esclusi con re-grading dai raw — in uno il distrattore conteneva anch'esso la risposta (due opzioni corrette), nell'altro 16 run su 18 sceglievano legittimamente «operatore» contro una gold solo indirettamente pertinente. I dettagli, id per id, sono nei commenti di scripts/build_faq_it.py.
Note di metodo
- Risposta = singola lettera, niente ragionamento richiesto. È un task da produzione: contano precisione, latenza e costo per contatto. I tempi in classifica (0.6–25s/domanda) sono parte del risultato.
- Posizione della gold mescolata su A/B/C in modo deterministico (hash dell'id query); l'opzione «operatore» è sempre D, come in un menu reale.
- Trappole = astensione. Un assistente che «risponde sempre» su una FAQ sbagliata è peggio di uno che passa la mano: l'opzione D misura proprio questo.
- Contaminazione:
public. Il dataset è del 2016 e circola; ma le query sono testo rumoroso poco memorizzabile, e il compito è matching, non recall. - gpt-oss-120b assente: l'endpoint
:freedi OpenRouter ha risposto 429 (rate-limit) su entrambi i tentativi; si aggiungerà in un giro futuro.