Torna ai lavori
  • AI agentica
  • Progetto personale: full stack e AI
  • Ago - Set 2025

Fantasy Football AI Auction Manager

Trasforma una frase d'asta, detta a voce o scritta, in un aggiornamento validato delle rose, condiviso in tempo reale con tutti i partecipanti.

Fantasy Football AI Auction Manager

Il problema

Durante un'asta di fantacalcio (da 6 a 12 squadre, budget configurabile) qualcuno deve annotare a mano chi compra quale giocatore e a quanto, e tenere aggiornati budget e slot per ruolo. Volevo dire o scrivere una frase come "Dzeko squadraX 150" e ottenere un aggiornamento strutturato delle rose, visibile in tempo reale agli altri partecipanti. È un progetto personale.

Cosa ho realizzato

  • Un backend FastAPI: creazione delle sessioni, aggiornamenti da testo o audio, rose, giocatori disponibili, rimozione di un giocatore con rimborso, export CSV e un WebSocket per il broadcast. Le sessioni sono salvate su Redis.

  • Un frontend Next.js: un pannello di controllo per l'operatore (input testuale, microfono, selettore del ruolo, card delle squadre con budget e slot) e una pagina ospite in sola lettura, condivisa tramite link, che riceve le rose via WebSocket.

Come funziona l'agente

Si tratta di una pipeline LLM a singolo passaggio, non di un agente con un ciclo di tool. L'audio viene registrato nel browser, convertito in WAV e inviato a Google Speech-to-Text con phrase hints composti dai nomi di giocatori e squadre, che orientano il riconoscimento verso il vocabolario dell'asta. Una chain LangChain con GPT-4o-mini a temperatura 0 estrae poi giocatore, squadra e prezzo come output strutturato. Il prompt riceve solo i giocatori ancora disponibili per il ruolo corrente e l'elenco delle squadre, così il modello riconduce anche una trascrizione imprecisa al nome corretto.

Guardrail: il giocatore e la squadra restituiti devono corrispondere esattamente alle liste fornite, altrimenti è un errore. Poi codice deterministico verifica che il giocatore non sia già assegnato, che il budget sia sufficiente, che il ruolo abbia uno slot libero e che la squadra esista. Il modello non scrive mai direttamente sullo stato. L'operatore sceglie il ruolo corrente, vede l'esito e può rimuovere un acquisto con rimborso.

Scelte interessanti

  • Le regole di dominio sono validate nel codice, non dal modello.

  • Dopo ogni modifica il backend fa broadcast alla sessione; un broadcast fallito non blocca l'aggiornamento, e un nuovo socket riceve subito la rosa corrente.

  • Export CSV compatibile con LegheFantacalcio.

Cosa farei diversamente oggi

Il grounding qui viene spesso chiamato RAG, ma in realtà è contesto iniettato nel prompt: liste di giocatori lette da CSV e Redis, filtrate per ruolo e stato dell'asta. Non ci sono né vector store né embeddings.

Non ci sono nemmeno evals, tool calling o memoria conversazionale. Non ho misurato l'accuratezza del riconoscimento né la latenza, quindi non posso supportare con numeri la qualità della pipeline.

Ti serve qualcosa di simile?

Raccontami il tuo progetto: di solito rispondo entro un giorno lavorativo.

Contattami
Progetto successivoFinance Assistant