🧩 Exercícios: Engenharia de Prompts Sistemática e Structured Outputs
Extra Inteligencia Artificial • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 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:
- Criar classe formatadora de prompts Few-Shot parametrizável.
- 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)
- Salve o arquivo como:
Atividade_03_1_SeuNome - 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:
- Implementar extrator de blocos
<thought>e<answer>a partir de strings geradas por modelos de raciocínio. - 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)
- Salve o arquivo como:
Atividade_03_2_SeuNome - 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:
- Implementar validador que confira tipos (
int,str,list), campos obrigatórios e regex em saídas JSON de LLM. - 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)
- Salve o arquivo como:
Atividade_03_3_SeuNome - 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:
- Simular a amostragem de 3 respostas com temperatura > 0 para uma mesma pergunta.
- 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)
- Salve o arquivo como:
Atividade_03_4_SeuNome - 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 |