Este documento descreve a arquitetura interna, os contratos e a estrutura de pastas do Módulo 3 (Knowledge), responsável por fornecer contexto científico recuperado para o Módulo 2 (Reasoning) do Chart Analysis Framework.
O Módulo de Conhecimento atua como o motor de Retrieval-Augmented Generation (RAG) do framework. Seu objetivo é indexar artigos científicos (textos, tabelas e contextos teóricos) e fornecer trechos relevantes e metadados que auxiliem o LLM (Módulo 2) a interpretar com maior precisão os dados numéricos extraídos dos gráficos pelo Módulo 1.
Para garantir escalabilidade e permitir a experimentação acadêmica com diferentes técnicas de RAG (do Ingênuo ao Avançado), o módulo foi desenhado utilizando princípios de Orientação a Objetos e Clean Architecture (Arquitetura Limpa). A dependência de bibliotecas externas, como o LangChain e bancos de dados vetoriais, é estritamente isolada da regra de negócio central.
Abaixo, a estrutura da subpasta knowledge_module/ dentro do monorepo.
knowledge_module/
├── config/
│ ├── config.py # Carregador das configurações
│ └── models.yaml # Configurações globais
├── data/
│ ├── raw_articles/ # Arquivos físicos brutos (PDFs, JSONs, LaTeX) - Ignorado no Git
│ └── vector_db/ # Persistência do banco vetorial local (ex: ChromaDB) - Ignorado no Git
├── src/
│ ├── core/ # CONTRATOS: Regras de negócio sem dependências externas
│ │ ├── interfaces.py # Classes abstratas (BaseQueryProcessor, BaseRetriever, BasePostProcessor)
│ │ └── entities.py # Modelos de dados puros (ex: classe Document)
│ ├── infrastructure/ # IMPLEMENTAÇÃO: Adaptadores para LangChain, bancos vetoriais, etc.
│ │ ├── langchain_impl/ # Wrappers para loaders, splitters e embeddings do LangChain
│ │ └── vector_store/ # Gerenciamento de conexão com o banco (ex: ChromaManager)
│ └── domain/ # ORQUESTRAÇÃO: Lógica do pipeline RAG
│ ├── ingestion_engine.py # Orquestra o fluxo de ETL (Leitura -> Chunking -> Embedding -> DB)
│ └── rag_engine.py # Orquestra a busca em tempo real (Query -> Retriever -> Reranker)
├── run.py # Ponto de entrada (orquestração e comunicação com o Orchestrator)
├── .gitignore
├── requirements.txt # Dependências isoladas do módulo (langchain, chromadb, etc.)
└── README.md # Este documento
| Componente | Função |
|---|---|
| config/ | Centraliza variáveis de ambiente, caminhos de diretórios (usando pathlib) e hiperparâmetros de chunking e busca. |
| data/ | Armazena tanto o acervo de literatura científica original (raw_articles/) quanto os dados processados e indexados (vector_db/). |
| src/core/ | Define as interfaces (ABC) do sistema. Garante que qualquer modelo ou banco de dados obedeça a um contrato padrão, permitindo testes ágeis sem quebrar o módulo. |
| src/infrastructure/ | Contém o código que efetivamente interage com bibliotecas de terceiros (LangChain). Se uma tecnologia mudar, apenas esta pasta sofre manutenção. |
| src/domain/ | Contém a máquina lógica (RAGEngine). Recebe as implementações da infraestrutura via Injeção de Dependência e executa o pipeline do RAG. |
| run.py | Atua como a Fachada (Facade) do módulo. É o arquivo que o orchestrator/ do monorepo irá importar para consumir o serviço de busca. |
O processamento é dividido em dois ciclos independentes:
Ciclo de Ingestão (Offline):
- O
ingestion_enginelê os arquivos da pastadata/raw_articles/. - Utiliza os loaders e splitters da infraestrutura para quebrar o texto.
- Salva os embeddings no banco vetorial (
data/vector_db/).
Ciclo de Recuperação (Tempo Real):
- O
run.pyrecebe a query (pergunta do usuário e/ou dados do gráfico). - O
RAGEngineprocessa/expande a query. - O Retriever busca no banco de dados e retorna uma lista de
Documents brutos. - O PostProcessor filtra/reordena os documentos (Reranking).
- O
run.pydevolve os documentos formatados para o Orchestrator encaminhar ao Módulo 2.