Забудьте про промпты-учебники. Пора работать с контекстом
Вы знаете этот момент? Когда LLM уверенно генерирует код с методами, которых нет в вашем API. Или рассказывает о функциях, которые вырезали три версии назад. Или предлагает использовать библиотеку, которую вы заменили год назад.
Это не просто ошибки. Это системная проблема отсутствия контекста. Модель работает в вакууме, а вы платите за её фантазии.
В 2026 году галлюцинации LLM стоят проектам в среднем 15-20% времени разработки. Это не только исправление кода, но и доверие команды. Когда ассистент врет три раза подряд, его перестают слушать.
Я видел десятки проектов, где разработчики месяцами боролись с галлюцинациями через промпт-инженерию. Добавляли "пожалуйста, будь точным", "используй только документацию проекта", "не выдумывай". Результат? Ноль. Потому что проблема не в промптах, а в архитектуре работы с контекстом.
Вот три работающих способа, которые мы используем в production. Никакой магии, только инженерный подход.
Способ 1: Claude Projects — когда контекст становится частью модели
Anthropic в 2025 году сделала то, о чём все мечтали: превратили контекстное окно в персистентную базу знаний. Claude Projects — это не просто "загрузи файлы". Это архитектурный сдвиг.
1 Что это на самом деле?
Представьте Git-репозиторий, но для контекста LLM. Вы загружаете документацию, код, спецификации — всё, что нужно проекту. Модель Claude 3.7 (последняя на январь 2026) индексирует это и использует при каждом запросе. Не как RAG с поиском, а как расширенную память.
| Что дает | Что теряет |
|---|---|
| Консистентность ответов в рамках проекта | Требует ручной загрузки файлов |
| Нет дублирования контекста в каждом промпте | Только для Claude API |
| Автоматическое обновление индекса при изменении файлов | Ограничения на размер проекта (до 200к токенов) |
2 Как настроить за 10 минут
Откройте Claude Console, создайте новый проект. Не загружайте всё подряд — это главная ошибка новичков.
Что загружать обязательно:
- OpenAPI/Swagger спецификацию вашего API
- README.md и архитектурные решения проекта
- Ключевые интерфейсы и типы данных
- CHANGELOG.md (чтобы модель знала, что устарело)
Что игнорировать:
- node_modules и зависимости
- Сгенерированный код
- Логи и временные файлы
После загрузки тестируйте простым запросом: "Какие endpoints доступны в Users API?" Если модель отвечает по вашей документации, а не выдумывает — всё работает.
Способ 2: Cursor IDE + RAG — когда контекст живёт в редакторе
Если вы пишете код, а не общаетесь с чат-ботом, Cursor — ваш выбор. Их RAG-режим (Retrieval-Augmented Generation) в версии 0.32+ изменил правила игры.
Вот как это работает на практике: вы открываете файл, нажимаете Cmd+K, пишете "добавь валидацию email в эту форму". Cursor:
- Сканирует весь проект
- Находит существующие валидации
- Понимает стиль кода
- Генерирует код, который выглядит так, будто его писали вы
Не "похоже на ваш код". Не "в том же стиле". Это буквально ваш код, потому что модель видит контекст всего проекта.
1 Настройка, которая работает
Откройте настройки Cursor (Cmd+,), найдите "Autocomplete". Убедитесь, что включены:
- Enhanced Completions (использует RAG)
- Project Context Awareness
- Codebase Indexing
Теперь создайте файл .cursorrules в корне проекта. Вот наш стандартный шаблон:
# Правила проекта
## Стиль кода
- Используйте TypeScript с strict mode
- Имена переменных в camelCase
- Компоненты React в PascalCase
- Экспорты только именованные
## Архитектура
- Не используйте Redux, только Zustand
- API клиент в папке /lib/api
- Валидация через Zod
- Тесты в соседнем файле .test.ts
## Запрещено
- Не предлагать использование устаревших библиотек
- Не создавать новые папки без согласования
- Не изменять конфиги без необходимости
Этот файл Cursor читает перед каждым ответом. Эффект потрясающий: модель перестаёт предлагать устаревшие решения, потому что знает правила.
2 Что делать, когда RAG всё ещё галлюцинирует
Бывает. Даже с контекстом модель может выдать чушь. Вот алгоритм действий:
- Проверьте, проиндексирован ли проект (в статус-баре Cursor должна быть иконка индексации)
- Переиндексируйте вручную через Command Palette → "Reindex Project"
- Убедитесь, что .cursorrules в корне и читаем
- Используйте более конкретные запросы: не "сделай форму", а "добавь поле email с валидацией как в компоненте LoginForm"
Главный секрет: Cursor лучше всего работает, когда вы ссылаетесь на существующий код. "Сделай как в файле X" работает в 90% случаев. "Придумай что-то новое" — в 50%.
Совет из практики: создайте в проекте папку /examples с образцами кода. Когда нужно что-то сложное, скажите Cursor: "Посмотри пример в /examples/auth-flow и сделай похоже". Это снижает галлюцинации на 70%.
Способ 3: MCP-серверы — когда контекст становится инструментом
Model Context Protocol (MCP) — это новый стандарт от Anthropic, который меняет всё. Представьте: ваша LLM может подключаться к базам данных, API, файловой системе не через промпты, а через стандартизированные инструменты.
Вот почему это убивает галлюцинации: модель не "вспоминает" структуру вашей БД. Она запрашивает её через MCP-сервер и получает актуальную схему. Прямо сейчас. Без предположений.
1 Самые полезные MCP-серверы на 2026 год
| Сервер | Что делает | Эффект на галлюцинации |
|---|---|---|
| postgres-mcp | Подключается к PostgreSQL, показывает схемы, выполняет запросы | Модель не выдумывает названия таблиц и колонок |
| filesystem-mcp | Читает файлы, ищет по проекту, показывает содержимое | Модель работает с реальными файлами, а не памятью |
| github-mcp | Доступ к issues, PR, коду на GitHub | Модель видит актуальные задачи и историю изменений |
| brave-search-mcp | Поиск в интернете через Brave | Модель находит свежую документацию вместо устаревших знаний |
2 Как заставить это работать у вас
Установите Claude Desktop (последняя версия на январь 2026 поддерживает MCP). Добавьте конфигурацию в ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["@modelcontextprotocol/server-postgres"],
"env": {
"POSTGRES_URL": "postgresql://user:pass@localhost:5432/yourdb"
}
},
"filesystem": {
"command": "npx",
"args": ["@modelcontextprotocol/server-filesystem", "/path/to/your/project"]
}
}
}
Перезапустите Claude Desktop. Теперь в чате появится кнопка "Attachments" → "MCP Servers". Выберите postgres и filesystem.
Теперь можно спрашивать: "Какие таблицы есть в БД?" и модель подключится к PostgreSQL через MCP, получит реальный список и ответит точно. Никаких догадок. Никаких "возможно, у вас есть таблица users".
Ошибки, которые всё портят (даже с контекстом)
Я видел, как команды внедряли все три способа, но всё равно получали галлюцинации. Потому что делали эти ошибки:
1. Контекстный мусор
Загрузили в Claude Projects весь node_modules. Или все логи. Или сгенерированные файлы. Модель тонет в шуме и хватает случайные фрагменты. Правило: контекст должен быть curated. Как музейная экспозиция, а не склад.
2. Устаревшие правила
В .cursorrules написано "используем React 17", а в package.json уже React 19. Модель получает конфликтующие инструкции и выбирает случайную. Контекст должен быть синхронизирован с кодом. Автоматизируйте обновление правил при миграциях.
3. Слепая вера в MCP
Подключили MCP к продовой БД без ограничений. Модель может выполнить DROP TABLE. MCP-серверы должны работать через read-only реплики или с ограниченными правами. Это инструменты, не доверяйте им всё.
Если хотите глубже разобраться в механизмах галлюцинаций, почитайте как заставить нейросеть говорить правду. Там разбираются фундаментальные причины проблемы.
Что выбрать для вашего проекта?
Нет серебряной пули. Есть правильный инструмент для задачи:
- Claude Projects — если вы в основном общаетесь с LLM через чат (документация, планирование, анализ). Контекст статичен, но глубокий
- Cursor + RAG — если вы пишете код. Контекст динамический, обновляется с каждым изменением файла
- MCP-серверы — если вам нужен доступ к внешним системам (БД, API, файлы). Контекст живой, в реальном времени
В нашем production-окружении мы используем всё сразу. Claude Projects для архитектурных решений, Cursor для кодинга, MCP для работы с данными. Каждый инструмент закрывает свою часть проблемы галлюцинаций.
Важный нюанс: даже с идеальным контекстом LLM иногда галлюцинирует. Это особенность архитектуры, а не баг. Но с этими методами частота падает с "каждый второй ответ" до "раз в неделю". И эти редкие галлюцинации становятся очевидными — модель противоречит собственному контексту, что легко отловить.
Что будет дальше? (Спойлер: контекст умрёт)
Да, вы не ослышались. Всё, что я описал — временные костыли. Настоящее решение появится через год-два, когда модели научатся работать с контекстом как люди.
Представьте: вы приходите в новый проект. Не читаете всю документацию сразу. Ищете информацию по мере необходимости. Запоминаете важное, забываете неважное. Спрашиваете коллег, когда не уверены.
Будущие LLM будут делать так же. Вместо гигабайтов контекста — адаптивная память. Вместо RAG — умное извлечение. Вместо MCP-серверов — прямое взаимодействие с инструментами через стандартные протоколы.
А пока что используйте эти три способа. Они снизят галлюцинации на 80-90%. Этого достаточно, чтобы перестать бояться доверять LLM реальные задачи.
Последний совет: начните с самого болезненного места. Где LLM врет чаще всего? В документации? В коде? В работе с данными? Выберите один способ, внедрите, измерьте результат. Потом добавьте второй. Не пытайтесь сделать всё сразу — утонете в настройках.
И помните: идеального контекста не существует. Есть достаточно хороший. Ваша задача — найти этот уровень, где затраты на поддержание контекста меньше, чем потери от галлюцинаций. У нас это 2-3 часа в неделю на обновление правил и переиндексацию. Окупается за один сэкономленный день дебага.