Amostragem de autoconsistência
Vote entre vários caminhos de raciocínio.
Amostragem de autoconsistência é uma aula grátis de AI Prompt Engineering no CoddyKit. Esta é a aula 2 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.
Uma única cadeia é frágil
Uma única cadeia de raciocínio pode tomar uma decisão errada no início e nunca se recuperar. A autoconsistência (Wang et al., 2022) resolve esse problema amostrando muitos caminhos de raciocínio independentes e agregando suas respostas finais, normalmente por voto majoritário.
A intuição é a seguinte: o raciocínio correto converge para a mesma resposta por caminhos diversos, enquanto os erros se dispersam. A agregação amplifica o sinal consistente.
def self_consistency(prompt, n=20, temperature=0.7):
answers = []
for _ in range(n):
chain = llm(prompt, temperature=temperature)
answers.append(extract_answer(chain))
return majority_vote(answers)Por que a marginalização sobre caminhos funciona
A autoconsistência aproxima a marginalização sobre caminhos de raciocínio: em vez de confiar em uma única derivação latente, estima a resposta final mais provável integrada ao longo de muitas derivações.
Essa é uma estimativa de Monte Carlo da distribuição de respostas. A moda dessa distribuição costuma ser mais confiável do que qualquer caminho amostrado individualmente, especialmente quando o espaço de respostas é pequeno e discreto.
from collections import Counter
def majority_vote(answers):
norm = [normalize_answer(a) for a in answers]
counts = Counter(norm)
answer, votes = counts.most_common(1)[0]
confidence = votes / len(norm)
return answer, confidenceDiversidade por meio da temperatura
A autoconsistência precisa de caminhos diversos. A amostragem gulosa ou com temperatura próxima de zero produz cadeias quase idênticas, anulando o método. Use uma temperatura moderada (frequentemente entre 0,5 e 0,8) e, possivelmente, amostragem top-p para diversificar os caminhos.
Uma temperatura alta demais degrada cada cadeia individual; ajuste a temperatura para maximizar a precisão do conjunto, não a qualidade de uma única cadeia.
def tune_temperature(prompt, val_set, temps=(0.4, 0.6, 0.8, 1.0)):
best = max(
temps,
key=lambda t: ensemble_accuracy(prompt, val_set, temp=t, n=20)
)
return bestA normalização das respostas é fundamental
Os votos só contam quando respostas equivalentes são reconhecidas como iguais. Normalize antes de contar: remova unidades, padronize os números em formato canônico, converta o texto para minúsculas, interprete frações e porcentagens e aplique a equivalência específica da tarefa.
Uma normalização inadequada divide a verdadeira maioria entre variantes superficiais e permite que uma resposta minoritária vença a votação.
def normalize_answer(a):
a = a.strip().lower().rstrip('.')
a = a.replace(',', '').replace('$', '').replace('%', '')
try:
return str(round(float(a), 6)) # numeric canonical form
except ValueError:
return aQuantas amostras?
A precisão aumenta com o número de amostras n, mas com retornos decrescentes, frequentemente atingindo um platô entre 10 e 40, dependendo da dificuldade da tarefa. Cada amostra multiplica linearmente o custo e a latência.
Faça uma varredura de n em um conjunto de validação e escolha o ponto de inflexão da curva, no qual amostras adicionais já não justificam seu custo.
def sweep_n(prompt, val, ns=(1,3,5,10,20,40)):
return {n: ensemble_accuracy(prompt, val, n=n) for n in ns}
# Choose n at the accuracy/cost knee, not the maximumParada antecipada adaptativa
Economize computação com a amostragem adaptativa: pare de gerar caminhos assim que a votação for decisiva. Se, após 5 amostras, uma resposta tiver uma vantagem dominante, é improvável que amostras adicionais mudem a vencedora.
Assim, a computação se concentra em itens realmente difíceis e disputados, enquanto as respostas fáceis são obtidas a baixo custo.
def adaptive_sc(prompt, max_n=40, margin=0.6, min_n=5):
answers = []
for i in range(max_n):
answers.append(extract_answer(llm(prompt, temperature=0.7)))
if i + 1 >= min_n:
ans, conf = majority_vote(answers)
if conf >= margin:
return ans, conf, i + 1
return majority_vote(answers)Votação ponderada e auxiliada por verificador
A maioria simples trata todos os caminhos igualmente. É possível ponderar os votos pela probabilidade atribuída pelo modelo a um caminho, pela pontuação de um verificador aprendido ou pela autoavaliação da validade de cada cadeia.
A autoconsistência ponderada por verificador frequentemente supera a votação sem pesos ao reduzir a classificação de modos de falha frequentes, mas confiantes e incorretos.
def weighted_vote(chains):
scores = {}
for c in chains:
a = normalize_answer(extract_answer(c))
scores[a] = scores.get(a, 0.0) + verifier_score(c)
return max(scores, key=scores.get)Confiança a partir da concordância
A margem de votação é um sinal útil de confiança. Uma resposta unânime é muito mais confiável do que uma divisão de 6 contra 5. Disponibilize esse sinal para a lógica subsequente: encaminhe itens com baixa concordância para escalonamento, análise humana ou um modelo mais potente.
Isso transforma a autoconsistência tanto em um recurso para aumentar a precisão quanto em um mecanismo de calibração.
def route(prompt):
ans, conf = adaptive_sc(prompt)[:2]
if conf < 0.5:
return escalate_to_stronger_model(prompt)
return ansLimites: tarefas contínuas e abertas
A votação majoritária pressupõe um espaço de respostas discreto e comparável. Ela não se aplica diretamente à geração em formato livre, a textos longos ou a resultados contínuos, nos quais duas amostras quaisquer podem ser diferentes.
Para essas tarefas, faça uma agregação diferente: agrupe resultados semanticamente semelhantes, vote nos campos estruturados extraídos ou use um modelo avaliador para selecionar a melhor amostra em vez de contar correspondências exatas.
def semantic_consistency(samples):
clusters = cluster_by_embedding(samples)
biggest = max(clusters, key=len) # largest agreement cluster
return representative(biggest) # medoid of the clusterImplantação com atenção aos custos
A autoconsistência é uma das técnicas de instrução mais caras: o custo cresce com n. Reserve-a para itens de alto impacto ou difíceis, combine-a com parada adaptativa e considere uma política em camadas na qual uma única cadeia processe os casos fáceis.
Compare sempre sua precisão por dólar com a de uma única chamada a um modelo mais potente, que pode ser mais barata para obter o mesmo ganho.
def tiered(prompt, q):
if easy(q):
return extract_answer(llm(prompt, temperature=0))
return adaptive_sc(prompt, max_n=20)[0] # SC only when neededAutoconsistência de ponta a ponta
Um fluxo completo: ajuste a temperatura e n, amostre cadeias diversas, normalize as respostas rigorosamente, faça a votação (opcionalmente ponderada por um verificador), use a margem como sinal de confiança, pare cedo quando a decisão for clara e encaminhe itens com baixa concordância para escalonamento.
O resultado é um sistema de raciocínio mais preciso e autocalibrável do que qualquer cadeia individual.
def solve(prompt):
chains = sample_until_decisive(prompt, max_n=20, temp=0.7)
ans, conf = weighted_majority(chains)
if conf < THRESH:
return escalate(prompt)
return {'answer': ans, 'confidence': conf, 'paths': len(chains)}Verificação rápida
Diagnostique uma configuração de autoconsistência que apresenta desempenho inferior.
Resumo
Principais conclusões:
- A autoconsistência amostra muitas cadeias diversas e realiza uma votação, aproximando a marginalização sobre caminhos de raciocínio.
- A diversidade (com temperatura moderada) e a normalização rigorosa das respostas são pré-requisitos para seu funcionamento.
- A precisão aumenta com
n, mas atinge um platô; use a parada antecipada adaptativa para controlar os custos. - Pondere os votos com um verificador e use a margem de votação como um sinal calibrado de confiança.
- Ela precisa de um espaço de respostas discreto; para tarefas abertas, agrupe os resultados semanticamente ou use um avaliador.
Perguntas Frequentes
A aula “Amostragem de autoconsistência” é grátis?
Sim — o texto completo de “Amostragem de autoconsistência” é 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 “Amostragem de autoconsistência”?
Vote entre vários caminhos de raciocínio. 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 2 de 4.
Quanto tempo leva a aula “Amostragem de autoconsistência”?
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
- Solicitação com cadeia de pensamento
- Amostragem de autoconsistência
- Exploração em árvore de pensamentos
- Quando as solicitações de raciocínio ajudam