File size: 8,677 Bytes
cf52a55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# 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**.