Este documento serve como guia de boas práticas, padrões de desenvolvimento, estratégia de versionamento e execução de testes para o projeto BrasilnaCopaAI.
Grande parte das aplicações atuais de IA utiliza Retrieval-Augmented Generation (RAG) para complementar modelos de linguagem com conhecimento específico de um determinado domínio.
O BrasilnaCopaAI foi escolhido como tema por possuir um escopo bem definido, permitindo concentrar o desenvolvimento na arquitetura da solução em vez da complexidade do domínio. Dessa forma, o projeto serve como laboratório para estudar e aplicar conceitos modernos de IA, mantendo um problema suficientemente pequeno para ser desenvolvido individualmente.
Este projeto busca consolidar conhecimentos práticos em:
- Linguagem: Python (3.12+)
- APIs REST: FastAPI (Uvicorn, Pydantic)
- Interface Visual: Streamlit
- Orquestração de IA: LangChain
- Modelos Generativos: Google Gemini API
- Banco de Dados Vetorial: ChromaDB
- Engenharia de RAG: Embeddings, Busca Vetorial e Estratégias de Chunking
- Arquitetura de Software: Separação clara de responsabilidades (Backend vs. Frontend) e organização profissional
- Versionamento: Git e GitHub
O projeto utilizará um fluxo simplificado de branches para manter o código organizado e estável.
main: Contém apenas versões estáveis de produção. Nada é desenvolvido diretamente nesta branch.develop: Branch principal de integração. É a partir dela que as branches de feature surgem e para onde elas retornam após validação.feature/*: Utilizada para desenvolvimento de novas funcionalidades. Exemplos:feature/fastapifeature/chromadbfeature/ragfeature/streamlitfeature/gemini
Adotamos a especificação de Conventional Commits para manter o histórico de alterações limpo e legível. Os commits devem seguir a seguinte estrutura:
<tipo>: <descrição curta em português>
feat: Introdução de uma nova funcionalidade (ex:feat: adiciona integração com Gemini).fix: Correção de algum bug ou problema (ex:fix: corrige recuperação vetorial).docs: Alterações na documentação (ex:docs: atualiza guia de desenvolvimento).refactor: Modificações no código que não alteram o comportamento final (ex:refactor: reorganiza pipeline RAG).style: Mudanças de estilo que não afetam a lógica (ex:style: melhora formatação do código).test: Criação ou alteração de testes (ex:test: adiciona testes da API).chore: Tarefas de manutenção do repositório ou dependências (ex:chore: atualiza requirements.txt).
Durante o desenvolvimento do BrasilnaCopaAI, as seguintes regras de design e implementação devem ser seguidas:
- Separação de Responsabilidades: A interface (Streamlit) não deve conter nenhuma regra de negócio ou lógica RAG. Ela atua apenas como camada de visualização e faz requisições HTTP para a API.
- Código Modular: Cada componente (ingestão, vetorização, RAG, rotas) deve residir em seu respectivo módulo.
- Type Hints: Utilizar anotações de tipo em todas as assinaturas de funções e métodos.
- Pydantic: Validar entradas (request) e saídas (response) na API FastAPI utilizando modelos Pydantic.
- Tratamento de Exceções: Todo serviço externo (chamadas HTTP, Wikipedia, Gemini, ChromaDB) deve possuir tratamento de erro robusto.
- Segurança: Nunca salvar chaves de API (
.env) no repositório. Utilizar variáveis de ambiente.
Os testes são centralizados na pasta tests/ e utilizam o framework pytest.
pytest- API: Garantir que as rotas HTTP (como
/healthe/chat) respondam nos formatos corretos com validações do Pydantic. - Pipeline RAG: Validar se a busca vetorial retorna chunks adequados e se as fontes recuperadas estão corretas.
- Integração com Gemini: Testar a autenticação na API do Google Gemini e o retorno de respostas.
- Interface: Testar a estabilidade do fluxo de chat no Streamlit.