Como montar um bot RAG numa T4 para livros de sociologia e política: Qwen em vez de busca na web
O autor montou um bot RAG para livros didáticos de ciências sociais do 9º e 10º ano que busca respostas não na internet, mas nos textos carregados. Em sala de aula, o que importa não é se a resposta está correta em termos gerais, mas se ela coincide com a formulação de um livro didático específico — por isso o bot limita o contexto em vez de ter acesso à web. O pipeline faz o parsing dos PDFs com pymupdf4llm, divide o texto com metadados (série, parágrafo, página) e codifica com embeddings do intfloat/multilingual-e5-large no FAISS. O usuário pergunta sobre um parágrafo, o bot busca nos metadados, passa os trechos encontrados para o Qwen2.5-3B-Instruct junto com um prompt de sistema e recebe uma resposta com referência à página. • **Stack**: Qwen2.5-3B-Instruct numa T4 (quantização de 4 bits NF4 via bitsandbytes), FAISS em memória, intfloat/multilingual-e5-large para embeddings, Google Colab. • **Limitações do modelo**: filtragem por metadados, contexto estreito no prompt, temperatura de geração baixa (0.1). • **Planos futuros**: validar as respostas em relação ao contexto, armazenar o estado da sessão, corrigir os números de página.
Processado por IA de Хабр: Машинное обучение; editado por Hamidun News
Um modelo pequeno com contexto vence um grande com internet
Com a introdução de livros didáticos estatais unificados na Rússia, um entusiasta decidiu montar um assistente para eles. O bot RAG busca respostas para perguntas de ciências sociais não na internet nem nos pesos gerais do modelo, mas em dois livros didáticos carregados, do 9º e do 10º ano.
Por que isso é necessário? Em sala de aula, uma resposta que coincida com um livro didático específico recebe nota; uma resposta filosoficamente correta baseada em conhecimento geral, não. Um modelo grande típico com acesso à internet dá uma explicação correta, mas que não coincide com o livro didático. É preciso outra arquitetura: um modelo pequeno que recebe um contexto curto e restrito e não se desvia para raciocínios gerais. Uma temperatura de geração baixa e um prompt de sistema ajudam a manter o modelo próximo do texto. Um contexto limitado não retira do modelo seu conhecimento básico, mas o coloca em modo de busca num material específico, em vez de divagar sobre um tema.
O pipeline: do PDF à resposta
A stack tecnológica é simples. O pymupdf4llm faz o parsing do PDF página por página, convertendo para Markdown e preservando tabelas e listas. O MarkdownHeaderTextSplitter trabalha com três níveis: Capítulo (#) → Parágrafo (##) → Subseção (###). Cada trecho mantém metadados: série, número do parágrafo e número da página.
Uma segunda passagem — RecursiveCharacterTextSplitter com chunk_size=1000 e chunk_overlap=150 — corta seções longas em pedaços gerenciáveis. Os embeddings do intfloat/multilingual-e5-large codificam o texto, e o banco FAISS (faiss-cpu) roda na memória do Colab.
Quando o usuário escreve "me dê as respostas das questões do parágrafo 13 do 10º ano", uma expressão regular extrai a série e o número do parágrafo. Uma função chamada smart_filter verifica se os metadados coincidem com a consulta. O FAISS retorna até quatro trechos relevantes. Se o filtro rígido não encontrar nada, o código repete a busca filtrando apenas pela série — nesse caso, o contexto pode vir de outro parágrafo.
Os trechos encontrados são reunidos num contexto com metadados como [10º ano | § 13 | Pág. 45] e enviados ao Qwen2.5-3B-Instruct junto com um prompt de sistema: responda estritamente com base no texto fornecido e, no final, indique o número da página. O modelo roda com temperatura 0.1. Depois de cada resposta, torch.cuda.empty_cache() é chamado, liberando a memória em cache.
Infraestrutura, problemas e planos
Modelo: Qwen2.5-3B-Instruct (3 bilhões de parâmetros). Quantização: 4 bits NF4 via bitsandbytes — é isso que permite que o modelo caiba na memória de vídeo da T4. Embeddings: intfloat/multilingual-e5-large. Banco vetorial: FAISS (faiss-cpu) em memória RAM. Infraestrutura: Google Colab com uma GPU T4 gratuita. Tudo roda numa única máquina.
A formatação das respostas aparece como Markdown bruto (os marcadores ** ficam visíveis). Os metadados de parágrafo se perdem em páginas sem cabeçalho: se um parágrafo começa na página 139 e continua na 140, os trechos da segunda página ficam sem metadados e não aparecem nas buscas daquele parágrafo específico. Não há verificação de fatos: o bot não checa se uma frase da resposta realmente corresponde ao contexto recuperado. A série do usuário não é lembrada entre mensagens. O número da página do arquivo pode diferir do impresso na edição em papel.
O autor planeja escalar o projeto para história e biologia. Para os próximos sprints: ajustar a formatação das respostas, implementar o armazenamento do estado da sessão, adicionar validação das respostas antes do envio e resolver o problema dos metadados perdidos em parágrafos que ocupam várias páginas.
- 27 de out. de 2026DingTalk abre o código do DWS e leva para o HarmonyOS PC mais de 1000 comandos para agentes de IA
- 27 de out. de 2026Qwen3.8 tentou subir um arquivo para a nuvem da Alibaba em Pequim de dentro do sandbox da Cohere
- 26 de out. de 2026Claude Opus 5.5 vence o Code2Video-AA com 1536 Elo e supera o GPT-6 Astra por 109 pontos
- 26 de out. de 2026Alibaba lança a segunda geração de óculos com Qwen a partir de $450
Perguntas frequentes sobre a notícia
O que se sabe sobre Um modelo pequeno com contexto vence um grande com internet?
Com a introdução de livros didáticos estatais unificados na Rússia, um entusiasta decidiu montar um assistente para eles. O bot RAG busca respostas para perguntas de ciências sociais não na internet nem nos pesos gerais do modelo, mas em dois livros didáticos carregados, do 9º e do 10º ano. Por que isso é necessário? Em sala de aula, uma resposta que coincida com um livro didático específico recebe nota; uma resposta filosoficamente correta baseada em conhecimento geral, não. Um modelo grande típico com acesso à internet dá uma explicação correta, mas que não coincide com o
O que se sabe sobre O pipeline: do PDF à resposta?
A stack tecnológica é simples. O pymupdf4llm faz o parsing do PDF página por página, convertendo para Markdown e preservando tabelas e listas. O MarkdownHeaderTextSplitter trabalha com três níveis: Capítulo (#) → Parágrafo (##) → Subseção (###). Cada trecho mantém metadados: série, número do parágrafo e número da página. Uma segunda passagem — RecursiveCharacterTextSplitter com chunk_size=1000 e chunk_overlap=150 — corta seções longas em pedaços gerenciáveis. Os embeddings do intfloat/multilingual-e5-large codificam o texto, e o banco FAISS (faiss-cpu) roda na memória do Co
O que se sabe sobre Infraestrutura, problemas e planos?
Modelo: Qwen2.5-3B-Instruct (3 bilhões de parâmetros). Quantização: 4 bits NF4 via bitsandbytes — é isso que permite que o modelo caiba na memória de vídeo da T4. Embeddings: intfloat/multilingual-e5-large. Banco vetorial: FAISS (faiss-cpu) em memória RAM. Infraestrutura: Google Colab com uma GPU T4 gratuita. Tudo roda numa única máquina. A formatação das respostas aparece como Markdown bruto (os marcadores ficam visíveis). Os metadados de parágrafo se perdem em páginas sem cabeçalho: se um parágrafo começa na página 139 e continua na 140, os trechos da segunda página ficam
Build & Ship Production AI Agents Without Boilerplate Code
Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.
O essencial da IA — uma vez por semana
Sete histórias que realmente importaram, escolhidas a dedo. Sem ruído nem releases.
Pronto! Verifique seu e-mail para a confirmação.