Ir para o conteúdo
Bruno Lucildo
Voltar para projetos
Projeto acadêmicoEm desenvolvimento

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.