Context Engineering
Você implementará um pacote de continuidade para um atendimento com correções e dados de fontes diferentes. A meta é preservar o que permite decidir e deixar o restante recuperável, em vez de carregar o histórico completo por hábito.
Use dados fictícios com versões e origem. O laboratório local demonstra consolidação e handoff; a comparação com um modelo é uma etapa separada. Antes dela, defina quais fatos e exceções precisam sobreviver à compactação e qual informação deve ser consultada novamente.
JavaScriptAo terminar esta aula
- Contexto útil combina conteúdo, origem e finalidade.
- Compactação precisa preservar decisões e exceções.
- Estado, memória e cache resolvem problemas diferentes.
Antes de continuar: Leitura: Context Engineering
Inventariar fatos e correções
FundamentosLeia o atendimento fictício e extraia objetivo vigente, pedido corrigido, evidência de pagamento e pendência de acesso. Não escreva um resumo narrativo imediatamente. Primeiro marque origem, momento e escopo de cada item. Tente resolver o conflito entre uma declaração antiga e uma consulta atual, explicando qual fonte tem autoridade. Retome a diferença entre estado externo e texto gerado: uma nota do assistente é interpretação, não confirmação financeira. Acrescente um segundo atendimento com as mesmas chaves para testar separação. Esse inventário cria os campos que o pacote de continuidade precisa preservar.
↗ Effective context engineering for AI agents↗ Conversation state
Construir consolidação e orçamento
FundamentosExecute o consolidador e confirme a atualização do pedido. Modifique a chave para incluir atendimentoId e evite sobrescrever fatos de outra sessão. Defina versões comparáveis por objeto e uma política de atualização por origem. Depois escreva prioridades de contexto: instrução essencial, pedido atual, evidência e histórico útil. Estime volume apenas para planejar; contagem exata exige tokenizador ou consumo documentado. Preserve espaço para resposta e uma estratégia explícita de excesso. Se o histórico não couber, compactar com referências é melhor que cortar silenciosamente a parte que contém a correção.
Compactar sem apagar decisão
FundamentosEscreva um pacote curto com objetivo, fatos, origem, decisões, restrições e pendências. Antes de olhar a referência, peça a um colega ou faça você mesmo a decisão usando apenas esse pacote. Compare com a decisão obtida do histórico completo. Acrescente uma exceção de política e verifique se ela sobrevive. Quando desaparecer, ajuste a compactação e registre o erro. Mantenha identificadores dos artefatos originais para recuperar detalhes. Uma frase como pagamento confirmado não deve virar acesso concluído. O resumo reduz volume, mas continua sujeito a verificação e não deve receber autoridade maior que suas fontes.
↗ Effective context engineering for AI agents↗ LangGraph Memory
Testar recuperação e handoff
FundamentosPrepare o próximo agente ou etapa para consultar a matrícula do pedido atual. O handoff informa o que já foi feito e o que falta, evitando repetir ações por interpretar pendência como conclusão. Teste documento antigo, fonte indisponível e escopo errado. Compare memória curta para continuidade do atendimento com memória longa para preferência durável de idioma. Defina finalidade e retenção antes de persistir fatos. Cache de prefixo pode otimizar processamento, mas não recupera sozinho informação de outra sessão. A entrega deve mostrar decisões preservadas, contexto excluído e lacunas de consulta, permitindo avaliar economia junto da qualidade.
Implementar seleção para um chat
FundamentosPara transformar o pacote em um chat seletivo, mantenha estado por atendimento e uma função montarContexto que receba orçamento, instrução, pedido vigente, memórias elegíveis e evidências. Conte tokens com o tokenizador do modelo ou dados reportados; um contador de palavras não deve impor limite de API como se fosse exato. Priorize itens essenciais e reserve saída. Se até os essenciais excedem o orçamento, interrompa com erro claro ou reduza a tarefa por uma política explícita. Após cada rodada, atualize resumo incremental com origem e referências. Teste correção de pedido depois da compactação e recuperação da exceção do documento. A rubrica exige que objetivo, correção e evidência sobrevivam, e que o contexto efetivo seja registrável. Compare janela maior com seleção melhor: capacidade adicional custa recursos e não elimina ruído ou conflito.
↗ Effective context engineering for AI agents↗ Tokenization algorithms
Execução, inspeção e diagnóstico
FundamentosExecute o consolidador e confira que pedido 72 substitui pedido 27. Acrescente um fato de outro atendimento com a mesma chave e observe o risco de misturar escopos. Corrija a estrutura para usar atendimentoId junto da chave. Depois acrescente uma consulta antiga e defina uma política de vigência em vez de confiar apenas na ordem do array.
const fatos = [
{chave:"pedido",valor:"27",versao:1,origem:"usuario"},
{chave:"pedido",valor:"72",versao:2,origem:"correcao-usuario"},
{chave:"pagamento",valor:"confirmado",versao:1,origem:"consulta-autorizada"}
];
const atual = new Map();
for (const fato of fatos) {
const anterior = atual.get(fato.chave);
if (!anterior || fato.versao > anterior.versao) atual.set(fato.chave,fato);
}
console.log({objetivo:"verificar acesso",fatos:[...atual.values()],
pendencias:["consultar matricula para o pedido 72"]});Se a saída usa pedido antigo, procure perda da correção na compactação ou recuperação do caso errado. Se pagamento confirmado vira acesso ativo, procure uma inferência indevida entre estados. Se outro atendimento altera o fato, falta namespace. Cada falha exige uma mudança concreta no contrato; aumentar a janela de contexto pode apenas transportar mais conflitos.
Exercício aplicado
Entregue um pacote de handoff e uma política de contexto para casos com correção, exceção e dois atendimentos.
- Execute e inspecione a consolidação.
- Vincule fatos a atendimento, origem e versão comparável.
- Escreva resumo com objetivo, fatos, evidências, restrições e pendências.
- Teste perda de exceção e recuperação de artefato original; documente orçamento e política de descarte.
Abrir resolução comentada
A solução preserva a correção, busca a política vigente e consulta a matrícula para o pedido atual. O resumo registra a mudança em vez de ocultá-la. Se o orçamento é insuficiente, referências aos artefatos originais permitem recuperar detalhes; uma nota compactada não deve substituir uma consulta obrigatória.
A avaliação inclui um caso em que remover uma exceção produz decisão errada. Compare o pacote compactado com o histórico completo e o resultado autorizado. Registre quais fatos o resumo perdeu, corrigindo a política de compactação. Economia de tokens sem preservação de decisão é uma redução inadequada.
Uma boa entrega mantém correções explícitas e permite voltar à evidência original. A memória durável armazena apenas informação com finalidade e escopo definidos. O cache aparece como otimização de infraestrutura, não como solução para conservar fatos da conversa.
A solução usa atendimento junto da chave factual, preserva versões comparáveis e separa pendências de ações concluídas. Ela detecta um resumo que perdeu a exceção e recupera o original por referência. montarContexto aplica reserva de saída, prioridade e descarte explícito, rejeitando excesso essencial. As contagens são fixtures fornecidas, não contagem de palavras apresentada como tokens reais; o chat integrado usa o tokenizador do modelo.
import assert from "node:assert/strict";
const originais=new Map([["politica-v2","Acesso após confirmação; pode exigir análise manual."]]);
const fatos=[
{atendimento:"a1",chave:"pedido",valor:"27",versao:1,origem:"usuario"},
{atendimento:"a1",chave:"pedido",valor:"72",versao:2,origem:"correcao-usuario"},
{atendimento:"a2",chave:"pedido",valor:"99",versao:1,origem:"usuario"},
{atendimento:"a1",chave:"pagamento",valor:"confirmado",versao:1,origem:"consulta-autorizada"}
];
const atuais=new Map();
for(const fato of fatos){const id=JSON.stringify([fato.atendimento,fato.chave]);const antigo=atuais.get(id);
if(!antigo||fato.versao>antigo.versao)atuais.set(id,fato);}
function handoff(atendimento){return {atendimento,objetivo:"verificar acesso",
fatos:[...atuais.values()].filter(x=>x.atendimento===atendimento),
evidencias:["politica-v2"],restricoes:["Não afirmar ativação sem consulta à matrícula"],
pendencias:["consultar matrícula"],acoesConcluidas:[...atuais.values()].some(x=>x.atendimento===atendimento&&x.chave==="pagamento")?["consultar pagamento"]:[]};}
function verificarResumo(resumo){
const original=originais.get(resumo.origem);
return !!original&&resumo.texto.includes("análise manual");
}
const resumoRuim={origem:"politica-v2",texto:"Acesso após confirmação."};
assert.equal(verificarResumo(resumoRuim),false);
const recuperado=originais.get(resumoRuim.origem);
assert.ok(recuperado.includes("análise manual"));
const resumoBom={origem:"politica-v2",texto:recuperado};assert.ok(verificarResumo(resumoBom));
const a1=handoff("a1"),a2=handoff("a2");
assert.equal(a1.fatos.find(x=>x.chave==="pedido").valor,"72");
assert.equal(a2.fatos.find(x=>x.chave==="pedido").valor,"99");
assert.ok(!a1.acoesConcluidas.includes("consultar matrícula"));
// Contagens fictícias já fornecidas: não representam tokenização de texto.
function montarContexto(itens,limite,reservaSaida){
const disponivel=limite-reservaSaida;
const essenciais=itens.filter(x=>x.essencial),opcionais=itens.filter(x=>!x.essencial);
let usado=essenciais.reduce((s,x)=>s+x.tokensMedidos,0);
if(usado>disponivel)throw new Error("ESSENCIAIS_EXCEDEM_ORCAMENTO");
const incluidos=[...essenciais],excluidos=[];
for(const item of opcionais){if(usado+item.tokensMedidos<=disponivel){incluidos.push(item);usado+=item.tokensMedidos;}
else excluidos.push(item.id);}
return {incluidos,excluidos,usado,reservaSaida};
}
const itens=[{id:"pedido-atual",essencial:true,tokensMedidos:20},
{id:"politica-com-excecao",essencial:true,tokensMedidos:30},
{id:"historico-irrelevante",essencial:false,tokensMedidos:100}];
const contexto=montarContexto(itens,100,20);
assert.deepEqual(contexto.excluidos,["historico-irrelevante"]);assert.equal(contexto.usado,50);
assert.throws(()=>montarContexto(itens,40,10),/ESSENCIAIS_EXCEDEM_ORCAMENTO/);
console.log({status:"aprovado",a1,a2,contexto,contagem:"fictícia; substituir por tokenizador do modelo"});Como conferir seu resultado
- Pedido corrigido é preservado.
- Escopos diferentes não se sobrescrevem.
- Pendências não aparecem como ações concluídas.
Aplique em um problema novo
Primeiro resolva sem consultar a resposta. Explique suas decisões e guarde a evidência. A conclusão de leitura é independente desta autoavaliação.
Confira seus pré-requisitos
- Comparar versões no mesmo namespace.
- Somar orçamento com reserva de saída.
Resumo omite 'exceto análise de fraude'. Caso F tem pagamento confirmado e alerta de fraude; a fonte manda revisão manual. Contexto tem política essencial 35, pedido essencial 20, histórico opcional 60; janela 90 e saída reservada 20. Resolva decisão e orçamento.
Conferir raciocínio e critérios de domínio
A decisão é revisão manual, não ativação: pagamento confirmado não elimina a exceção de fraude. O resumo sem exceção é rejeitado pelo contraexemplo F.
A fonte versionada recuperada repõe a exceção; o handoff conserva alerta, origem e pendência de revisão sem marcar ativação concluída.
Há 70 unidades disponíveis; essenciais somam 55 e histórico 60 não cabe. O pacote exclui o histórico e usa 55; as unidades são fixtures, não tokenização real.
Evidências para autoavaliação ou revisão por pares
- Exceção decisiva: A decisão é revisão manual, não ativação: pagamento confirmado não elimina a exceção de fraude. O resumo sem exceção é rejeitado pelo contraexemplo F.
- Recuperação e handoff: A fonte versionada recuperada repõe a exceção; o handoff conserva alerta, origem e pendência de revisão sem marcar ativação concluída.
- Orçamento de contexto: Há 70 unidades disponíveis; essenciais somam 55 e histórico 60 não cabe. O pacote exclui o histórico e usa 55; as unidades são fixtures, não tokenização real.
Um erro frequente
Cache substitui memória factual.
Cache otimiza execução; memória possui identidade, origem e atualização.
Teste sua compreensão
Responda com suas palavras antes de abrir o comentário. Saber explicar uma decisão é parte do domínio.
1. Cache de prefixo é memória longa?
Não.
Cache reutiliza processamento segundo regras do serviço; memória tem persistência e recuperação definidas pela aplicação.
2. Mais contexto sempre melhora a resposta?
Não.
Ruído, conflitos e orçamento podem prejudicar uso de evidência.
3. Resumo elimina a necessidade de origem?
Não.
A representação pode perder detalhes; origem e referências permitem verificar e recuperar.
Seu progresso fica salvo neste navegador. Concluir a leitura não substitui demonstrar o domínio nos exercícios.
Referências e aprofundamento
Documentação oficial e trabalhos originais. As referências registram o escopo e as limitações para você conferir o que sustentam.
- Effective context engineering for AI agents
Anthropic • consulta: 2026-10-06
AgentesIA & MLSeleção de contexto, orçamento de attention, context rot, recuperação just-in-time, compactação, notas e handoffs.
Limites: Context rot descreve efeito empírico, sem limite universal; compactação pode perder detalhes necessários.
- Conversation state
OpenAI • consulta: 2026-10-06
OpenAIEstado conversacional, histórico, continuidade e limites de contexto.
Limites: Estado da API não equivale automaticamente a memória longa; regras de persistência e cobrança são específicas da API.
- LangGraph Memory
LangChain • consulta: 2026-10-06
LangGraphAgentesPersistência de memória por thread/namespace, trimming, delete e summarization.
Limites: Memória deve ter identidade/tenant; apagamento efetivo precisa incluir índices, backups e traces conforme política da aplicação.
- OpenAI Retrieval
OpenAI • consulta: 2026-10-06
OpenAIIngestion, chunking/overlap, metadata/filtros, ranking e reescrita de consultas em vector stores.
Limites: Implementação gerenciada OpenAI; defaults não são melhores escolhas universais para pgvector.
- LangGraph Persistence
LangChain • consulta: 2026-10-06
LangGraphAgentesEstado, checkpoints, retomada e execução durável.
Limites: Reexecutar nós pode repetir efeitos; combinar persistência com idempotência e versões do estado.
- LangChain Memory overview
LangChain • consulta: 2026-10-06
FundamentosMemória curta e longa, semântica e episódica, perfis/coleções, atualizações e recuperação.
Limites: Taxonomia funcional, não equivalência com cognição humana; consolidar apenas fatos com proveniência e política definida.
- Prompt caching
OpenAI • consulta: 2026-10-06
OpenAICache de prefixos e impacto em custo/latência.
Limites: Cache depende de prefixo, modelo, política e prazo; não confundir cache com memória do agente.
- Tokenization algorithms
Hugging Face • consulta: 2026-10-06
Hugging FaceTokenização, subwords e diferenças entre algoritmos de tokenização.
Limites: Ramo main; contagem e contexto máximo são específicos do tokenizer e do modelo.