R
Interview Deckreact · next.js · senior/staff
0·0·122
IA Avançado

Context Engineering

Gerenciar o que vai no contexto do LLM: compressão, hierarquia, memória e janela deslizante.

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
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.
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).
// 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,
    ]
  }
}
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← →