Primeiro, o que é uma janela de contexto? E como ela se relaciona com a programação eficaz usando o Cursor? Para ampliar um pouco a perspectiva, um modelo de linguagem grande (LLM) é um modelo de inteligência artificial treinado para prever e gerar texto aprendendo padrões de conjuntos de dados massivos. Ele alimenta ferramentas como o Cursor ao entender sua entrada e sugerir código ou texto baseado no que viu anteriormente. Tokens são as entradas e saídas desses modelos. São pedaços de texto, frequentemente um fragmento de uma palavra, que um LLM processa um por vez. Os modelos não leem frases inteiras de uma vez; eles preveem o próximo token baseado nos que vieram antes. Para ver como um texto é tokenizado, você pode usar um tokenizador como este aqui. Tokenizer

O que é contexto?

Quando estamos gerando uma sugestão de código no Cursor, “contexto” refere-se às informações que são fornecidas ao modelo (na forma de “tokens de entrada”) que o modelo então usa para prever as informações subsequentes (na forma de “tokens de saída”). Existem dois tipos de contexto:
  1. Contexto de intenção define o que o usuário quer obter do modelo. Por exemplo, um prompt do sistema geralmente serve como instruções de alto nível sobre como o usuário quer que o modelo se comporte. A maior parte do “prompting” feito no Cursor é contexto de intenção. “Mude aquele botão de azul para verde” é um exemplo de intenção declarada; é prescritivo.
  2. Contexto de estado descreve o estado do mundo atual. Fornecer ao Cursor mensagens de erro, logs do console, imagens e trechos de código são exemplos de contexto relacionado ao estado. É descritivo, não prescritivo.
Juntos, esses dois tipos de contexto trabalham em harmonia descrevendo o estado atual e o estado futuro desejado, permitindo que o Cursor faça sugestões de código úteis.

Fornecendo contexto no Cursor

Quanto mais contexto relevante você puder fornecer a um modelo, mais útil ele será. Se contexto insuficiente for fornecido no Cursor, o modelo tentará resolver sem as informações relevantes. Isso normalmente resulta em:
  1. Alucinações onde o modelo tenta fazer correspondência de padrões (quando não há padrão) causando resultados inesperados. Isso pode acontecer frequentemente para modelos como claude-3.5-sonnet quando não recebem contexto suficiente.
  2. O Agent tentando reunir contexto por si mesmo pesquisando na base de código, lendo arquivos e chamando ferramentas. Um modelo de raciocínio forte (como claude-3.7-sonnet) pode ir bem longe com essa estratégia, e fornecer o contexto inicial correto determinará a trajetória.
A boa notícia é que o Cursor é construído com consciência contextual em seu núcleo e é projetado para exigir intervenção mínima do usuário. O Cursor automaticamente puxa as partes da sua base de código que o modelo estima serem relevantes, como o arquivo atual, padrões semanticamente similares em outros arquivos e outras informações da sua sessão. No entanto, há muito contexto que pode ser extraído, então especificar manualmente o contexto que você sabe ser relevante para a tarefa é uma maneira útil de direcionar os modelos na direção certa.

Símbolo @

A maneira mais fácil de fornecer contexto explícito é com o símbolo @. Estes são ótimos quando você sabe especificamente qual arquivo, pasta, site ou outro pedaço de contexto você quer incluir. Quanto mais específico você puder ser, melhor. Aqui está um detalhamento de como ser mais cirúrgico com o contexto:
SímboloExemploCaso de usoDesvantagem
@code@LRUCachedFunctionVocê sabe qual função, constante ou símbolo é relevante para a saída que está gerandoRequer muito conhecimento da base de código
@filecache.tsVocê sabe qual arquivo deve ser lido ou editado, mas não exatamente onde no arquivoPode incluir muito contexto irrelevante para a tarefa em questão dependendo do tamanho do arquivo
@folderutils/Tudo ou a maioria dos arquivos em uma pasta é relevantePode incluir muito contexto irrelevante para a tarefa em questão
Context Menu

Regras

Você deve pensar nas regras como memória de longo prazo que você ou outros membros da sua equipe querem ter acesso. Capturar contexto específico do domínio, incluindo fluxos de trabalho, formatação e outras convenções, é um ótimo ponto de partida para escrever regras. As regras também podem ser geradas a partir de conversas existentes usando /Generate Cursor Rules. Se você teve uma longa conversa de ida e volta com muitos prompts, provavelmente há algumas diretrizes úteis ou regras gerais que você pode querer reutilizar mais tarde. Rules

MCP

Model Context Protocol é uma camada de extensibilidade onde você pode dar ao Cursor capacidades para executar ações e obter contexto externo. Dependendo da sua configuração de desenvolvimento, você pode querer aproveitar diferentes tipos de servidores, mas duas categorias que vimos serem particularmente úteis são:
  • Documentação interna: ex.: Notion, Confluence, Google Docs
  • Gerenciamento de projetos: ex.: Linear, Jira
Se você tem ferramentas existentes para acessar contexto e executar ações através de uma API, você pode construir um servidor MCP para isso. Aqui está um guia rápido sobre como construir servidores MCP. MCP

Coleta automática de contexto

Um padrão poderoso que muitos usuários estão adotando é permitir que o Agent escreva ferramentas de curta duração que ele pode então executar para coletar mais contexto. Isso é especialmente eficaz em fluxos de trabalho com intervenção humana onde você revisa o código antes de ele ser executado. Por exemplo, adicionar declarações de depuração ao seu código, executá-lo e permitir que o modelo inspecione a saída dá a ele acesso a contexto dinâmico que não poderia inferir estaticamente. Em Python, você pode fazer isso solicitando ao Agent para:
  1. Adicionar declarações print(“debugging: …”) em partes relevantes do código
  2. Executar o código ou testes usando o terminal
O Agent lerá a saída do terminal e decidirá o que fazer em seguida. A ideia central é dar ao Agent acesso ao comportamento real de tempo de execução, não apenas ao código estático. Self-Gathering Context

Principais Conclusões

  • O contexto é a base da codificação eficaz com IA, consistindo em intenção (o que você quer) e estado (o que existe). Fornecer ambos ajuda o Cursor a fazer previsões precisas.
  • Use contexto cirúrgico com símbolos @ (@code, @file, @folder) para guiar o Cursor com precisão, em vez de depender apenas da coleta automática de contexto.
  • Capture conhecimento reutilizável em regras para uso em toda a equipe, e estenda as capacidades do Cursor com Model Context Protocol para conectar sistemas externos.
  • Contexto insuficiente leva a alucinações ou ineficiência, enquanto muito contexto irrelevante dilui o sinal. Encontre o equilíbrio certo para resultados ótimos.