Além da Cadeia de Pensamento: Cadeia de Rascunho no Amazon Bedrock

O Desafio da Eficiência em IA Generativa

Conforme as organizações ampliam suas implementações de inteligência artificial generativa, um desafio crítico se intensifica: como equilibrar qualidade dos resultados, custos operacionais e velocidade de resposta? Os números revelam a urgência dessa questão. Os custos de inferência dominam entre 70 a 90% das despesas operacionais de modelos de linguagem grande (LLM). Quando estratégias de prompting verbosas inflam o volume de tokens de 3 a 5 vezes, o impacto financeiro e de desempenho se torna inescapável. Organizações buscam ativamente alternativas mais eficientes para interagir com esses modelos.

Métodos tradicionais de prompting, embora funcionem, frequentemente criam sobrecarga desnecessária que prejudica tanto a eficiência de custos quanto os tempos de resposta. É neste contexto que surge a Cadeia de Rascunho (Chain-of-Draft, CoD), uma técnica inovadora de prompting que muda radicalmente como modelos abordam tarefas de raciocínio.

Da Cadeia de Pensamento para Cadeia de Rascunho

Compreendendo a Cadeia de Pensamento Tradicional

A técnica de Cadeia de Pensamento (Chain-of-Thought, CoT) guia modelos de linguagem a raciocinar sobre problemas passo a passo, em vez de saltar diretamente para respostas. Este método provou ser particularmente eficaz em tarefas complexas como quebra-cabeças lógicos, problemas matemáticos e cenários de raciocínio de bom senso. Ao espelhar padrões humanos de resolução de problemas, CoT ajuda modelos a decompor questões complexas em etapas gerenciáveis, melhorando tanto a precisão quanto a transparência.

Considere um exemplo simples: “Se há 5 maçãs e você come 2, quantas maçãs restam?” Uma resposta com CoT seria: “Comece com 5 maçãs. Como 2 maçãs. Subtraia 2 de 5. 5 – 2 = 3 maçãs restantes.”

Porém, essa abordagem apresenta desvantagens significativas em ambientes de produção. A natureza verbosa das respostas CoT aumenta o uso de tokens e consequentemente os custos. O tempo estendido necessário para gerar explicações detalhadas resulta em latência mais alta, tornando-a menos adequada para aplicações em tempo real. Além disso, os outputs extensos complicam o processamento posterior e integração com outros sistemas.

Apresentando a Cadeia de Rascunho

A Cadeia de Rascunho (CoD) é uma técnica de prompting que visa reduzir verbosidade limitando o número de palavras em cada etapa de raciocínio. Ela concentra-se apenas nos cálculos ou transformações essenciais necessários para avançar, reduzindo significativamente o uso de tokens e a latência de inferência.

CoD se inspira em como humanos resolvem problemas com anotações mentais breves em vez de explicações verbosas. A chave da inovação reside em uma restrição simples mas poderosa: cada etapa de raciocínio é limitada a cinco palavras ou menos. Essa limitação força o modelo a focar em componentes lógicos essenciais enquanto minimiza verbosidade desnecessária.

Voltando ao exemplo anterior: para a pergunta “Jason tinha 20 pirulitos. Ele deu alguns a Denny. Agora Jason tem 12 pirulitos. Quantos pirulitos Jason deu a Denny?”, uma resposta CoT poderia incluir várias frases explicativas. Uma resposta CoD simplesmente diria: “Início: 20, Fim: 12, 20 – 12 = 8”. Esta abordagem minimalista alcança o mesmo raciocínio lógico usando significativamente menos tokens.

Imagem original — fonte: Aws

Por Que a Cadeia de Rascunho Funciona

A ideia fundamental por trás de CoD é que cadeias de raciocínio tipicamente contêm alta redundância. Destilando etapas até seu núcleo semântico, CoD ajuda o modelo a focar na estrutura lógica da tarefa em vez de fluência linguística. O resultado é latência de inferência menor devido a outputs mais curtos, custos de token reduzidos pela geração minimizada e output mais limpo para parsing ou automação posterior.

Esse minimalismo é alcançado sem sacrificar precisão. De acordo com pesquisa na área, CoD “alcançou 91,4% de precisão em GSM8K (versus 95,3% para CoT), enquanto reduzia tokens de output em até 92,1%, e cortava latência pela metade em vários modelos testados”.

Tecnicamente, CoD utiliza prompts em linguagem natural que instruem o modelo a “pensar passo a passo” enquanto explicitamente limitam o comprimento de cada etapa de raciocínio: “Mantenha apenas um rascunho mínimo para cada etapa de pensamento, com no máximo 5 palavras.” Modelos como GPT-4, Claude e Cohere Command R+ funcionaram especialmente bem sob essas restrições, particularmente quando exemplos few-shot foram usados para demonstrar o padrão de raciocínio conciso.

Além de tarefas aritméticas, CoD demonstrou forte desempenho em tarefas de raciocínio de bom senso. Avaliações usando benchmarks revelaram que CoD não apenas reduz significativamente a geração de tokens e latência, mas em vários casos supera CoT em precisão — especialmente quando output verboso não é necessário. Um exemplo notável com um modelo de linguagem grande em tarefas de compreensão de esportes mostrou que CoT produzia respostas longas e verbosas com média de 172,5 tokens de output, enquanto CoD reduzia isso para 31,3 tokens, alcançando redução de ~82%. Curiosamente, a precisão melhorou ligeiramente, demonstrando que CoD pode ser mais eficaz com menos palavras.

Implementação Prática na AWS

Configuração e Pré-requisitos

Para testar e comparar técnicas de prompting no Amazon Bedrock, você precisa verificar se possui:

  • Conta AWS com permissão para criar e executar funções Lambda
  • Acesso ao Amazon Bedrock habilitado em sua região AWS (por exemplo, us-east-1) com Model Access para modelos de sua escolha
  • Função AWS IAM para execução da função Lambda
  • Permissões para invocar modelos do Amazon Bedrock (bedrock:Converse)
  • Permissões para enviar métricas personalizadas ao Amazon CloudWatch (cloudwatch:PutMetricData)
  • Permissões opcionais de CloudWatch Logs para logging
  • Bibliotecas Python necessárias (boto3), incluída no ambiente de runtime do AWS Lambda para Python 3.9 ou posterior

Avaliação com a API Bedrock Converse

O ponto de partida é criar uma função AWS Lambda que interage com modelos usando a API Amazon Bedrock Converse. Essa API fornece uma interface unificada e consistente para interagir com vários modelos de fundação, simplificando o envio de mensagens conversacionais e recebimento de respostas, suportando diálogos multi-turno e recursos avançados enquanto gerencia autenticação AWS e infraestrutura.

A função Lambda será configurada para:

  • Inicializar clientes para Amazon Bedrock Runtime e CloudWatch
  • Enviar um prompt estático como mensagem do usuário para a API Converse
  • Recuperar o texto da resposta e calcular latência e uso de tokens para entrada e saída
  • Publicar métricas no CloudWatch e registrar logs relevantes
  • Retornar a resposta do modelo junto com contagens de tokens de entrada/saída
  • Registrar erros e retorná-los com código HTTP apropriado

Código da Função Lambda

import json
import boto3
import time
import logging
from botocore.exceptions import ClientError

logger = logging.getLogger()
logger.setLevel(logging.INFO)

bedrock = boto3.client('bedrock-runtime', region_name='us-east-1')
cloudwatch = boto3.client('cloudwatch')

MODEL_ID = "model1-id"  # Replace with actual Model 1 ID

PROMPT = (
    "You have three boxes. Each box contains three balls, but the balls can be red, blue, or green. "
    "Box 1 is labeled as 'Red Balls Only'. Box 2 is labeled 'Blue Balls Only'. "
    "Box 3 is labeled 'Red and Blue Balls Only'. The labels on the boxes are all incorrect. "
    "The Task: You must determine the contents of each box, knowing that all labels are incorrect. "
    "You can only take a single ball from one box and observe its color. "
    "Then you must deduce the contents of all three boxes. "
    "Think step by step to answer the question, but only keep a minimum draft for each thinking step, with 5 words at most. "
    "Return the answer at the end of the response after separator ###."
)

def lambda_handler(event, context):
    conversation = [{"role": "user", "content": [{"text": PROMPT}]}]
    start_time = time.time()
    
    try:
        response = bedrock.converse(
            modelId=MODEL_ID,
            messages=conversation,
            inferenceConfig={"maxTokens": 2000, "temperature": 0.7}
        )
        
        response_text = response["output"]["message"]["content"][0]["text"]
        latency = time.time() - start_time
        input_tokens = len(PROMPT.split())
        output_tokens = len(response_text.split())
        
        cloudwatch.put_metric_data(
            Namespace='ChainOfDraft',
            MetricData=[
                {"MetricName": "Latency", "Value": latency, "Unit": "Seconds"},
                {"MetricName": "TokensUsed", "Value": input_tokens + output_tokens, "Unit": "Count"},
            ]
        )
        
        logger.info({
            "request_id": context.aws_request_id,
            "latency_seconds": round(latency, 2),
            "total_tokens": input_tokens + output_tokens
        })
        
        return {
            "statuscode": 200,
            "body": json.dumps({
                "response": response_text,
                "input_tokens": input_tokens,
                "output_tokens": output_tokens,
                "metrics": {
                    "latency_seconds": round(latency, 2),
                    "total_tokens": input_tokens + output_tokens,
                },
            }),
        }
        
    except ClientError as e:
        logger.error(f"AWS service error: {e}")
        return {"statuscode": 500, "body": json.dumps("Service error occurred")}
    except Exception as e:
        logger.error(f"Unexpected error: {e}")
        return {"statusCode": 500, "body": json.dumps(f"Internal error occurred: {e}")}

Estratégias de Teste

Para avaliar as técnicas de prompting, três abordagens são testadas:

Prompt Padrão: O prompt sem instruções de raciocínio, pedindo resposta direta sem explicação.

Prompt de Cadeia de Pensamento: O mesmo puzzle com instrução “Think step by step to answer the question” e retornar a resposta após separador.

Prompt de Cadeia de Rascunho: O puzzle com instrução “Think step by step to answer the question but only keep a minimum draft for each thinking step, with 5 words at most.”

Resultados Práticos

Ao testar a função Lambda com esses prompts em dois modelos diferentes, os resultados revelaram eficiências notáveis:

Para o Modelo-1: CoD reduziu o uso total de tokens de 350 para 216 (redução de 39%) e cortou latência de 3,28 para 1,58 segundos (redução de 52%).

Para o Modelo-2: os ganhos foram ainda maiores. CoD baixou tokens de 601 para 142 (redução de 76%) e latência de 3,81 para 0,79 segundos (redução de 79%).

Esses números demonstram que Cadeia de Rascunho oferece melhorias significativas em velocidade e eficiência de tokens comparado a Cadeia de Pensamento, com resultados especialmente fortes no Modelo-2.

Quando Não Usar Cadeia de Rascunho

Embora CoD ofereça benefícios convincentes em eficiência e desempenho, não é universalmente aplicável. Alguns cenários requerem CoT ou abordagens ainda mais verbosas:

Casos sem exemplos prévios: CoD funciona melhor quando acompanhado de exemplos few-shot robustos. Em cenários zero-shot — sem padrões de raciocínio fornecidos — modelos frequentemente lutam para adotar o estilo minimalista de rascunho, levando a menor precisão ou etapas de raciocínio incompletas.

Tarefas exigindo alta interpretabilidade: Para casos como revisão de documentos legais ou médicos, trilhas de auditoria ou ambientes regulados, raciocínio verboso pode ser essencial. As explicações passo a passo transparentes de CoT oferecem melhor rastreabilidade e confiança.

Modelos de linguagem pequenos: CoD teve desempenho inferior em modelos com menos de 3 bilhões de parâmetros. Esses modelos carecem da fidelidade de seguimento de instruções e poder de raciocínio necessários para executar prompts no estilo CoD efetivamente. CoT pode produzir melhores resultados nesses casos.

Tarefas criativas ou abertas: Tarefas que se beneficiam de elaboração — como escrita, ideação ou conversas voltadas ao usuário — podem perder valor se muito condensadas. CoD é melhor adequado para raciocínio estruturado, lógica e tarefas determinísticas onde brevidade melhora o desempenho.

Conclusão e Pontos-Chave

A Cadeia de Rascunho emerge como uma técnica eficiente para organizações buscando otimizar implementações de IA generativa. Ao encorajar modelos de linguagem a raciocinar em etapas concisas e focadas, CoD alcança melhorias notáveis em desempenho e utilização de recursos. Implementações usando Amazon Bedrock e AWS Lambda demonstram benefícios significativos em uso de tokens e melhoria em latência comparado ao prompting tradicional de Cadeia de Pensamento, mantendo precisão comparável em vários modelos de fundação e tarefas complexas de raciocínio.

Conforme a IA continua evoluindo, CoD representa um passo significativo em direção a modelos de linguagem mais eficientes e performáticos. É particularmente valioso para tarefas de raciocínio estruturado onde velocidade e eficiência de tokens são críticas, embora não seja uma solução única para todos os cenários. Profissionais são encorajados a explorar CoD em seus próprios fluxos de trabalho de IA, aproveitando seu potencial para reduzir custos, melhorar tempos de resposta e aumentar escalabilidade.

O futuro da IA reside em abordagens de raciocínio mais inteligentes e eficientes, e a técnica de prompting de Cadeia de Rascunho está na vanguarda dessa transformação.

Recursos Adicionais

Fonte

Move Beyond Chain-of-Thought with Chain-of-Draft on Amazon Bedrock (https://aws.amazon.com/blogs/machine-learning/move-beyond-chain-of-thought-with-chain-of-draft-on-amazon-bedrock/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *