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

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

Когда Cursor генерирует предложение кода, «контекст» — это информация, передаваемая модели (в виде «входных токенов»), которую модель затем использует, чтобы предсказать последующую информацию (в виде «выходных токенов»). Есть два типа контекста:
  1. Контекст намерения определяет, что пользователь хочет получить от модели. Например, системный промпт обычно служит высокоуровневыми инструкциями о том, как пользователь хочет, чтобы модель себя вела. Большая часть «промптинга» в 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 писать краткоживущие утилиты, которые он затем запускает, чтобы собрать больше контекста. Это особенно полезно в сценариях с участием человека (human-in-the-loop), где ты просматриваешь код перед выполнением. Например, добавление отладочных сообщений в свой код, его запуск и предоставление модели возможности изучить вывод дают ей доступ к динамическому контексту, который невозможно вывести статически. В Python это можно сделать, попросив Agent:
  1. Добавить в нужные части кода выражения print(“debugging: …”)
  2. Запустить код или тесты через терминал
Agent прочитает вывод терминала и решит, что делать дальше. Главная идея — дать Agent доступ к фактическому поведению во время выполнения, а не только к статическому коду. Self-Gathering Context

Выводы

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