# Контекст и токены

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Понять **контекстное окно**, **токены** и способы управлять тем, что попадает в сессию Cursor — чтобы ответы были точнее, а расходы ниже.

## Предварительно

- [01 — Введение в AI](../01-vvedenie-v-ai/README.md)
- Открытый проект в Cursor

## Время

**60–90 минут**

---

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

**Контекст** — всё, что модель учитывает при генерации ответа в **текущей** сессии:

| Источник | Примеры |
|----------|---------|
| Ваши сообщения | Промпты, уточнения |
| Ответы модели | История чата |
| Системные инструкции | Rules, skills, политики Cursor |
| Прикреплённые данные | `@file`, `@folder`, `@code` |
| Результаты tools | Вывод grep, содержимое файлов |
| (Иногда) открытые вкладки | Зависит от настроек |

Модель **не видит** весь диск и **не помнит** прошлые сессии по умолчанию.

---

## Токены

**Токен** — фрагмент текста (часть слова или слово). Ориентиры:

- английский код: ~1 токен ≈ 4 символа;
- русский текст: часто **больше** токенов на то же количество символов;
- большой JSON или лог — **очень** дорогой контекст.

**Контекстное окно** — лимит токенов «вход + выход». При переполнении старые сообщения **сжимаются или отбрасываются** — агент «забывает» начало задачи.

| Модель (примерно) | Окно | Практический совет |
|-------------------|------|---------------------|
| Быстрые / «flash» | Меньше, дешевле | Мелкие задачи, узкий @ |
| «Сильные» / Sonnet-class | Больше | Рефакторинг, архитектура |
| Самые большие | Очень большое | Всё равно не кормить весь monorepo |

Точные цифры меняются — смотрите документацию Cursor и выбранной модели.

---

## @-упоминания в Cursor

Символ `@` добавляет в контекст **явно**:

| Упоминание | Когда использовать |
|------------|-------------------|
| `@file` | Один конкретный файл |
| `@folder` | Папка (осторожно — много файлов) |
| `@code` | Символ / выделение |
| `@docs` | Индексированная документация |
| `@web` | Поиск в сети (если включено) |
| Skill / rule | Специализированное поведение |

**Правило:** прикрепляйте **минимум**, достаточный для задачи. Вместо `@src/` лучше `@src/auth/login.go`.

---

## Стоимость и скорость

Больше контекста → обычно:

- выше **счёт** (Pro/API);
- выше **латентность** (дольше ждать);
- выше риск **путаницы** (модель цепляется за нерелевантный файл).

Стратегии ECC:

- **Model routing** — простое на Haiku/flash, сложное на Sonnet;
- **Background agents** — длинные задачи не блокируют чат;
- **Compaction** — сжатие истории (hooks/skills в ECC).

---

## Жизненный цикл сессии

```mermaid
flowchart LR
  S[Старт — rules загружены]
  S --> G[Рост истории + tool output]
  G --> L{Лимит близко?}
  L -->|нет| G
  L -->|да| C[Compaction / новая сессия]
  C --> S2[Продолжение с кратким резюме]
```

Если агент «забыл» ТЗ — возможно, вышли за лимит. Решение: **новый чат** + краткое резюме в первом сообщении.

---

## Шаблон «лёгкого» промпта с контекстом

```markdown
Цель: добавить валидацию email в RegisterForm.

Контекст:
- @src/components/RegisterForm.tsx
- @src/lib/validation.ts — использовать существующие хелперы

Не трогать: API routes, миграции БД.

Готово когда: unit-тест в RegisterForm.test.tsx зелёный.
```

---

## Антипаттерны контекста

| Плохо | Почему | Лучше |
|-------|--------|-------|
| `@.` на весь репо | Шум, лимит | 2–5 файлов |
| Вставить 10 000 строк лога | Съедает окно | Последние 100 строк + ошибка |
| Держать одну сессию неделю | Потеря начала | Новая сессия + резюме |
| Дублировать rules в промпте | Двойные токены | Вынести в `.cursor/rules/` |

---

## Практика

1. Откройте Agent и попросите объяснить файл через `@` — один файл.
2. Повторите с `@folder` на `node_modules` (если не исключено) — заметьте предупреждение/шум.
3. Составьте резюме из 5 предложений для **новой** сессии по незавершённой задаче.

---

## Связь с разделом 03

Структура промпта formalizes то, как вы подаёте контекст — [структура промпта](../03-prompts/struktura-promta.md).

---

## Самопроверка

1. Чем токен отличается от символа?
2. Что происходит при переполнении контекстного окна?
3. Когда `@folder` оправдан, а когда нет?
4. Зачем начинать новую сессию с резюме?

## Дальше

→ [Итерации и feedback](iteracii-i-feedback.md)
