0Pricing
AI Prompt Engineering · Aula

Abordagem sistemática de depuração

Faça uma busca binária nas seções do prompt: remova metade, teste e restrinja a causa do problema.

Abordagem sistemática de depuração é uma aula grátis de AI Prompt Engineering no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Prompt Engineering, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Prompt Engineering inclui 4 aulas no total.

A mentalidade de depuração

A depuração de instruções é semelhante à depuração de software: não altere várias coisas de uma vez, não faça suposições aleatórias e não implante uma correção que não consiga explicar. Uma abordagem sistemática usa a lógica da busca binária — reduzindo o espaço do problema pela metade a cada teste — para encontrar eficientemente o caso mínimo que falha.

Etapa 1: reproduzir a falha

Antes de depurar, reproduza a falha de modo confiável. Não é possível depurar sistematicamente uma falha que não pode ser reproduzida de forma consistente.

Execute a instrução 5 vezes com a mesma entrada. Se ela falhar todas as vezes: falha determinística — fácil de depurar. Se falhar algumas vezes: falha probabilística — defina temperature=0 primeiro para eliminar a aleatoriedade e faça o teste novamente.

import openai
client = openai.OpenAI(api_key='sk-...')

def run_prompt(prompt, user_input, temperature=0):
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': prompt},
            {'role': 'user', 'content': user_input}
        ],
        temperature=temperature
    )
    return resp.choices[0].message.content

# Reproduce with temperature=0 to eliminate randomness
for i in range(5):
    output = run_prompt(failing_prompt, test_input, temperature=0)
    print(f'Run {i+1}:', output[:100])

Etapa 2: criar uma instrução mínima reproduzível

Uma instrução mínima reproduzível (MRP) é a instrução mais curta que ainda provoca a falha. Remover partes irrelevantes isola a seção problemática e torna a falha incontestável.

Comece com a instrução completa e remova metade do conteúdo. Faça o teste. Se ainda falhar: a seção problemática está na metade que foi mantida. Repita. Essa é uma busca binária na instrução.

def binary_search_prompt(prompt_lines, user_input, fail_fn):
    '''Binary search: find the minimal set of lines that causes the failure.'''
    if len(prompt_lines) == 1:
        return prompt_lines  # Minimal failing unit found

    mid = len(prompt_lines) // 2
    first_half = prompt_lines[:mid]
    second_half = prompt_lines[mid:]

    # Test first half
    if fail_fn('\n'.join(first_half), user_input):
        return binary_search_prompt(first_half, user_input, fail_fn)
    # Test second half
    elif fail_fn('\n'.join(second_half), user_input):
        return binary_search_prompt(second_half, user_input, fail_fn)
    else:
        # Both halves pass — interaction effect between halves
        return prompt_lines

O teste de remoção

Uma forma mais simples de busca binária: remova sistematicamente seções individuais e verifique se a remoção corrige o problema. Isso funciona quando a instrução tem seções claramente delimitadas (instruções do sistema, contexto, exemplos, especificação de formato).

sections = {
    'role_instruction': 'You are a precise JSON API. Respond only with valid JSON.',
    'context': 'The user is asking about our product catalog.',
    'format_spec': 'Return a JSON object with keys: name, price, available.',
    'examples': 'Example: {"name": "Widget", "price": 9.99, "available": true}',
    'safety': 'Do not reveal internal pricing strategy.'
}

def test_without(section_to_remove, user_input):
    reduced = {k: v for k, v in sections.items() if k != section_to_remove}
    prompt = '\n'.join(reduced.values())
    output = run_prompt(prompt, user_input)
    print(f'Without {section_to_remove}: {evaluate(output)}')

for section in sections:
    test_without(section, 'What is the price of a Widget?')

Teste A/B de seções da instrução

O teste A/B para instruções consiste em criar duas versões de uma única seção e comparar as saídas delas com as mesmas entradas. Diferentemente dos testes de remoção, os testes A/B avaliam formulações alternativas, e não a presença ou ausência de uma seção.

# A/B test: vague vs precise format instruction
variant_A = 'Return a JSON object.'
variant_B = 'Return a valid JSON object. No markdown, no code fences, no prose. Only the raw JSON.'

test_inputs = [
    'What is the price of Widget A?',
    'List all available products.',
    'Is Widget B in stock?'
]

def run_ab_test(base_prompt, variant, inputs, n_runs=5):
    pass_count = 0
    for inp in inputs:
        for _ in range(n_runs):
            prompt = base_prompt.replace('{{FORMAT}}', variant)
            output = run_prompt(prompt, inp)
            if is_valid_json(output):
                pass_count += 1
    return pass_count / (len(inputs) * n_runs)

print('A pass rate:', run_ab_test(template, variant_A, test_inputs))
print('B pass rate:', run_ab_test(template, variant_B, test_inputs))

Teste diferencial

O teste diferencial compara duas instruções quase idênticas para descobrir qual alteração causou a regressão. Isso é útil quando "funcionava na semana passada", mas agora não funciona.

Compare as diferenças entre a instrução antiga e a nova, identifique as seções alteradas e teste cada seção alterada isoladamente.

import difflib

def show_prompt_diff(prompt_v1, prompt_v2):
    diff = difflib.unified_diff(
        prompt_v1.splitlines(),
        prompt_v2.splitlines(),
        fromfile='v1',
        tofile='v2',
        lineterm=''
    )
    for line in diff:
        print(line)

show_prompt_diff(working_prompt, failing_prompt)
# Output shows exactly which lines changed between versions
# Test reverting each changed section individually

Testar entradas versus testar instruções

Há duas dimensões a testar: a instrução e a entrada. Uma instrução pode funcionar com entradas simples, mas falhar com entradas complexas. Uma ação útil de depuração: se a instrução falhar com uma entrada complexa, tente uma versão mais simples da entrada para confirmar que a própria instrução está correta.

# Input complexity ladder
inputs_by_complexity = [
    'What is 2 + 2?',             # trivially simple
    'Summarize this sentence.',    # simple task
    'Analyze this 500-word essay.',  # moderate
    'Compare 10 documents and extract contradictions.'  # complex
]

# Find the complexity level where the prompt starts failing
for inp in inputs_by_complexity:
    output = run_prompt(failing_prompt, inp)
    result = 'PASS' if evaluate(output) else 'FAIL'
    print(f'{result}: {inp[:60]}')
# First FAIL indicates where the prompt breaks down

O padrão de instrução mínima reproduzível

A MRP para uma sessão de depuração de instruções segue esta estrutura:

  1. Função em uma frase (se necessário)
  2. Instrução da tarefa em uma frase
  3. Instrução de formato
  4. A entrada mínima que reproduz a falha

Se essa instrução de 4 linhas ainda falhar, o problema está no modelo ou no formato. Reintroduza a complexidade, uma seção de cada vez, até que a falha reapareça — essa seção é a responsável.

# Start minimal
MINIMAL_PROMPT = (
    'You are a data extractor.\n'
    'Extract the product name and price from the text.\n'
    'Respond with JSON: {"name": "...", "price": ...}\n'
)

minimal_input = 'Widget Pro costs $49.'

# Test: if this works, the problem is in something added on top
output = run_prompt(MINIMAL_PROMPT, minimal_input)
print(output)
# Expected: {"name": "Widget Pro", "price": 49.0}

Acompanhando a sessão de depuração

Documente cada teste durante uma sessão de depuração. Sem anotações, você pode repetir os mesmos testes ou esquecer quais hipóteses foram eliminadas.

debug_log = [
    {
        'test': 'base_prompt_v5',
        'hypothesis': 'failing due to format conflict',
        'result': 'FAIL',
        'notes': 'JSON prefix still present'
    },
    {
        'test': 'base_prompt_v5_no_markdown_hint',
        'hypothesis': 'removing markdown hint from user message fixes conflict',
        'result': 'PASS',
        'notes': 'Output is clean JSON. Root cause confirmed: format conflict.'
    }
]

import json
with open('debug_session.json', 'w') as f:
    json.dump(debug_log, f, indent=2)

Quando parar de depurar e mudar de estratégia

Às vezes, depurar uma instrução chega a um ponto de retornos decrescentes. Sinais de que é hora de mudar de estratégia:

  • Você passou mais de 2 horas restringindo a investigação à mesma falha
  • A instrução mínima ainda falha com uma instrução clara e simples
  • Os testes A/B não mostram diferença estatisticamente significativa

Alternativas: mude para chamada de função (saídas estruturadas), adicione uma etapa de validação de pós-processamento, decomponha a tarefa em duas instruções mais simples ou atualize o modelo.

Corrigir versus reforçar

Depois de encontrar e corrigir a causa raiz, reforce a instrução para evitar falhas semelhantes:

  • Adicione o caso de teste que falhou ao seu conjunto de testes como um teste de regressão
  • Adicione uma instrução defensiva: "Mesmo que a entrada seja incomum, sempre retorne JSON"
  • Adicione validação da saída para que a falha seja detectada programaticamente, e não em produção

Uma instrução corrigida, mas não reforçada, falhará novamente no próximo caso extremo.

def safe_run_prompt(prompt, user_input):
    output = run_prompt(prompt, user_input)
    try:
        parsed = json.loads(output)
        return parsed
    except json.JSONDecodeError:
        # Fallback: ask the model to fix its own output
        fix_prompt = f'The following is not valid JSON. Rewrite it as valid JSON only:\n{output}'
        fixed = run_prompt('', fix_prompt)
        return json.loads(fixed)

Verificação de conhecimento

Na depuração de instruções por busca binária, depois de remover a primeira metade da instrução e a falha desaparecer, o que isso informa?

Recapitulação: depuração sistemática

Uma abordagem sistemática para depurar instruções:

  • Reproduzir: defina temperature=0, execute 5 vezes e confirme que a falha é consistente
  • Reduzir: faça uma busca binária nas seções da instrução para encontrar a instrução mínima que falha
  • Testar A/B: compare formulações alternativas da seção que falha
  • Diferenciar: compare as diferenças entre as versões funcional e com falha da instrução para encontrar a regressão
  • Documentar: registre cada teste, hipótese e resultado
  • Reforçar: adicione o caso corrigido ao seu conjunto de testes

Próxima lição: estratégias de registro e documentação para a manutenção de instruções a longo prazo.

Perguntas Frequentes

A aula “Abordagem sistemática de depuração” é grátis?

Sim — o texto completo de “Abordagem sistemática de depuração” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Prompt Engineering, atualize para CoddyKit PRO. O curso de AI Prompt Engineering inclui 4 aulas no total.

O que vou aprender em “Abordagem sistemática de depuração”?

Faça uma busca binária nas seções do prompt: remova metade, teste e restrinja a causa do problema. Você pratica AI Prompt Engineering com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar AI Prompt Engineering?

Nenhuma experiência prévia é necessária. AI Prompt Engineering no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Abordagem sistemática de depuração”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de AI Prompt Engineering?

Sim. Cada aula de AI Prompt Engineering inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Diagnosticando resultados inesperados
  2. Análise de causa raiz para solicitações
  3. Abordagem sistemática de depuração
  4. Estratégias de registro e documentação
← Voltar para AI Prompt Engineering