Escalonamento com participação humana
Defina gatilhos de escalonamento que pausam o agente e solicitam orientação humana quando a confiança é baixa, quando uma ação destrutiva está prestes a ocorrer ou quando o orçamento de novas tentativas se esgota.
Escalonamento com participação humana é uma aula grátis de AI Engineering Academy no CoddyKit. Esta é a aula 4 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 Engineering Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Engineering Academy inclui 4 aulas no total.
Quando os agentes precisam de orientação humana
Agentes totalmente autônomos são adequados para tarefas bem definidas e de baixo risco. Porém, algumas situações exigem julgamento humano: instruções ambíguas, baixa confiança do modelo, ações destrutivas que não podem ser desfeitas ou tarefas cujo fracasso teria consequências graves. O escalonamento com participação humana (HITL) pausa o agente nesses pontos de decisão e solicita a contribuição de uma pessoa antes de prosseguir, combinando a eficiência da automação com o julgamento humano.
Definindo gatilhos de escalonamento
O escalonamento deve ser acionado por condições específicas e mensuráveis, e não por uma intuição vaga. Defina gatilhos de escalonamento explícitos para sua aplicação. Gatilhos comuns incluem: confiança do modelo abaixo de um limite, uma ação destrutiva prestes a ser executada, aproximação de um limite de política, esgotamento do orçamento de novas tentativas ou ultrapassagem do limite de tempo da tarefa. Documente os gatilhos no código como constantes nomeadas, para que possam ser ajustados sem alterar a lógica do fluxo de controle.
from enum import Enum
class EscalationReason(Enum):
LOW_CONFIDENCE = 'low_confidence' # model uncertainty
DESTRUCTIVE_ACTION = 'destructive_action' # irreversible change
AMBIGUOUS_TASK = 'ambiguous_task' # unclear instructions
RETRY_BUDGET_EXHAUSTED = 'retry_exhausted' # too many failures
POLICY_BOUNDARY = 'policy_boundary' # approaching limit
HUMAN_REQUESTED = 'human_requested' # explicit request
TIMEOUT = 'timeout' # took too long
ESCALATION_THRESHOLDS = {
'min_confidence': 0.6,
'max_retries': 5,
'max_runtime_minutes': 30,
}Detectando baixa confiança
Peça ao modelo que expresse sua confiança em uma ação proposta antes de executá-la. Uma pontuação de confiança abaixo do seu limite aciona o escalonamento. Use uma verificação de confiança estruturada, com uma pontuação numérica e uma justificativa breve, para que o revisor humano entenda exatamente por que o agente ficou incerto. A justificativa ajuda a pessoa a fornecer uma orientação específica, sem precisar revisar todo o histórico da tarefa.
from pydantic import BaseModel
class ConfidenceCheck(BaseModel):
proposed_action: str
confidence: float # 0.0 to 1.0
uncertainty_reason: str | None
proceed: bool
async def check_confidence(context: str, proposed_action: str) -> ConfidenceCheck:
return await judge_client.chat.completions.create(
model='gpt-4o',
response_model=ConfidenceCheck,
messages=[{
'role': 'user',
'content': f'Context: {context}\n\nI am about to: {proposed_action}\n\nHow confident am I that this is correct? Be honest about uncertainty.'
}]
)Detectando ações destrutivas
Marque as ferramentas que executam ações irreversíveis com um sinalizador destructive=True e exija confirmação humana antes de executá-las. Exemplos: excluir arquivos, enviar e-mails a usuários reais, fazer alterações no banco de dados que não possam ser revertidas, cobrar um cliente ou publicar conteúdo abertamente. O agente deve pausar nessas ações e aguardar uma aprovação humana explícita, mesmo que esteja operando de forma autônoma.
from dataclasses import dataclass
from typing import Callable
@dataclass
class Tool:
name: str
func: Callable
destructive: bool = False
description: str = ''
tools = [
Tool('search_web', search_web, destructive=False),
Tool('read_file', read_file, destructive=False),
Tool('write_file', write_file, destructive=True, description='Overwrites existing file'),
Tool('send_email', send_email, destructive=True, description='Sends real email to user'),
Tool('delete_records', delete_records, destructive=True, description='Permanent DB deletion'),
]
def requires_approval(tool: Tool) -> bool:
return tool.destructivePausando o agente e aguardando uma resposta
Quando um gatilho de escalonamento for acionado, salve o ponto de verificação (para que a tarefa possa ser retomada), crie um registro de solicitação de escalonamento e notifique o revisor humano. O agente interrompe o processamento e aguarda. O revisor analisa o escalonamento por meio de um painel ou notificação, fornece orientação ou aprovação, e o agente retoma a execução a partir do ponto de verificação, com essa orientação incluída como uma nova mensagem no histórico.
import asyncio
async def escalate_and_wait(task_id: str, reason: EscalationReason, context: str,
question: str, timeout_hours: int = 24) -> str:
# Save checkpoint
save_checkpoint(load_checkpoint(task_id))
# Create escalation record
escalation_id = create_escalation(task_id, reason, context, question)
# Notify reviewer
notify_reviewer(escalation_id, question)
# Wait for response (polling with timeout)
deadline = asyncio.get_event_loop().time() + timeout_hours * 3600
while asyncio.get_event_loop().time() < deadline:
response = get_escalation_response(escalation_id)
if response:
return response.guidance
await asyncio.sleep(60) # check every minute
raise TimeoutError(f'Escalation {escalation_id} not answered within {timeout_hours}h')Criando a interface do revisor
Os revisores humanos precisam de uma interface simples para responder a escalações. No mínimo, exiba: a descrição da tarefa, o progresso do agente até o momento, a pergunta específica ou ação proposta que requer aprovação e botões para Aprovar, Rejeitar e Fornecer orientação. Registre cada decisão do revisor com a identidade do revisor e o carimbo de data e hora para fins de auditoria. Um bot do Slack ou um formulário web simples funcionam bem para equipes internas.
# FastAPI escalation endpoint
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class EscalationResponse(BaseModel):
escalation_id: str
decision: str # 'approve', 'reject', 'guide'
guidance: str | None = None
reviewer_id: str
@app.post('/escalations/{escalation_id}/respond')
async def respond_to_escalation(esc_id: str, response: EscalationResponse):
escalation = get_escalation(esc_id)
if not escalation or escalation.status != 'pending':
return {'error': 'Escalation not found or already resolved'}
save_escalation_response(esc_id, response)
return {'status': 'response_recorded', 'task_will_resume': True}Injetando orientação humana no contexto do agente
Depois que a pessoa responder, injete a orientação dela como uma nova mensagem no histórico da conversa do agente antes de retomar a execução. Apresente-a como uma mensagem de um “supervisor” para distingui-la das próprias observações do agente. Assim, o agente poderá consultar essa orientação na próxima etapa. Se a pessoa tiver rejeitado a ação proposta, inclua instruções sobre o que fazer em vez disso.
def inject_human_guidance(messages: list, decision: str, guidance: str | None) -> list:
if decision == 'approve':
messages.append({
'role': 'user',
'content': 'Supervisor: Your proposed action has been approved. Proceed.'
})
elif decision == 'reject':
messages.append({
'role': 'user',
'content': f'Supervisor: Your proposed action was rejected. Instead: {guidance}'
})
elif decision == 'guide':
messages.append({
'role': 'user',
'content': f'Supervisor: Additional guidance: {guidance}'
})
return messagesAcompanhando métricas de escalação
Monitore o volume de escalações, os motivos e os tempos de resposta. Um volume alto de escalações indica que o agente não tem confiança suficiente — a tarefa pode ser ambígua demais, o modelo pode precisar de instruções melhores ou os limites de confiança podem estar baixos demais. Tempos de resposta longos indicam problemas de carga de trabalho dos revisores. Essas métricas ajudam você a ajustar o equilíbrio entre automação e participação humana, minimizando interrupções desnecessárias e mantendo as pessoas envolvidas em decisões realmente arriscadas.
def escalation_report(db_connection, days: int = 7) -> dict:
# SQL query (pseudocode)
rows = db_connection.execute('''
SELECT
reason,
COUNT(*) as count,
AVG(EXTRACT(EPOCH FROM (responded_at - created_at)) / 3600) as avg_response_hours,
SUM(CASE WHEN decision = 'approve' THEN 1 ELSE 0 END) as approvals,
SUM(CASE WHEN decision = 'reject' THEN 1 ELSE 0 END) as rejections
FROM escalations
WHERE created_at > NOW() - INTERVAL '%s days'
GROUP BY reason
ORDER BY count DESC
''' % days).fetchall()
return [dict(r) for r in rows]Expandindo gradualmente a autonomia
Comece com alta sensibilidade a escalações (limite de confiança baixo e escalação para todas as ações destrutivas) e reduza gradualmente a frequência das escalações à medida que você ganha confiança no comportamento do agente. Acompanhe quais escalações resultam em decisões de Aprovar e quais resultam em correções efetivas. Uma taxa de aprovação consistentemente alta para um tipo específico de gatilho significa que você pode automatizar esse gatilho com segurança, reduzindo a carga de trabalho humana e mantendo a supervisão onde ela realmente importa.
# Autonomy expansion strategy:
# Week 1: escalate for ALL destructive actions
# Week 2: auto-approve file writes to /tmp (low-risk), escalate others
# Week 4: auto-approve all file writes, escalate only email/DB changes
# Week 8: auto-approve emails under 10 recipients, escalate mass emails
# Track approval rates per trigger type:
# Tool: write_file -> 98% approve -> safe to automate
# Tool: send_email -> 89% approve -> near-automate with content check
# Tool: delete_records -> 43% approve -> always escalateSubstituição de emergência e cancelamento de tarefas
Sempre forneça um mecanismo de substituição de emergência que permita a uma pessoa cancelar imediatamente uma tarefa do agente em execução. Se um agente estiver se comportando de forma inadequada — chamando ferramentas que não deveria ou executando ações fora do escopo pretendido — uma pessoa deverá conseguir interrompê-lo em segundos. Implemente um sinal de cancelamento (um sinalizador no banco de dados que o agente verifique a cada etapa) e garanta que os resultados das chamadas de ferramentas sejam descartados se o agente for cancelado no meio da etapa.
async def run_agent_with_cancel(task_id: str, messages: list) -> str:
for step in range(MAX_ITERATIONS):
# Check cancel flag at start of every step
if redis_client.get(f'agent:cancel:{task_id}'):
save_final_status(task_id, 'cancelled')
return 'Task cancelled by operator.'
response = await get_next_action(messages)
if response.is_final:
return response.answer
result = await execute_tool(response.tool, response.args)
messages.append({'role': 'user', 'content': result})
save_checkpoint_after_step(task_id, step, messages)
return 'Max iterations reached'Calibrando limites de escalação
Os limites de escalação precisam ser ajustados. Se o limite de confiança for alto demais, o agente escalará quase todas as ações, sobrecarregando os revisores. Se for baixo demais, ações arriscadas passarão despercebidas. Comece com limites conservadores na primeira semana, acompanhe o volume de escalações e a taxa de aprovação dos revisores e faça ajustes. Um sistema estável deve escalar de 5% a 15% das tarefas por problemas de confiança e quase 100% das ações destrutivas, mantendo uma taxa geral de aprovação acima de 80%.
# Threshold tuning guide:
# Escalation rate vs quality trade-off:
#
# confidence_threshold=0.8 -> 35% escalation rate (too many)
# confidence_threshold=0.6 -> 12% escalation rate (target)
# confidence_threshold=0.4 -> 4% escalation rate (too few)
#
# Weekly review of escalation decisions:
# - Approval rate > 90%: lower threshold (too conservative)
# - Approval rate < 70%: raise threshold (not catching real issues)
# - Target: 75-85% approval rateVerificação rápida
Teste sua compreensão do design de escalações com participação humana.
Recapitulação da lição
Nesta lição, você aprendeu que os gatilhos de escalação definem condições precisas nas quais o agente deve pausar e buscar orientação humana; os sinalizadores de ação destrutiva nas ferramentas impõem requisitos de aprovação para operações irreversíveis; e a expansão gradual da autonomia permite aumentar a automação com segurança à medida que o agente conquista confiança. Em seguida, vamos projetar a arquitetura de produção do nosso projeto final.
Perguntas Frequentes
A aula “Escalonamento com participação humana” é grátis?
Sim — o texto completo de “Escalonamento com participação humana” é 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 Engineering Academy, atualize para CoddyKit PRO. O curso de AI Engineering Academy inclui 4 aulas no total.
O que vou aprender em “Escalonamento com participação humana”?
Defina gatilhos de escalonamento que pausam o agente e solicitam orientação humana quando a confiança é baixa, quando uma ação destrutiva está prestes a ocorrer ou quando o orçamento de novas tentati… Você pratica AI Engineering Academy 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 Engineering Academy?
Nenhuma experiência prévia é necessária. AI Engineering Academy 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 4 de 4.
Quanto tempo leva a aula “Escalonamento com participação humana”?
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 Engineering Academy?
Sim. Cada aula de AI Engineering Academy 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
- Classificando modos de falha de agentes
- Autocorreção e criação de prompts reflexivos
- Criação de pontos de verificação e retomada de tarefas
- Escalonamento com participação humana