Arquitetura de Implantação
O GamiBot usa plugins Moodle para integrar as disciplinas e serviços separados para processar ficheiros, pesquisar vetores e gerar respostas. Os componentes podem ser instalados em servidores diferentes; a topologia e os recursos necessários dependem da instalação dos serviços.
| Componente | Responsabilidade |
|---|---|
Moodle com local_gamibot_manager e block_gamibot | Interface de chat, ativação por disciplina, credenciais e fila global persistente de ingestão |
| Serviço recetor de ingestão | Recebe notificações de alterações a ficheiros e obtém os ficheiros elegíveis no Moodle |
| Docling | Processa os ficheiros obtidos pelo serviço de ingestão |
| Ollama com o modelo de embeddings nomic-text | Produz embeddings dos materiais indexados da disciplina |
| Qdrant | Guarda e pesquisa o índice de materiais da disciplina |
| Langflow | Executa os fluxos Clarify, Summarize e Quiz |
| vLLM com Qwen3.5 | Serve o modelo de linguagem usado pelos fluxos alojados |
| Gami API | Trata funções separadas de gamificação |
Percurso dos ficheiros da disciplina
Uma disciplina Moodle com o seu próprio bloco GamiBot coloca em fila as alterações elegíveis às atividades Ficheiro e Pasta. O cron do Moodle envia notificações JSON em lotes limitados ao endpoint de ingestão configurado. O recetor obtém o conteúdo através de um URL de ficheiro dos serviços web do Moodle, processa-o com Docling, obtém embeddings nomic-text através de Ollama e atualiza Qdrant. Uma notificação de eliminação pede ao recetor que remova o conteúdo indexado de um módulo.
A fila limita o início dos pedidos entre todas as disciplinas e processos de cron. Os valores predefinidos são cinco passos de envio por execução e pelo menos cinco segundos entre inícios de pedidos. Uma resposta HTTP 2xx confirma a receção pelo serviço, não a conclusão do processamento ou indexação. Consulte Ingestão de dados para regras de visibilidade, tentativas e comandos de estado.
Percurso do chat
O bloco Chat chama um serviço AJAX Moodle do plugin Manager. O Manager escolhe a finalidade Langflow Clarify, Summarize ou Quiz e envia o pedido com a chave Langflow partilhada. Os fluxos alojados usam Qwen3.5 através de vLLM; podem usar o contexto da disciplina indexado em Qdrant conforme a sua configuração. Os endpoints e IDs de campos pertencem à versão do plugin, enquanto a chave da API é definida pelo administrador do site.
O segredo do webhook de ingestão e o segredo da Gami API são separados da chave Langflow. Proteja cada ligação e use HTTPS com verificação de certificados em produção. Consulte Configuração do Moodle e segurança e privacidade.
Decisões de implantação
Dimensione e distribua os serviços Moodle, Docling, Ollama, Qdrant, Langflow e vLLM de acordo com a carga medida. A variante do modelo, formatos de documentos suportados, dimensões dos embeddings, imagens de execução, portas e variáveis de ambiente são específicos dos serviços instalados. Confirme-os na configuração da instalação antes de aplicar exemplos de infraestrutura ou estimativas de capacidade.
Monitorize tanto a fila do Moodle como o trabalho pendente no recetor. Uma fila Moodle vazia mostra que as notificações foram recebidas com sucesso, mas o índice remoto ainda pode estar a processá-las.