Во‑первых, что такое окно контекста? И как оно связано с эффективной работой в Cursor? Если немного отстраниться, large language model (LLM) — это модель искусственного интеллекта, обученная предсказывать и генерировать текст, изучая закономерности в огромных наборах данных. Она лежит в основе инструментов вроде Cursor, понимая твой ввод и предлагая код или текст на основе уже увиденного. Токены — это вход и выход таких моделей. Это фрагменты текста, часто часть слова, которые LLM обрабатывает по одному. Модели не читают сразу целые предложения — они предсказывают следующий токен на основе предыдущих. Чтобы посмотреть, как текст разбивается на токены, можно использовать токенизатор вроде этого. Tokenizer

Что такое контекст?

Когда мы генерим подсказку кода в Cursor, «контекст» — это информация, которая передаётся модели (в виде «input tokens»), и которую модель затем использует, чтобы предсказать следующую информацию (в виде «output tokens»). Есть два типа контекста:
  1. Контекст намерения определяет, чего ты хочешь получить от модели. Например, системный промпт обычно служит высокоуровневыми инструкциями о том, как ты хочешь, чтобы модель себя вела. Большая часть «prompting» в Cursor — это контекст намерения. «Сделай эту кнопку не синей, а зелёной» — пример заявленного намерения; это предписывающая формулировка.
  2. Контекст состояния описывает текущее состояние мира. Сообщения об ошибках, логи консоли, изображения и фрагменты кода, которые ты передаёшь Cursor, — примеры контекста, связанного с состоянием. Он описательный, а не предписывающий.
Вместе эти два типа контекста работают сообща: они описывают текущее состояние и желаемое будущее состояние, позволяя Cursor давать полезные предложения по коду.

Предоставление контекста в Cursor

Чем точнее и уместнее контекст ты даёшь модели, тем полезнее она будет. Если в Cursor контекста недостаточно, модель попытается решить задачу без нужной информации. Обычно это приводит к следующему:
  1. Галлюцинациям, когда модель пытается найти закономерности там, где их нет, что даёт неожиданные результаты. Это часто случается с моделями вроде claude-3.5-sonnet, когда им не хватает контекста.
  2. Тем, что Agent сам пытается собрать контекст: ищет по кодовой базе, читает файлы и вызывает инструменты. Сильная «мыслящая» модель (например, claude-3.7-sonnet) может зайти довольно далеко с этой стратегией, а правильно заданный начальный контекст определяет траекторию.
Хорошая новость: в основе Cursor — контекстная осведомлённость, и он спроектирован так, чтобы требовать минимум вмешательства от пользователя. Cursor автоматически подтягивает части твоей кодовой базы, которые модель считает релевантными: текущий файл, семантически похожие фрагменты в других файлах и другую информацию из твоей сессии. Однако источников контекста много, поэтому вручную указывать тот контекст, который ты знаешь как релевантный задаче, — полезный способ направить модели в нужную сторону.

Символ @

Самый простой способ задать явный контекст — использовать символ @. Это удобно, когда ты точно знаешь, какой файл, папку, сайт или другой кусок контекста хочешь добавить. Чем точнее, тем лучше. Вот как можно более прицельно работать с контекстом:
SymbolExampleUse caseDrawback
@code@LRUCachedFunctionТы знаешь, какая функция, константа или символ важны для генерируемого выводаТребуется хорошее знание кодовой базы
@filecache.tsТы знаешь, какой файл нужно прочитать или отредактировать, но не где именно в нёмВ зависимости от размера файла может попасть много лишнего контекста для текущей задачи
@folderutils/Всё или большая часть файлов в папке важныМожет включать много лишнего контекста для текущей задачи
Context Menu

Правила

Думай о правилах как о долговременной памяти, к которой ты и другие участники команды всегда можете обращаться. Фиксация доменного контекста — включая рабочие процессы, форматирование и другие соглашения — отличный способ начать составлять правила. Правила можно также сгенерировать из существующих диалогов с помощью команды /Generate Cursor Rules. Если у тебя был длинный диалог с множеством подсказок, наверняка там есть полезные указания или общие правила, которые захочется переиспользовать позже. Rules

MCP

Model Context Protocol — это слой расширения, с помощью которого ты можешь дать Cursor возможность выполнять действия и подтягивать внешний контекст. В зависимости от твоей среды разработки могут подойти разные типы серверов, но две категории, которые особенно полезны:
  • Внутренняя документация: например, Notion, Confluence, Google Docs
  • Управление проектами: например, Linear, Jira
Если у тебя уже есть инструменты для доступа к контексту и выполнения действий через API, ты можешь создать под них MCP‑сервер. Вот короткое руководство по созданию MCP‑серверов. MCP

Самосбор контекста

Один из мощных подходов, который многие уже используют, — позволять Agent писать временные инструменты и запускать их, чтобы собрать больше контекста. Это особенно эффективно в сценариях с участием человека, где ты просматриваешь код перед выполнением. Например, добавив отладочные сообщения в свой код, запустив его и дав модели проанализировать вывод, ты предоставляешь ей доступ к динамическому контексту, который нельзя вывести статически. В Python ты можешь сделать это, попросив Agent:
  1. Добавить print(“debugging: …”) в нужных местах кода
  2. Запустить код или тесты через терминал
Agent прочитает вывод терминала и решит, что делать дальше. Базовая идея — дать Agent доступ к реальному поведению во время выполнения, а не только к статическому коду. Self-Gathering Context

Главное

  • Контекст — основа эффективной работы с AI при программировании. Он состоит из намерения (что ты хочешь) и состояния (что уже есть). Если дать оба, Cursor сможет точнее предсказывать.
  • Используй «хирургический» контекст с @-префиксами (@code, @file, @folder), чтобы направлять Cursor максимально точно, а не полагаться только на автоматический сбор контекста.
  • Оформляй повторяемые знания в правилах для командного переиспользования и расширяй возможности Cursor через Model Context Protocol, чтобы подключать внешние системы.
  • Недостаток контекста приводит к галлюцинациям или неэффективности, а избыток нерелевантного контекста размывает сигнал. Держи правильный баланс для оптимальных результатов.