Добро пожаловать в четвертый урок курса по продвинутому промптингу в Claude Code. Сегодня мы сосредоточимся на одной из самых критических составляющих эффективной разработки с ИИ — управлении контекстом и навигации по файловой структуре. В отличие от обычных чат-ботов, Claude Code имеет прямой доступ к вашей файловой системе, что накладывает особую ответственность на то, как именно вы просите его анализировать код. Неправильный запрос может привести к «засорению» контекстного окна ненужными данными, что снизит точность ответов и увеличит расход токенов.
Контекстное окно — это ограниченный объем памяти, который модель может использовать для обработки текущего запроса. Когда вы работаете с крупным проектом, вы не можете просто сказать «проанализируй всё приложение». Вместо этого необходимо использовать стратегии точечного предоставления информации. Эффективный промптинг в Claude Code подразумевает итеративный подход: сначала мы просим модель изучить структуру проекта, затем выбрать конкретные файлы, и только после этого приступать к модификации кода.
Одним из самых мощных инструментов управления контекстом является использование команды /ls или явное указание путей к файлам. Вместо того чтобы позволять модели гадать, где находится логика обработки данных, четко определите границы. Например, если вам нужно изменить API-эндпоинт, укажите путь к контроллеру и соответствующей схеме данных. Это минимизирует вероятность того, что Claude предложит решение, которое ломает зависимости в других частях системы, о которых он «забыл» из-за переполнения контекста.
Рассмотрим пример того, как правильно инициировать анализ структуры проекта перед внесением изменений. Вместо общего запроса «Исправь баг в авторизации», используйте структурированный подход.
# Запрос к Claude Code для анализа структуры
Claude, изучи структуру папки /src/auth и список файлов в /src/middleware.
После этого найди файл, который отвечает за проверку JWT-токенов,
и выведи его содержимое вместе с определением интерфейса User.
В данном примере мы сначала ограничиваем область поиска конкретными директориями (/src/auth и /src/middleware), что предотвращает сканирование всего проекта. Затем мы даем четкую инструкцию: найти конкретный функционал (проверка JWT) и извлечь не только логику, но и связанные с ней типы данных (интерфейс User). Это гарантирует, что модель будет видеть полную картину типов перед тем, как предложивать правку.
Такой подход был выбран потому, что прямое указание путей и иерархическое сужение поиска работают значительно стабильнее, чем полагаться на встроенный поиск по ключевым словам. Когда проект разрастается до сотен файлов, поиск по словам может вернуть десятки нерелевантных совпадений, что быстро заполнит контекстное окно «шумом» и приведет к галлюцинациям или потере важных деталей реализации.
Следующим уровнем является работа с многофайловыми изменениями. Когда задача требует правки в трех разных файлах, важно промптить Claude таким образом, чтобы он сначала составил план изменений (Plan of Action), а затем применил их последовательно. Это позволяет вам проконтролировать архитектурную целостность до того, как код будет фактически перезаписан.
// Пример промпта для комплексного рефакторинга
Claude, мне нужно перенести логику валидации из UserController.ts в отдельный сервис ValidationService.ts.
1. Проанализируй UserController.ts и выдели все методы валидации.
2. Создай новый файл /src/services/ValidationService.ts с этими методами.
3. Обнови UserController.ts, чтобы он использовал новый сервис через Dependency Injection.
4. Проверь, не нарушены ли импорты в /src/app.ts.
Этот код (промпт) реализует пошаговый алгоритм: анализ -> создание нового компонента -> интеграция -> проверка зависимостей. Каждая строка промпта соответствует отдельному этапу жизненного цикла разработки. Мы не просто просим «перенести код», а задаем строгую последовательность действий, что заставляет модель фиксировать промежуточные состояния и не пропускать важные шаги, такие как обновление импортов в главном файле приложения.
Выбор пошагового планирования вместо одного общего запроса обоснован тем, что LLM лучше справляются с простыми подзадачами, чем с одной сложной. Разделяя задачу на этапы, вы создаете «точки контроля». Если на втором этапе модель создаст сервис с ошибкой в именовании методов, вы сможете остановить процесс до того, как она начнет массово менять вызовы в контроллере, что сэкономило бы вам время на ручное исправление ошибок.
Распространенная ошибка новичков — использование промптов вроде «Исправь все ошибки в этом проекте» или «Оптимизируй весь код в папке /src». Это приводит к двум проблемам: во-первых, модель может начать менять вещи, которые работают правильно, но кажутся ей «некрасивыми», и во-вторых, она неизбежно упрется в лимит контекста, начав забывать начало файла к моменту достижения его конца. Чтобы избежать этого, всегда ограничивайте область действия конкретными файлами или небольшими группами функций.
В реальных production-проектах управление контекстом используется при интеграции новых фич в огромные монолиты. Например, в крупных репозиториях (вроде ядра VS Code или React) разработчики используют так называемые «контекстные карты» — небольшие текстовые файлы, описывающие зависимости модулей. При работе с Claude Code вы можете создать аналогичный временный файл context_map.md, куда выписать основные связи вашего модуля, и просить модель всегда обращаться к нему перед началом работы, чтобы она не тратила токены на повторное изучение всей структуры.
Помните, что Claude Code — это ваш напарник, а не магический оракул. Чем точнее вы укажете «карту местности» (файловую структуру), тем меньше вероятность того, что он заведет вас в тупик. Эффективное управление контекстом превращает процесс из «угадывания» в предсказуемую инженерную задачу.
Попробуйте следующее задание: создайте в своем тестовом проекте две папки /api и /models. В каждой из них создайте по два файла с простыми взаимосвязями (например, модель User и контроллер User). Затем составьте промпт для Claude Code, который заставит его: 1) проанализировать структуру этих папок, 2) найти связь между моделью и контроллером, и 3) добавить новое поле email в модель и соответствующую проверку в контроллер, используя пошаговый план.
Register to answer these questions interactively and have your exam graded.