Doninha / ROADMAP_LLM_COMPLETO.md
0danielfonseca's picture
Upload 42 files
cf52a55 verified

Roadmap do modelo de LLM completo

Status: As sete pendências abaixo foram implementadas (config, KB, L5, unificação com agente, avaliação, chat, API).


O que falta para um modelo de LLM completo (itens implementados)

Este documento lista o que já existe no projeto e o que ainda falta programar para se ter um modelo de LLM completo (inferência + geração de texto + RAG + avaliação + entrega).


O que já existe

Componente Arquivo(s) Estado
Pipeline epistemológico L1→L4 pipeline.py, l1_concept_table.py, l2_kantian_judgments.py, syllogism_module.py, l3_paraconsistent.py, l4_synthesis.py ✅ Completo (raciocínio simbólico)
Regras paraconsistentes (Fuzzy.txt) paraconsistent_rules.py, train_truth_model.py ✅ L3 treinável por regras
Base teórica L4 (Russell) l4_russell_equivalence.py, train_l4_russell.py ✅ Síntese por equivalência
Modelo de verdade neural (μ, λ) neural_truth_model.py ✅ Opcional na L3
LM customizado (TransformerEncoder) custom_lm_model.py, custom_tokenizer.py, pretrain_custom_lm.py ✅ Existe mas não está ligado ao pipeline
Agente de pesquisa (Groq + Chroma + DuckDuckGo) agente_busca_web.py ✅ Funcional, separado do pipeline L1–L4
Banco de conhecimento SEED_KNOWLEDGE_BASE em pipeline.py ⚠️ Estático, dicionário fixo
Geração de “resposta” na L4 l4_synthesis._generate_response ⚠️ Só monta texto a partir da melhor hipótese (template), não gera texto livre

O que falta programar

1. Geração de texto integrada ao pipeline (resposta livre)

Problema: Hoje a L4 devolve um texto do tipo:
"Com alta confiança (v=0.85): [melhor proposição] [KB: ...]" — é um template, não geração token a token.

O que falta:

  • Opção A (rápida): Usar um LLM externo (Groq/OpenAI) na etapa 8:
    • Montar um prompt estruturado com: conceitos (L1), juízos filtrados (L2/SYL), valores μ/λ e estado (L3), síntese (L4) e a pergunta do usuário.
    • Chamar o LLM com esse prompt e usar a saída como resposta final do pipeline.
  • Opção B (end-to-end): Integrar o EpistemicLanguageModel (ou um decoder pequeno) como gerador:
    • O contexto L1–L4 vira “condição” (ex.: embedding ou texto serializado).
    • O decoder gera a resposta autoregressivamente (generate_text já existe em custom_lm_model.py).
    • Exige definir formato de contexto (ex.: texto plano com juízos + valores) e treino/ajuste para esse cenário.

Arquivos a criar/alterar:
Novo módulo, ex.: l5_generation.py (ou extensão em l4_synthesis.py) que recebe SynthesisResult + prompt e chama LLM ou generate_text; pipeline.py passa a usar essa camada na etapa 8.


2. Unificar pipeline L1–L4 com o agente de pesquisa

Problema: O pipeline híbrido e o agente_busca_web.py são independentes. O pipeline não usa RAG nem busca web.

O que falta:

  • Caminho 1: O pipeline usar o agente como “fonte de fatos”:
    • Antes ou durante L3/L4, chamar o agente (busca local Chroma + DuckDuckGo) com a pergunta ou com as proposições filtradas.
    • Inserir os trechos recuperados no KB ou num contexto extra para a síntese/geração.
  • Caminho 2: O agente usar o pipeline como “motor de raciocínio”:
    • Após a busca, passar os documentos + pergunta pelo pipeline L1–L4 e usar a SynthesisResult para montar o prompt final do LLM do agente.

Arquivos a criar/alterar:
Um orquestrador (ex.: pipeline_rag.py ou opções em pipeline.py) que instancia tanto HybridLLMPipeline quanto o agente e define quando chamar cada um e como combinar saídas.


3. Base de conhecimento escalável (KB + RAG)

Problema: O KB é um dicionário fixo em código (SEED_KNOWLEDGE_BASE). Não há carregamento a partir de dados nem RAG dentro do pipeline.

O que falta:

  • Carregar o KB a partir de arquivo(s) (JSON/CSV) ou de um banco.
  • Opcional: popular uma base vetorial (ex.: Chroma em meu_vector_db) com os mesmos conceitos/evidências e, no pipeline, usar retrieval (como no agente) para enriquecer L3/L4 com trechos relevantes à pergunta.
  • Manter a interface atual (termo → grau de evidência) para não quebrar L3/L4.

Arquivos a criar/alterar:
Módulo knowledge_base.py (ou estender pipeline.py) para: carregar KB de disco; opcionalmente conectar a Chroma e expor uma função que, dada a pergunta, retorna um dicionário termo→peso ou trechos para contexto.


4. Avaliação e métricas

Problema: Não há como medir qualidade das respostas nem comparar versões do modelo.

O que falta:

  • Dataset de avaliação: pares (pergunta, resposta_referência) ou (pergunta, valor_verdade_esperado).
  • Script de avaliação que:
    • Roda o pipeline (e, se existir, o gerador) em cada pergunta.
    • Calcula métricas, por exemplo:
      • Coerência com L3 (ex.: valor de verdade médio, ausência de trivialização).
      • Se houver referência: similaridade semântica (embedding), BLEU/ROUGE, ou métricas de QA.
  • Opcional: relatório (JSON/Markdown) com médias e exemplos.

Arquivos a criar:
eval_pipeline.py, pasta data/eval/ com conjuntos de teste e, se quiser, metrics.py com funções de métrica reutilizáveis.


5. API ou serviço para uso em produção

Problema: Só existe REPL (python pipeline.py --repl). Não há endpoint HTTP nem CLI estável para integração.

O que falta:

  • API REST (recomendado): FastAPI (ou Flask) expondo, por exemplo:
    • POST /process — recebe {"prompt": "..."} e devolve a resposta do pipeline (e, no futuro, do gerador).
    • Opcional: POST /agent — repassa para o agente de pesquisa.
  • CLI: python -m pipeline --prompt "..." (ou similar) que imprime só a resposta final, para uso em scripts.
  • Configuração por variáveis de ambiente ou arquivo (YAML/JSON) para modelo, paths do KB, Chroma, etc.

Arquivos a criar:
api.py (FastAPI) e/ou entrypoint em pipeline.py com argparse; opcional config.yaml.


6. Histórico de diálogo (chat multi-turno)

Problema: O pipeline processa um único prompt. Não há memória de conversa.

O que falta:

  • Manter uma lista de (role, content) para o usuário e o assistente.
  • Para cada nova mensagem: montar contexto (ex.: últimas N trocas ou resumo) e passar ao pipeline (e ao gerador, quando existir).
  • Definir se L1–L4 usam só a última pergunta ou o contexto resumido (para não estourar tamanho e custo).

Arquivos a criar/alterar:
Classe ou módulo chat_session.py (ou dentro do pipeline) que mantém histórico e chama process/gerador com contexto; REPL e API passam a usar essa sessão.


7. Persistência e configuração

Problema: Caminhos e opções estão espalhados (hardcoded ou env). Não há um “estado” do sistema salvo de forma única.

O que falta:

  • Arquivo de configuração (YAML/JSON) para:
    • Caminho do KB, Chroma, modelo L3 (truth_scoring_model.pt), base Russell (l4_russell_concepts.json).
    • Flags: usar agente ou não, usar gerador externo ou LM interno, etc.
  • Carregar essa config no arranque do pipeline e da API.
  • Documentar onde ficam os artefatos treinados (L3, L4, LM customizado) e como recarregá-los.

Arquivos a criar/alterar:
config.yaml (ou .json) e função load_config() usada em pipeline.py e api.py.


Priorização sugerida

Ordem Item Impacto Esforço
1 Geração de texto integrada (LLM externo no pipeline) Alto — resposta natural em vez de template Médio
2 Base de conhecimento escalável (carregar KB + opcional RAG) Alto — dados reais Médio
3 Unificar pipeline com agente (RAG no fluxo L1–L4) Alto — um único sistema Alto
4 API REST (FastAPI) Médio — uso em produção Baixo
5 Avaliação (dataset + script + métricas) Médio — evolução guiada Médio
6 Histórico de diálogo Médio — experiência de chat Médio
7 Configuração centralizada e persistência Baixo — organização Baixo

Resumo em uma frase

Hoje você tem um motor de raciocínio epistemológico (L1–L4) e um agente de pesquisa separado; para um modelo de LLM completo falta: integrar um gerador de texto (LLM externo ou LM interno) ao pipeline, conectar o pipeline ao agente e ao KB/RAG, avaliar respostas e expor tudo via API e configuração clara.