Gerenciamento de Contexto
Domine janelas de contexto, sistemas de memoria, geracao aumentada por recuperacao, estrategias de sumarizacao para agentes de IA.
O Desafio do Contexto
Agentes de IA enfrentam uma restricao fundamental: janelas de contexto limitadas. Mesmo os maiores modelos (200K+ tokens) nao podem conter um codigo fonte inteiro, historico de conversacao e instrucoes da tarefa simultaneamente.
Gerenciamento de contexto nao e apenas sobre caber no orcamento de tokens. E sobre decisoes inteligentes sobre o que manter, comprimir, buscar e esquecer.
Sistemas de Memoria
class MemoriaHierarquica:
def __init__(self):
self.memoria_trabalho = {}
self.curto_prazo = []
self.longo_prazo = {}
self.armazenamento_semantico = []
def adicionar_trabalho(self, chave, valor):
self.memoria_trabalho[chave] = valor
def obter_trabalho(self, chave):
return self.memoria_trabalho.get(chave)
def adicionar_curto_prazo(self, mensagem, max_tamanho=20):
self.curto_prazo.append(mensagem)
if len(self.curto_prazo) > max_tamanho:
self.curto_prazo = self.curto_prazo[-max_tamanho:]
def lembrar(self, chave, valor, importancia=1.0):
self.longo_prazo[chave] = {
"valor": valor,
"importancia": importancia,
"timestamp": __import__('time').time()
}
def recordar(self, chave):
entrada = self.longo_prazo.get(chave)
return entrada["valor"] if entrada else None
def recordar_por_relevancia(self, consulta, top_k=3):
scores = []
for chave, entrada in self.longo_prazo.items():
if consulta.lower() in chave.lower():
scores.append((entrada["importancia"], chave, entrada["valor"]))
scores.sort(reverse=True)
return [(k, v) for _, k, v in scores[:top_k]]
def sumarizar_e_arquivar(self):
if len(self.curto_prazo) > 10:
textos = [m["conteudo"] for m in self.curto_prazo[:5]]
sumario = " | ".join(textos)
self.longo_prazo["sumario_conversa"] = {
"valor": sumario[:500],
"importancia": 0.5,
"timestamp": __import__('time').time()
}
self.curto_prazo = self.curto_prazo[-5:]
memoria = MemoriaHierarquica()
memoria.lembrar("nome_projeto", "Plataforma Nova", importancia=1.0)
memoria.lembrar("stack_tecnologica", ["Python", "FastAPI", "React"], importancia=0.9)
memoria.adicionar_curto_prazo({"papel": "usuario", "conteudo": "Corrigir bug de login"})
memoria.adicionar_curto_prazo({"papel": "assistente", "conteudo": "Encontrei o problema em auth.py"})
relevantes = memoria.recordar_por_relevancia("stack")
print(f"Stack tecnologica: {relevantes}")RAG (Geracao Aumentada por Recuperacao)
class SistemaRAG:
def __init__(self):
self.documentos = []
self.indice = {}
def adicionar_documento(self, doc_id, conteudo, metadata=None):
idx = len(self.documentos)
self.documentos.append({
"id": doc_id,
"conteudo": conteudo,
"metadata": metadata or {}
})
for palavra in conteudo.lower().split():
if palavra not in self.indice:
self.indice[palavra] = []
self.indice[palavra].append(idx)
def buscar(self, consulta, top_k=3):
palavras_consulta = consulta.lower().split()
scores = {}
for q_palavra in palavras_consulta:
for doc_idx in self.indice.get(q_palavra, []):
if doc_idx not in scores:
scores[doc_idx] = 0
scores[doc_idx] += 1
ranked = sorted(scores.items(), key=lambda x: x[1], reverse=True)
resultados = []
for doc_idx, score in ranked[:top_k]:
doc = self.documentos[doc_idx]
resultados.append({
"id": doc["id"],
"conteudo": doc["conteudo"][:500],
"relevancia": score / len(palavras_consulta),
"metadata": doc["metadata"]
})
return resultados
def construir_contexto(self, consulta, max_tokens=2000):
resultados = self.buscar(consulta)
partes = []
contagem = 0
for r in resultados:
snippet = f"[Fonte: {r['id']}]\n{r['conteudo']}\n"
tokens = len(snippet.split())
if contagem + tokens > max_tokens:
break
partes.append(snippet)
contagem += tokens
return "\n---\n".join(partes)
rag = SistemaRAG()
rag.adicionar_documento(
"auth-flow.md",
"O fluxo de autenticacao usa tokens JWT com expiracao de 1 hora. "
"Tokens de atualizacao sao armazenados em cookies HTTP-only."
)
rag.adicionar_documento(
"api-endpoints.md",
"POST /api/auth/login - Autenticar usuario\n"
"POST /api/auth/refresh - Atualizar token\n"
"GET /api/auth/profile - Obter perfil"
)
contexto = rag.construir_contexto("Como funciona a autenticacao?")
print(contexto)Estrategias de Sumarizacao
sumarizacao:
estrategia: hierarquica
limiares:
curto_prazo: 10
sessao: 50
total: 200
incluir_no_sumario:
- decisoes_tomadas
- alteracoes_codigo
- padroes_erro
- preferencias_usuario
campos_preservar:
- caminhos_arquivos
- nomes_funcoes
- versoes
- endpoints_apiLimites de Janela de Contexto
Modelo | Janela | Orcamento Efetivo |
|---|---|---|
GPT-4o | 128K tokens | ~96K |
GPT-4o-mini | 128K tokens | ~96K |
Claude Sonnet 4 | 200K tokens | ~170K |
Claude Opus 4 | 200K tokens | ~170K |
Gemini 1.5 Pro | 1M tokens | ~800K |
Pratica
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Qual o proposito principal de uma janela deslizante no gerenciamento de contexto?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Em um sistema de memoria hierarquica, que tipo de informacao deve ser armazenada na memoria de longo prazo?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Para que serve RAG (Geracao Aumentada por Recuperacao) no gerenciamento de contexto?
- Gerenciamento de contexto requer decisoes sobre o que manter, comprimir, buscar e esquecer
- Memoria hierarquica (trabalho, curto prazo, longo prazo, semantico) fornece arquitetura escalavel
- RAG permite acesso a grandes bases de conhecimento sem encher a janela de contexto
- Sumarizacao comprime informacao preservando detalhes importantes
- Priorizacao de contexto garante que itens critics sempre caibam no orcamento de tokens
- Diferentes modelos tem limites diferentes; projete para o orcamento efetivo
Fluxo de Trabalho Detalhado
Este diagrama ilustra o fluxo de trabalho basico do agente. Adapte-o ao seu caso de uso especifico.
Exemplos Adicionais de Codigo
# Exemplo adicional de implementacao
class ExemploAdicional:
"""Classe de exemplo para ilustrar conceitos adicionais."""
def __init__(self, nome):
self.nome = nome
self.dados = {}
def processar(self, entrada):
"""Processa a entrada e armazena o resultado."""
resultado = self._transformar(entrada)
self.dados[entrada] = resultado
return resultado
def _transformar(self, valor):
return valor * 2 if isinstance(valor, (int, float)) else valor.upper()
def obter_estatisticas(self):
"""Retorna estatisticas sobre os dados processados."""
if not self.dados:
return {"status": "vazio", "total": 0}
return {
"status": "processado",
"total": len(self.dados),
"ultimo": list(self.dados.keys())[-1]
}
exemplo = ExemploAdicional('teste')
print(exemplo.processar(21)) # 42
print(exemplo.obter_estatisticas()){
"configuracao_exemplo": {
"versao": "1.0",
"parametros": {
"timeout": 30,
"max_tentativas": 3,
"modo": "automatico"
},
"seguranca": {
"requer_aprovacao": true,
"nivel_autonomia": 2
}
}
}# configuracao-adicional.yaml
ambiente:
nome: producao
variaveis:
LOG_LEVEL: "debug"
MAX_TOKENS: 128000
agentes:
- nome: agente-principal
modelo: gpt-4o
temperatura: 0.3
- nome: agente-revisor
modelo: claude-sonnet-4-20250514
ferramentas_permitidas:
- read
- grep
- glob
ferramentas_negadas:
- write
- edit
- bash
monitoramento:
metrics: true
tracing: true
alertas:
- tipo: erro_critico
canal: slack
- tipo: timeout
canal: emailNotas Importantes
Este conceito e fundamental para o entendimento do modulo. Certifique-se de compreende-lo antes de prosseguir.
Preste atencao a este detalhe: configuracoes incorretas podem levar a comportamentos inesperados do agente.
Uma dica pratica: sempre valide suas configuracoes em ambiente de staging antes de promover para producao.
Ao dominar este conceito, voce estara apto a construir agentes mais robustos e confiaveis.
Tabela Comparativa
Caracteristica | Abordagem A | Abordagem B | Abordagem C |
|---|---|---|---|
Complexidade | Baixa | Media | Alta |
Flexibilidade | Limitada | Moderada | Total |
Manutencao | Facil | Media | Dificil |
Performance | Otima | Boa | Variavel |
Seguranca | Basica | Avancada | Maxima |
Caso de uso | Prototipos | Producao | Sistemas criticos |
Escolha a abordagem com base nos requisitos especificos do seu projeto. Nao existe solucao unica para todos os casos.
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Pergunta adicional 1 sobre o conteudo desta aula?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Pergunta adicional 2 sobre o conteudo desta aula?
Como responder
Questão de múltipla escolha com 4 opções. Selecione uma opção e escolha Verificar resposta.
Pergunta adicional 3 sobre o conteudo desta aula?
- Reforce seu entendimento praticando com exemplos reais
- Consulte a documentacao oficial para casos avancados
- Compartilhe seu conhecimento com a comunidade
- Sempre teste suas implementacoes em ambientes controlados
- Mantenha-se atualizado com as melhores praticas da industria
- A pratica consistente e a chave para a maestria
- Agentes de IA bem projetados combinam tecnologia com boas praticas de engenharia