Context Engineering
Gerenciar o que vai no contexto do LLM: compressão, hierarquia, memória e janela deslizante.
Definição
Context engineering é a disciplina de gerenciar o que entra na context window do LLM para maximizar qualidade e minimizar custo. Técnicas: Compression (resumir histórico antigo), Hierarchical context (sistema > exemplos > histórico > instrução atual), Memory layers (working memory no contexto, episodic no DB, semantic em vector store), Sliding window (manter N turnos recentes), e Context caching (Anthropic/Google: cachear system prompt longo).
Problema → Solução
Problema
Conversa longa degrada a qualidade (modelo perde foco no histórico distante). Custo cresce linearmente com o contexto. Inserir tudo no contexto dilui as instruções importantes.Solução
Hierarquia clara: system prompt (instruções permanentes) → few-shot examples → contexto recuperado (RAG) → histórico resumido → último turno. Sumarizar histórico a cada N turnos. Context caching para system prompts longos (reduz custo e latência). KV-cache para prompts repetidos.Dica de entrevista
Tip
A posição importa no contexto: modelos tendem a "lost-in-the-middle" — prestam mais atenção ao início e fim do contexto. Coloque as instruções mais importantes no system prompt (início) e repita as críticas perto da instrução do usuário (fim).Código
// Gerenciamento de contexto em conversa longa
class ConversationManager {
private turns: Message[] = []
private summary = ''
private readonly MAX_TURNS = 10
async addTurn(role: string, content: string) {
this.turns.push({ role, content })
// Sumarizar quando contexto fica longo
if (this.turns.length > this.MAX_TURNS) {
this.summary = await this.summarize(this.turns.slice(0, -4))
this.turns = this.turns.slice(-4) // manter os 4 mais recentes
}
}
buildContext(): Message[] {
return [
{ role: 'system', content: SYSTEM_PROMPT },
// Contexto histórico sumarizado (não todos os turnos)
...(this.summary ? [{
role: 'system',
content: `Resumo da conversa anterior: ${this.summary}`
}] : []),
// RAG: contexto recuperado relevante para a última mensagem
...(this.retrievedContext ? [{
role: 'system',
content: `Contexto relevante:\n${this.retrievedContext}`
}] : []),
// Últimos N turnos reais
...this.turns,
]
}
}Perguntas de entrevista
Q.O que é lost-in-the-middle?▾
A.Fenômeno onde LLMs prestam menos atenção a informações no meio do contexto, focando mais no início e no fim. Implicações para RAG: coloque os chunks mais relevantes no início ou fim, não no meio. Para instruções: repita as mais importantes antes do input do usuário, mesmo que já estejam no system prompt.
Q.Como funciona context caching?▾
A.Anthropic e Google permitem cachear um prefixo do prompt (system prompt + documentos de referência) por 5 minutos. Chamadas subsequentes que usam o mesmo prefixo pagam ~10% do custo normal para os tokens cacheados. Ideal para: system prompts longos, base de conhecimento inserida no contexto, few-shot examples extensos.
Q.Quais são as camadas de memória em agentes LLM?▾
A.Working memory: contexto atual da conversa (limitado pelo context window). Episodic memory: histórico de conversas passadas (DB, recuperado por relevância). Semantic memory: fatos e conhecimento (vector store, RAG). Procedural memory: como fazer tarefas (system prompt, fine-tuning). Agentes eficazes combinam todas — contexto atual + retrieval de memória relevante.
87/122← →