idea_world_labDEV JOURNAL
domingo, 21 de junho de 2026

Esquema e Arquitetura do Classificador RAG da Documentação Oficial do Godot

Data de criação: 21 de junho de 2026

Propósito

Organizar a arquitetura de referência para conectar a coleta completa da documentação oficial do Godot ao fluxo JSONL -> PostgreSQL -> Retriever -> Validator -> Qwen 3.6. Este documento não é um guia de implementação para gerar dados de treinamento, mas sim um critério de design que define como estruturar a documentação Markdown já reunida em outputs/godot_docs_full/pages e transformá‑la em um banco de dados de evidências pesquisável.

Arquitetura inicial do classificador RAG do Godot

Dados de entrada atuais

Os resultados da coleta da documentação oficial estão localizados em outputs/godot_docs_full no repositório.

Caminho Função
outputs/godot_docs_full/pages/ Markdown original da documentação oficial do Godot, por página
outputs/godot_docs_full/manifest.json URL original, caminho local do arquivo, status da coleta, tamanho em bytes
outputs/godot_docs_full/summary.json Resumo da contagem total coletada e validações
outputs/godot_docs_full/urls.txt Lista de URLs efetivamente coletadas
outputs/godot_docs_full/searchindex_urls.txt Lista de URLs alvo restauradas a partir do índice de busca do Sphinx
outputs/godot_docs_full/failed.json Lista de falhas na coleta
outputs/godot_docs_full/missing_from_searchindex.txt Lista de itens ausentes segundo o índice de busca

Linha de base atual:

Item Valor
Páginas alvo do índice de busca 1568
Páginas coletadas 1570
Arquivos de página 1570
Falhas de obtenção 0
Ausentes no índice de busca 0

Pipeline completa

  1. O crawler coleta a documentação oficial do Godot da internet.
  2. Os resultados são armazenados como Markdown por página.
  3. O Markdown é normalizado e enriquecido com metadados, sendo convertido em registros JSONL.
  4. Os JSONL são inseridos no PostgreSQL.
  5. O PostgreSQL armazena separadamente chunks de documentos, mapeamento de API e protótipos de rótulos.
  6. Quando o usuário solicita análise do código‑fonte do Godot, o AST Parser estrutura o código do projeto.
  7. O Retriever busca evidências no PostgreSQL com base na pergunta do usuário e nos resultados da análise AST.
  8. O Validator agrupa a pergunta, o resultado AST e as evidências encontradas e os envia ao Qwen 3.6.
  9. O Qwen 3.6 não atua como julgador final; ele elabora a resposta usando as evidências validadas.
  10. O Validator verifica a evidência, o formato e padrões proibidos da resposta antes de devolvê‑la ao usuário.

Conversão de Markdown para JSONL

pages/*.md são as páginas originais legíveis por humanos, mas são unidades muito grandes para RAG. Portanto, o script de conversão divide as páginas em seções/membros de API/exemplos, preservando a URL original e o tipo de documento.

Regras comuns de normalização

Etapa Processamento
Carregar arquivo Lê o Markdown com base nos campos file, url, status, bytes do manifest.json.
Limpar corpo Remove cabeçalhos repetidos, textos da UI do Sphinx, caracteres de âncora corrompidos e espaços excessivos.
Classificar tipo de documento Usa URL e caminho para dividir em class_reference, tutorial, migration, engine_details, about ou other.
Separar seções Cria candidatos a chunks com base na hierarquia de títulos e nos padrões de referência de classes do Godot.
Preservar blocos de código Exemplos em GDScript, C#, shader e CLI são mantidos em code_blocks ao invés de serem removidos do corpo.
Atribuir provenance Cada registro recebe URL original, caminho do arquivo, hash original e versão do script de conversão.

Saídas JSONL

Arquivo Propósito Tabela de destino
work/godot_rag/jsonl/docs_chunks.jsonl Chunks para busca em descrições, tutoriais e referências da documentação oficial docs_chunks
work/godot_rag/jsonl/api_mapping.jsonl Regras de mudança, renomeação, descontinuação e substituição da API Godot 3 → 4 api_mapping
work/godot_rag/jsonl/label_prototypes.jsonl Protótipos de exemplos para classificação, transformação, rejeição e correção label_prototypes
work/godot_rag/jsonl/ingest_report.jsonl Avisos, skips e logs de controle de qualidade durante a conversão Verificação antes da inserção no DB

Esquema de docs_chunks.jsonl

{
  "chunk_id": "godot-stable:classes/class_node.html#description:0001",
  "doc_version": "stable",
  "source_url": "https://docs.godotengine.org/en/stable/classes/class_node.html",
  "source_file": "outputs/godot_docs_full/pages/classes__class_node__....md",
  "source_sha256": "...",
  "doc_type": "class_reference",
  "symbol": "Node",
  "section_path": ["Node", "Description"],
  "heading": "Description",
  "content": "Nodes are Godot's building blocks...",
  "code_blocks": [],
  "language_tags": ["gdscript"],
  "godot_version_tags": ["4.x", "stable"],
  "api_symbols": ["Node", "_ready", "_process", "queue_free"],
  "token_count": 420,
  "metadata": {
    "status": "copied_old",
    "bytes": 12345
  }
}

Obrigatório campos:

Campo Descrição
chunk_id ID determinístico que não muda mesmo após reexecução
doc_version Versão da documentação, como stable, 4.6 etc.
source_url URL original da documentação oficial
source_file Caminho do Markdown no repositório
source_sha256 Hash SHA‑256 do Markdown original
doc_type Tipo de documento
symbol Símbolo representativo quando for documentação de classe/API
section_path Hierarquia de títulos
content Texto principal usado para busca e incorporação
code_blocks Array de blocos de código extraídos do texto
api_symbols Símbolos da API Godot detectados no texto

Esquema api_mapping.jsonl

{
  "mapping_id": "godot3-to-4:kinematicbody2d-to-characterbody2d",
  "source_api": "KinematicBody2D",
  "target_api": "CharacterBody2D",
  "change_type": "rename_or_replacement",
  "godot_from": "3.x",
  "godot_to": "4.x",
  "confidence": "verified_from_docs",
  "evidence_chunk_ids": [
    "godot-stable:tutorials/migrating/upgrading_to_godot_4.html#..."
  ],
  "match_terms": ["KinematicBody2D", "CharacterBody2D"],
  "notes": "Godot 4 character movement node replacement candidate.",
  "negative_patterns": ["do not suggest KinematicBody2D for Godot 4 projects"]
}

Princípios:

Item Critério
confidence Se houver base em documentação oficial, use verified_from_docs; candidatos a regras ficam como candidate.
Extração automática É possível gerar candidatos a partir da documentação de migração e da referência de classes.
Critério de aprovação Regras usadas para treinamento/rotulagem são promovidas ao estado approved somente se revisadas por uma pessoa.
índice exato source_api, target_api e match_terms são alvos de busca exata.

Esquema label_prototypes.jsonl

{
  "prototype_id": "label:godot3-api-in-godot4:kinematicbody2d",
  "label": "godot3_api_in_godot4",
  "task_type": "version_classification",
  "input_pattern": "extends KinematicBody2D",
  "expected_finding": "Godot 3 style physics body API detected.",
  "recommended_action": "Use CharacterBody2D or CharacterBody3D depending on project dimension.",
  "evidence_mapping_ids": [
    "godot3-to-4:kinematicbody2d-to-characterbody2d"
  ],
  "evidence_chunk_ids": [],
  "severity": "high",
  "validator_rules": {
    "requires_ast_symbol": "KinematicBody2D",
    "forbidden_answer_terms": ["KinematicBody2D is recommended in Godot 4"]
  }
}

Candidatos de rótulo:

Rótulo Significado
godot4_valid_api Uso de API válida segundo o padrão Godot 4
godot3_api_in_godot4 API do Godot 3 misturada em projeto Godot 4
deprecated_or_removed_api Uso de API removida ou obsoleta
migration_required Necessária migração de Godot 3 → 4
ambiguous_version_signal Falta de evidência ou conflito para determinar a versão
non_godot_noise Dados não relacionados ao Godot (Python/Web/Unity etc.)
unsafe_or_obfuscated_code Código ofuscado, caracteres de controle, suspeita de malware

Rascunho de esquema PostgreSQL

O PostgreSQL assume, por padrão, o uso de pgvector. A busca por palavras‑chave utiliza tsvector ou índice trigram.

docs_chunks

Coluna Tipo Descrição
id bigserial primary key ID interno
chunk_id text unique not null ID determinístico do JSONL
doc_version text not null Versão do documento
source_url text not null URL da documentação oficial
source_file text not null Caminho do arquivo Markdown
source_sha256 text not null Hash original
doc_type text not null Tipo de documento
symbol text Símbolo representativo da API/classe
section_path jsonb not null Hierarquia de títulos
heading text Título atual do chunk
content text not null Texto pesquisável
code_blocks jsonb not null default '[]' Blocos de código
api_symbols text[] not null default '{}' Símbolos extraídos
metadata jsonb not null default '{}' Metadados adicionais
embedding vector Embedding
search_tsv tsvector Busca por palavras‑chave
created_at timestamptz default now() Timestamp de inserção

Índices:

Índice Propósito
unique(chunk_id) Evitar inserções duplicadas
ivfflat/hnsw(embedding) Busca semântica
gin(search_tsv) Busca por palavras‑chave
gin(api_symbols) Filtro por símbolos de API
btree(doc_type, symbol) Filtro por classe/API

api_mapping

Coluna Tipo Descrição
id bigserial primary key ID interno
mapping_id text unique not null ID determinístico
source_api text not null API original/problemática
target_api text API recomendada
change_type text not null rename, removed, behavior_change etc.
godot_from text Versão de origem
godot_to text Versão alvo
confidence text not null Nível de evidência
status text not null default 'candidate' candidate, approved, rejected
evidence_chunk_ids text[] not null default '{}' Chunks de documentação oficial como evidência
match_terms text[] not null default '{}' Palavras‑chave de busca
notes text Observações
negative_patterns jsonb not null default '[]' Padrões proibidos

Índices:

Índice Propósito
unique(mapping_id) Evitar duplicação
btree(source_api) Busca exata
btree(target_api) Busca reversa
gin(match_terms) Busca por palavras‑chave
btree(status, confidence) Filtro de regras de aprovação

label_prototypes

Coluna Tipo Descrição
id bigserial primary key ID interno
prototype_id text unique not null ID determinístico
label text not null Rótulo de classificação
task_type text not null classification, migration_fix, patch_generation etc.
input_pattern text not null Padrão de detecção
expected_finding text not null Resultado esperado
recommended_action text Ação recomendada
evidence_mapping_ids text[] not null default '{}' Evidências de mapeamento de API
evidence_chunk_ids text[] not null default '{}' Evidências de chunks de documentação
severity text not null low, medium, high
validator_rules jsonb not null default '{}' Regras de validação
embedding vector Busca por casos semelhantes
search_tsv tsvector Busca por palavras‑chave

Índices:

Índice Propósito
unique(prototype_id) Evitar duplicação
btree(label, task_type) Consulta por rótulo
ivfflat/hnsw(embedding) Busca por rótulos semelhantes
gin(search_tsv) Busca por palavras‑chave

Entrada/Saída do AST Parser

O AST Parser converte o código‑fonte do usuário em uma estrutura pesquisável antes de enviá‑lo ao LLM. O alvo inicial são arquivos .gd, .tscn e project.godot.

Entrada

Entrada Descrição
Pergunta do usuário Ex.: “Verifique se este projeto está seguro para Godot 4”
Arquivo de código‑fonte .gd, .tscn, .tres, project.godot
Estrutura do projeto Caminhos de arquivos, conexões de cenas, caminhos de recursos

Saída do esquema

{
  "project_id": "local-analysis-...",
  "godot_project": {
    "config_version": 5,
    "features": ["4.4", "Forward Plus"]
  },
  "files": [
    {
      "path": "scripts/player.gd",
      "language": "gdscript",
      "extends": "CharacterBody2D",
      "class_name": "Player",
      "symbols": ["CharacterBody2D", "Input", "move_and_slide"],
      "annotations": ["@onready"],
      "version_signals": ["godot4_annotation_syntax"],
      "diagnostics": []
    }
  ],
  "version_evidence": {
    "godot4": ["config_version=5", "@onready"],
    "godot3": []
  }
}

Inicial Campos de Extração:

Campo Propósito
extends Determinação da versão do Node/API
class_name Mapeamento de símbolos internos do projeto
annotations Sinais do Godot 4 como @onready, @export etc.
legacy_keywords Sinais do Godot 3 como onready var, export var, KinematicBody etc.
method_calls Busca de documentação e consulta de mapeamento de API
scene_dependencies Verificação de conexão de cena/script
resource_paths Verificação de recursos ausentes e conexão de assets

Funcionamento do Retriever

O Retriever é a camada que seleciona evidências antes do LLM.

  1. Extrai a intenção e a tarefa alvo a partir da pergunta do usuário.
  2. Obtém símbolos de API, sinais de versão e caminhos de arquivos a partir do resultado do AST Parser.
  3. Executa primeiro uma busca exata em api_mapping.
  4. Realiza simultaneamente filtragem de símbolos de API + busca por palavras‑chave + busca vetorial em docs_chunks.
  5. Obtém rótulos semelhantes e regras de validação de label_prototypes.
  6. Ordena os resultados da busca como pacotes de evidência.

Pacote de evidência:

{
  "query_id": "analysis-...",
  "task_type": "version_classification",
  "ast_summary": {},
  "doc_evidence": [],
  "api_mapping_evidence": [],
  "label_evidence": [],
  "retrieval_scores": {
    "exact_api_hits": 2,
    "keyword_hits": 8,
    "vector_hits": 12
  }
}

Separação de papéis entre Validator e Qwen 3.6

Qwen 3.6 é o modelo que lê as evidências encontradas e organiza a resposta. A rotulagem final, a adoção de evidências e a validação de padrões proibidos são responsabilidade do Validator.

Componente Responsabilidade
Retriever Busca de documentos oficiais/API/mapeamento/etiquetas relevantes
Validator Verifica ausência de evidências, padrões proibidos, formato JSON de saída
Qwen 3.6 Organiza a explicação legível ao usuário, direções de correção, sugestões de código

Itens que o Validator deve conferir:

Item Critério
Existência do ID da evidência O ID do documento/mapeamento/etiqueta usado na resposta deve estar presente nos resultados da busca.
Baseado no Godot 4 Não deve recomendar a API do Godot 3 em projetos Godot 4.
Indicação de incerteza Se houver evidência insuficiente, não se deve fazer afirmação definitiva; use ambiguous_version_signal.
Verificação de sugestões de código O código sugerido não deve conflitar com a dimensão 2D/3D detectada no projeto.
Formato JSON A saída da pipeline interna deve ser JSON analisável.

Ordem de injeção

  1. Verifique outputs/godot_docs_full/summary.json e failed.json.
  2. Carregue manifest.json e pages/*.md.
  3. Gere o relatório de normalização de Markdown.
  4. Crie docs_chunks.jsonl.
  5. Na documentação migration/class, gere candidatos para api_mapping.jsonl.
  6. Crie label_prototypes.jsonl a partir de regras aprovadas e casos representativos.
  7. Apenas registros que passam na validação de esquema JSONL são upsertados no PostgreSQL.
  8. Gere embeddings e atualize o índice vetorial.
  9. Atualize o índice de palavras‑chave e o índice exato.
  10. Valide os resultados do Retriever com perguntas de amostra.

Checklist de verificação de qualidade

Etapa Critério de aprovação
Verificação de coleta failed_count = 0, missing_from_searchindex = 0
Normalização de Markdown Nenhum chunk vazio, URL original preservada
Validação de JSONL Cada linha pode ser parseada como JSON, campos obrigatórios presentes
Verificação de duplicidade Sem duplicatas de chunk_id, mapping_id, prototype_id
Verificação de evidência api_mapping.evidence_chunk_ids deve existir em docs_chunks
Verificação de busca Perguntas de API representativas retornam hits exatos e de documentos simultaneamente
Verificação de resposta Respostas do Qwen não contêm afirmações sem evidência nem recomendam a API do Godot 3

Prioridades de implementação

  1. Elaborar relatório de análise da estrutura de pages/*.md
  2. Escrever script de conversão para docs_chunks.jsonl
  3. Criar script de validação de esquema JSONL
  4. Redigir DDL do PostgreSQL
  5. Injetar docs_chunks e validar busca
  6. Gerar candidatos de api_mapping e definir fluxo de aprovação manual
  7. Criar conjunto inicial de etiquetas em label_prototypes
  8. Extrair campos mínimos com o AST Parser
  9. Emitir bundle de evidências do Retriever
  10. Conectar loop de organização de respostas Validator + Qwen 3.6

Princípios fundamentais

  • O Markdown original da documentação oficial não deve ser alterado, apenas preservado.
  • JSONL é tratado como artefato intermediário reproduzível.
  • O banco de dados deve registrar caminho original, URL original, hash e versão do script de conversão.
  • Impedir que o LLM invente etiquetas.
  • Decisões Godot 3/4 são baseadas em sinal AST, mapeamento de API e evidências da documentação oficial.
  • Candidatos incertos não são usados diretamente como dados de treinamento; permanecem no estado candidate.
  • Qwen 3.6 atua como organizador de respostas; os critérios de decisão são definidos pelo Retriever e Validator.

Próximas tarefas

A próxima etapa é analisar amostras da estrutura de Markdown em outputs/godot_docs_full/pages. Como as referências de classe, migração e tutoriais possuem estruturas diferentes, é necessário definir estratégias de chunking específicas por tipo de documento, em vez de aplicar uma única regra universal.