Семён, руководитель лаборатории опытно-конструкторских разработок компании «Натшелл» (системы медицинских ускорителей и протонная терапия), опубликовал на Habr разбор типичных ошибок при работе с языковыми моделями в программировании. Материал адресован прежде всего начинающим разработчикам, которые переносят на модель человеческие ожидания — и получают непредсказуемые результаты.

Первая и самая распространённая ловушка — когнитивная нагрузка. Языковая модель не устаёт, поэтому без ограничений она генерирует код с широкими горизонтальными связями между сущностями. Для машины это норма, для человека, который будет этот код читать и поддерживать, — источник стресса, сопоставимого с разбором запущенного легаси. Автор формулирует первое правило: код, созданный совместно с моделью, должен быть в первую очередь линейным и понятным, даже ценой многословности — и только потом лаконичным.

Второе правило касается длины промптов. Существует устойчивый соблазн задать модели исчерпывающий стартовый промпт на несколько тысяч строк, жёстко зафиксировав все требования. Это не работает из-за эффекта «lost in the middle»: модели хорошо извлекают информацию из начала и конца сообщения, но инструкции в середине теряют вес — внимание размывается по всем токенам. Опыт команды «Натшелл», работающей в том числе с локально запускаемыми моделями, подтверждает: расширение списка правил не улучшает генерацию, а порой даёт обратный эффект. Один запрос — одна конкретная задача.

Эффект «lost in the middle»: инструкции в середине длинного промпта теряют вес, поэтому «простыни» правил снижают качество генерации.

Третье правило связано с вероятностной природой языковых моделей. LLM — стохастическая система: один и тот же запрос не обязан давать одинаковый код. Это делает рефакторинг с помощью модели потенциально бесконечным циклом, если не фиксировать явные интерфейсы, структуры данных и ограничения на логику генерации. Отдельная проблема — самодельные фреймворки и нестандартные библиотеки: модель воспринимает их как сопротивление и стремится переписать в пользу типовых решений, заложенных при обучении. Автор рекомендует использовать стандартные паттерны и явно специфицировать логику, а не рассчитывать на то, что модель «поймёт» нестандартный контекст.

Четвёртый тезис — о границах компетенции модели. Текстовая LLM лишена мультимодального опыта: она не видела изображений, не слышала звуков, не имеет пространственных представлений. Инженер по фотографии платы поймёт, что разъём не встанет в корпус. Текстовая модель без соответствующих обучающих данных этого не поймёт — и заполнит пробел правдоподобным, но неверным ответом. Попытка объяснить ей задачу через текстовые абстракции автор сравнивает с попыткой передать слепому восприятие цвета через вкус.

В совокупности эти наблюдения описывают одну базовую установку: языковая модель — не второй программист в команде, а инструмент с конкретными техническими характеристиками. Эффективная работа с ней требует понимания этих характеристик — эффекта потери середины промпта, стохастичности вывода, тяготения к типовым паттернам — и проектирования рабочего процесса с их учётом.