Extra Inteligencia Artificial • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 03.1 — Construtor de Prompt com Exemplos Few-Shot Formatados

Contexto: Construtor de Prompt com Exemplos Few-Shot Formatados no contexto de Engenharia de Prompts Sistemática e Structured Outputs.

Requisitos de Execução:

  1. Criar classe formatadora de prompts Few-Shot parametrizável.
  2. Injetar pares de exemplos (entrada/saída) antes da query final do usuário.

Resultado Esperado

Prompt Few-Shot montado:
Exemplo 1: 'Ótimo serviço' -> Sentimento: POSITIVO
Entrada: 'Demorou muito' -> Sentimento: NEGATIVO

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_1_SeuNome
  2. Envie na tarefa: Atividade Cap 03 - Engenharia de Prompts Sistemática e Structured Outputs
🔑 Gabarito de Código & Solução Comentada
# prompt_few_shot.py
class FewShotPromptBuilder:
    def __init__(self, instrucao):
        self.instrucao = instrucao
        self.exemplos = []

    def adicionar_exemplo(self, entrada, saida):
        self.exemplos.append((entrada, saida))

    def compilar(self, query):
        prompt = [f"Instrução: {self.instrucao}\n"]
        for idx, (e, s) in enumerate(self.exemplos, 1):
            prompt.append(f"Exemplo {idx}:\nEntrada: {e}\nSaída: {s}\n")
        prompt.append(f"Execute agora:\nEntrada: {query}\nSaída:")
        return "\n".join(prompt)

builder = FewShotPromptBuilder("Classifique o sentimento em POSITIVO ou NEGATIVO")
builder.adicionar_exemplo("Adorei a agilidade!", "POSITIVO")
builder.adicionar_exemplo("O produto veio danificado.", "NEGATIVO")
print(builder.compilar("Atendimento excelente e rápido!"))

🔍 Nível 2: Prática

Problema 03.2 — Parser de Raciocínio Chain-of-Thought (CoT)

Contexto: Parser de Raciocínio Chain-of-Thought (CoT) no contexto de Engenharia de Prompts Sistemática e Structured Outputs.

Requisitos de Execução:

  1. Implementar extrator de blocos <thought> e <answer> a partir de strings geradas por modelos de raciocínio.
  2. Validar que ambas as seções existem e não estão vazias.

Resultado Esperado

Raciocínio Extraído: '1. Somar valores 10+20=30. 2. Aplicar desconto de 10% = 27.'
Resposta Final: 'O total a pagar é R$ 27,00.'

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_2_SeuNome
  2. Envie na tarefa: Atividade Cap 03 - Engenharia de Prompts Sistemática e Structured Outputs
🔑 Gabarito de Código & Solução Comentada
# cot_parser.py
import re

def parse_chain_of_thought(resposta_modelo):
    thought_match = re.search(r"<thought>(.*?)</thought>", resposta_modelo, re.S)
    answer_match = re.search(r"<answer>(.*?)</answer>", resposta_modelo, re.S)
    
    if not thought_match or not answer_match:
        raise ValueError("Resposta incompleta: tags <thought> ou <answer> ausentes.")
        
    raciocinio = thought_match.group(1).strip()
    resposta = answer_match.group(1).strip()
    return {"raciocinio": raciocinio, "resposta": resposta}

output_llm = """
<thought>
Passo 1: Identificar a capital solicitada (França).
Passo 2: Recuperar informação factual (Paris).
</thought>
<answer>
A capital da França é Paris.
</answer>
"""

res = parse_chain_of_thought(output_llm)
print(f"Raciocínio: {res['raciocinio']}")
print(f"Resposta  : {res['resposta']}")

⚡ Nível 3: Integração

Problema 03.3 — Validador e Reparador de JSON Schema Estrito para LLMs

Contexto: Validador e Reparador de JSON Schema Estrito para LLMs no contexto de Engenharia de Prompts Sistemática e Structured Outputs.

Requisitos de Execução:

  1. Implementar validador que confira tipos (int, str, list), campos obrigatórios e regex em saídas JSON de LLM.
  2. Se o JSON tiver aspas quebradas no final, efetuar auto-reparo defensivo.

Resultado Esperado

Validação JSON Schema: Conforme ✅ | Chaves verificadas: ['cliente', 'itens', 'total']

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_3_SeuNome
  2. Envie na tarefa: Atividade Cap 03 - Engenharia de Prompts Sistemática e Structured Outputs
🔑 Gabarito de Código & Solução Comentada
# json_schema_guard.py
import json

def validar_schema_pedido(json_str):
    try:
        dados = json.loads(json_str)
    except json.JSONDecodeError:
        if not json_str.endswith("}"): json_str += "}"
        dados = json.loads(json_str)
        
    campos_esperados = {"cliente": str, "itens": list, "total": (int, float)}
    for campo, tipo in campos_esperados.items():
        if campo not in dados:
            raise KeyError(f"Campo obrigatório ausente: {campo}")
        if not isinstance(dados[campo], tipo):
            raise TypeError(f"Campo {campo} com tipo inválido")
    return dados

payload_bruto = '{"cliente": "Carlos", "itens": ["Notebook"], "total": 4500.0}'
pedido = validar_schema_pedido(payload_bruto)
print("Payload Validado:", pedido)

🏆 Nível 4: Desafio Corporativo

Problema 03.4 — Avaliador Sistemático de Alucinações via Consistência Cruzada

Contexto: Avaliador Sistemático de Alucinações via Consistência Cruzada no contexto de Engenharia de Prompts Sistemática e Structured Outputs.

Requisitos de Execução:

  1. Simular a amostragem de 3 respostas com temperatura > 0 para uma mesma pergunta.
  2. Calcular a concordância majoritária e pontuar a certeza da resposta.

Resultado Esperado

Respostas coletadas: ['Brasília', 'Brasília', 'Brasília']
Concordância: 100.0% -> Certeza ALTA (Baixo risco de alucinação)

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_03_4_SeuNome
  2. Envie na tarefa: Atividade Cap 03 - Engenharia de Prompts Sistemática e Structured Outputs
🔑 Gabarito de Código & Solução Comentada
# hallucination_checker.py
from collections import Counter

def avaliar_consistencia(respostas_candidatas):
    contagem = Counter(respostas_candidatas)
    resposta_mais_frequente, freq = contagem.most_common(1)[0]
    total = len(respostas_candidatas)
    concordancia = (freq / total) * 100
    
    status = "ALTA CERTEZA" if concordancia >= 80 else "MODERADA" if concordancia >= 50 else "ALUCINAÇÃO PROVÁVEL"
    return {
        "resposta_escolhida": resposta_mais_frequente,
        "concordancia_pct": concordancia,
        "classificacao": status
    }

amostras = ["Brasília", "Brasília", "Brasília", "São Paulo"]
print(avaliar_consistencia(amostras))

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos