Phase 05 - Lesson 13

Sistemas de Perguntas e Respostas

This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.

Tres sistemas moldaram o QA moderno. O extrativo encontrava trechos. O aumentado por recuperacao os ancorava em documentos. O generativo produzia respostas. Todo assistente de IA moderno e uma mistura dos tres.

Tipo: Build Linguagens: Python Pre-requisitos: Fase 5 · 11 (Traducao Automatica), Fase 5 · 10 (Mecanismo de Atencao) Tempo: ~75 minutos

O Problema

Um usuario digita "Quando o primeiro iPhone foi lancado?" e espera "29 de junho de 2007." Nao "A historia da Apple e longa e variada." Nao "2007" isolado, sem frase alguma. Uma resposta direta, ancorada e correta.

Tres arquiteturas dominaram o QA na ultima decada.

  • QA extrativo. Dada uma pergunta e uma passagem que sabidamente contem a resposta, encontre os indices de inicio e fim do trecho da resposta na passagem. SQuAD e o benchmark canonico.
  • QA de dominio aberto. A passagem nao e fornecida. Recupere primeiro a passagem relevante, depois extraia ou gere uma resposta. Esta e a base de todo pipeline RAG atual.
  • QA generativo / de livro fechado. Um grande modelo de linguagem responde a partir de sua memoria parametrica. Sem recuperacao. O mais rapido na inferencia, o menos confiavel em fatos.

A tendencia em 2026 e hibrida: recupere as melhores poucas passagens, depois oriente um modelo generativo a responder ancorado nessas passagens. Isso e RAG, e a licao 14 cobre a metade de recuperacao em profundidade. Esta licao constroi a metade de QA.

O Conceito

Arquiteturas de QA: extrativa, aumentada por recuperacao, generativa

Extrativo. Codifique pergunta e passagem juntas com um transformer (familia BERT). Treine duas cabecas que preveem os indices dos tokens de inicio e fim da resposta. A perda e entropia cruzada sobre posicoes validas. A saida e um trecho da passagem. Nunca alucina (por construcao), nunca lida com perguntas que a passagem nao pode responder (por construcao).

Aumentado por recuperacao (RAG). Dois estagios. Primeiro, um recuperador encontra as k melhores passagens de um corpus. Segundo, um leitor (extrativo ou generativo) produz a resposta usando essas passagens. A separacao recuperador-leitor permite treinar e avaliar cada um de forma independente. O RAG moderno frequentemente adiciona um reranqueador entre eles.

Generativo. Um LLM somente-decodificador (GPT, Claude, Llama) responde a partir dos pesos aprendidos. Sem etapa de recuperacao. Excelente em conhecimento comum, catastrofico em fatos raros ou recentes. A taxa de alucinacao e inversamente correlacionada com a frequencia do fato nos dados de pre-treino.

Construa

Passo 1: QA extrativo com um modelo pre-treinado

from transformers import pipeline

qa = pipeline("question-answering", model="deepset/roberta-base-squad2")

passage = (
    "Apple Inc. released the first iPhone on June 29, 2007. "
    "The device was announced by Steve Jobs at Macworld in January 2007."
)
question = "When was the first iPhone released?"

answer = qa(question=question, context=passage)
print(answer)
{'score': 0.98, 'start': 57, 'end': 70, 'answer': 'June 29, 2007'}

deepset/roberta-base-squad2 e treinado no SQuAD 2.0, que inclui perguntas sem resposta. Por padrao, o pipeline question-answering retorna o trecho de maior pontuacao mesmo quando a pontuacao nula do modelo vence — ele nao retorna automaticamente uma resposta vazia. Para obter o comportamento explicito de "sem resposta", passe handle_impossible_answer=True na chamada do pipeline: o pipeline entao retorna uma resposta vazia apenas quando a pontuacao nula excede a de todo trecho. Sempre verifique o campo score de qualquer forma.

Passo 2: um pipeline aumentado por recuperacao (esboco)

from sentence_transformers import SentenceTransformer
import numpy as np

encoder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")

corpus = [
    "Apple Inc. released the first iPhone on June 29, 2007.",
    "Macworld 2007 featured the iPhone announcement by Steve Jobs.",
    "Android launched in 2008 as Google's mobile operating system.",
    "The first iPod was released in 2001.",
]
corpus_embeddings = encoder.encode(corpus, normalize_embeddings=True)


def retrieve(question, top_k=2):
    q_emb = encoder.encode([question], normalize_embeddings=True)
    sims = (corpus_embeddings @ q_emb.T).squeeze()
    order = np.argsort(-sims)[:top_k]
    return [corpus[i] for i in order]


def answer(question):
    passages = retrieve(question, top_k=2)
    combined = " ".join(passages)
    return qa(question=question, context=combined)


print(answer("When was the first iPhone released?"))

Pipeline de dois estagios. O recuperador denso (Sentence-BERT) encontra passagens relevantes por similaridade semantica. O leitor extrativo (RoBERTa-SQuAD) extrai o trecho da resposta das melhores passagens combinadas. Funciona em corpora pequenos. Para um corpus de um milhao de documentos, use FAISS ou um banco de dados vetorial.

Passo 3: generativo com RAG

def rag_generate(question, llm):
    passages = retrieve(question, top_k=3)
    prompt = f"""Context:
{chr(10).join('- ' + p for p in passages)}

Question: {question}

Answer using only the context above. If the context does not contain the answer, say "I don't know."
"""
    return llm(prompt)

O padrao do prompt importa. Instruir explicitamente o modelo a se ancorar no contexto e retornar "I don't know" quando o contexto e insuficiente corta as taxas de alucinacao em 40-60% comparado ao prompt ingenuo. Padroes mais elaborados adicionam citacoes, pontuacoes de confianca e extracao estruturada.

Passo 4: avaliacao que reflete o mundo real

O SQuAD usa Exact Match (EM) e F1 em nivel de token. EM e uma correspondencia estrita apos normalizacao (caixa baixa, remocao de pontuacao, remocao de artigos) — ou a previsao corresponde exatamente ou pontua 0. O F1 e calculado sobre a sobreposicao de tokens entre previsao e referencia e da credito parcial. Ambos subcreditam parafrases: "June 29, 2007" vs "June 29th, 2007" tipicamente recebe 0 de EM (o ordinal quebra a normalizacao) mas ainda obtem F1 substancial pela sobreposicao de tokens.

Para QA em producao:

  • Acuracia da resposta (julgada por LLM ou por humano, ja que metricas nao capturam equivalencia semantica).
  • Acuracia da citacao. A passagem citada realmente sustenta a resposta? Trivial de verificar automaticamente com correspondencia de strings entre as citacoes geradas e as passagens recuperadas.
  • Calibracao de recusa. Quando a resposta nao esta nas passagens recuperadas, o sistema diz corretamente "I don't know"? Meca a taxa de confianca falsa.
  • Recall de recuperacao. Antes de avaliar o leitor, meca se o recuperador coloca a passagem certa entre as k melhores. Um leitor nao pode consertar uma passagem ausente.

RAGAS: o framework de avaliacao de producao de 2026

RAGAS e feito sob medida para sistemas RAG e e o padrao em uso em 2026. Ele pontua quatro dimensoes sem exigir referencias de ouro:

  • Fidelidade. Cada afirmacao na resposta vem do contexto recuperado? Medida por entailment baseado em NLI. Sua metrica primaria de alucinacao.
  • Relevancia da resposta. A resposta aborda a pergunta? Medida gerando perguntas hipoteticas a partir da resposta e comparando com a pergunta real.
  • Precisao do contexto. Dos trechos recuperados, qual fracao era de fato relevante? Baixa precisao = ruido no prompt.
  • Recall do contexto. O conjunto recuperado continha toda a informacao necessaria? Baixo recall = o leitor nao pode ter sucesso.

A pontuacao sem referencia permite avaliar no trafego de producao ao vivo sem respostas de ouro curadas. Adicione o LLM-como-juiz por cima para perguntas abertas onde metricas de correspondencia exata sao inuteis.

pip install ragas. Conecte seu recuperador + leitor. Obtenha quatro escalares por consulta. Alerte em regressoes.

Use

A stack de 2026.

Caso de uso Recomendado
Dada uma passagem, encontrar o trecho da resposta deepset/roberta-base-squad2
Sobre um corpus fixo, livro fechado inaceitavel RAG: recuperador denso + leitor LLM
Em tempo real sobre um repositorio de documentos RAG com recuperador hibrido (BM25 + denso) + reranqueador (licao 14)
QA conversacional (perguntas de acompanhamento) LLM com historico de conversa + RAG a cada turno
Dominios altamente factuais e regulados Extrativo sobre um corpus autoritativo; nunca generativo sozinho

O QA extrativo esta fora de moda em 2026 porque o RAG com LLMs lida com mais casos. Ele ainda e usado em contextos onde citacao literal e exigida: pesquisa juridica, conformidade regulatoria, ferramentas de auditoria.

Entregue

Salve como outputs/skill-qa-architect.md:

---
name: qa-architect
description: Choose QA architecture, retrieval strategy, and evaluation plan.
version: 1.0.0
phase: 5
lesson: 13
tags: [nlp, qa, rag]
---

Given requirements (corpus size, question type, factuality constraint, latency budget), output:

1. Architecture. Extractive, RAG with extractive reader, RAG with generative reader, or closed-book LLM. One-sentence reason.
2. Retriever. None, BM25, dense (name the encoder), or hybrid.
3. Reader. SQuAD-tuned model, LLM by name, or "domain-fine-tuned DistilBERT."
4. Evaluation. EM + F1 for extractive benchmarks; answer accuracy + citation accuracy + refusal calibration for production. Name what you are measuring and how you are measuring it.

Refuse closed-book LLM answers for regulatory or compliance-sensitive questions. Refuse any QA system without a retrieval-recall baseline (you cannot evaluate the reader without knowing the retriever surfaced the right passage). Flag questions that require multi-hop reasoning as needing specialized multi-hop retrievers like HotpotQA-trained systems.

Exercicios

  1. Facil. Configure o pipeline extrativo SQuAD acima sobre 10 passagens da Wikipedia. Elabore 10 perguntas a mao. Meca com que frequencia a resposta esta correta. Voce deve ver 7-9 corretas se as passagens e perguntas estiverem limpas.
  2. Medio. Adicione um classificador de recusa. Quando a pontuacao da melhor recuperacao estiver abaixo de um limiar (digamos 0,3 de cosseno), retorne "I don't know" em vez de chamar o leitor. Ajuste o limiar em um conjunto reservado.
  3. Dificil. Construa um pipeline RAG sobre um corpus de 10.000 documentos de sua escolha. Implemente recuperacao hibrida (BM25 + densa) com fusao RRF (veja a licao 14). Meca a acuracia da resposta com e sem a etapa hibrida. Documente quais tipos de pergunta mais se beneficiam.

Termos-Chave

Termo O que as pessoas dizem O que realmente significa
QA extrativo Encontrar o trecho da resposta Prever os indices de inicio e fim da resposta dentro de uma passagem dada.
QA de dominio aberto QA sobre um corpus Sem passagem dada; deve recuperar e entao responder.
RAG Recuperar e entao gerar Geracao aumentada por recuperacao. Pipeline recuperador + leitor.
SQuAD Benchmark canonico Stanford Question Answering Dataset. Metricas EM + F1.
Alucinacao Resposta inventada Saida do leitor nao sustentada pelo contexto recuperado.
Calibracao de recusa Saber quando ficar calado O sistema diz corretamente "I don't know" quando incapaz de responder.

Leitura Adicional

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).