Football Stat Analytics
Análise de desempenho de atletas de futebol com IA, interação conversacional e recuperação de informações.
Tecnologias
- TypeScript
- Node.js
- OpenAI API
- SQLite
- RAG
Visão geral
O Football Stat Analytics é uma aplicação de linha de comando que analisa o desempenho de atletas de futebol com IA. Ela indexa relatórios de observação, responde perguntas fundamentadas nesses relatórios e oferece um chat interativo com personas de analista. É um projeto acadêmico.
Desafio
Modelos de linguagem produzem com facilidade afirmações que parecem corretas, mas não têm suporte: números inventados, ações que os dados nunca citaram e adjetivos elogiosos. Na análise esportiva isso é pior do que não responder. O desafio foi manter cada resposta ligada à evidência fornecida pelo usuário ou aos relatórios indexados.
Solução
As respostas passam por camadas de verificação. Regras determinísticas impõem o formato de saída e rejeitam números e termos sem suporte. Um verificador semântico, um segundo modelo que precisa citar a evidência, avalia cada afirmação. Uma resposta reprovada recebe uma tentativa automática de correção, e as respostas baseadas em relatórios terminam com um relatório de fundamentação que mostra o que pôde ser rastreado até os trechos recuperados.
Arquitetura
A aplicação é escrita em TypeScript sobre Node.js, com remoção nativa de tipos e o módulo SQLite embutido. A ingestão extrai o texto de relatórios em PDF, traduz, divide em trechos, gera embeddings com a API da OpenAI e grava tudo no SQLite. A recuperação ordena os trechos por uma pontuação híbrida, que combina similaridade de embeddings e coincidência de palavras-chave, e envia os cinco melhores ao prompt da resposta. O chat guarda o histórico da sessão no SQLite e resume as mensagens mais antigas quando o contexto cresce. O código separa o comportamento de IA (personas, políticas, validação e verificação) do armazenamento e da recuperação, e 109 testes automatizados o cobrem com chamadas de modelo simuladas, então rodam sem chave de API.
Decisões técnicas
Regras no código, não só nos prompts.
Instruções de prompt sozinhas não garantem que o modelo siga uma política, então as regras mais importantes são verificadas pelo código.
Um juiz em quem não se confia às cegas.
O verificador precisa citar a evidência, e uma citação que não está na evidência é rejeitada. Se o próprio verificador falhar, o chat continua funcionando e mostra um aviso.
Consenso opcional, desligado por padrão.
Responder com a mediana de três amostras custa três vezes a geração e não tornou as notas estáveis de forma confiável, então está disponível, mas desativado.
Armazenamento local simples.
O histórico de conversas e os embeddings ficam em arquivos SQLite, o que torna o projeto fácil de executar e inspecionar.
Estado atual
Em desenvolvimento. O projeto se descreve como experimental: as respostas não são conferidas com estatísticas oficiais, a ingestão de PDF não faz OCR, e as verificações são salvaguardas que não substituem a revisão humana. Uma limitação conhecida é a recuperação: o índice não tem metadados de atleta para filtrar, então uma pergunta sobre um atleta pode recuperar trechos sobre outros.