Почему ИИ делает «не то»
четыре причины, и все четыре лечатся запросом
Что это
ИИ почти никогда не ошибается «сам по себе». Он точно выполняет то, что услышал, — просто услышал он не то, что ты имел в виду. Причин ровно четыре, и у каждой свой признак, по которому её видно.
Статья нужна, чтобы не чинить наугад. Получив не тот результат, сначала определи причину, и только потом переписывай запрос: разные причины лечатся по-разному, а лечение не от той причины добавляет к одной ошибке вторую.
Как выглядит в коде
Задача одна и та же: добавить в бот команду, которая показывает погоду. Ниже — четыре способа получить «не то».
Причина 1. Ты не сказал
Самая частая. Ты не назвал деталь, ИИ подставил свою.
Добавь команду погодыТы держал в голове: бот на aiogram, ключ в переменной окружения, ответ одной
строкой. ИИ ничего этого не слышал и подставил среднее по больнице: синхронный
requests, ключ строкой прямо в коде, ответ на пять строк с эмодзи.
Признак: код рабочий, но решение не твоё. Претензий к качеству нет, есть претензия к выбору.
Лечение: назвать то, что было в голове. Четыре части запроса — статья 3.2.
Причина 2. Он не видит
ИИ не знает твоего проекта, если ему не показать. В чате он не видит файлов вообще. Агент в терминале видит, но только то, что успел прочитать.
Сделай так же, как в соседнем хендлереПризнак: ИИ выдумывает имена функций, импортирует несуществующие модули, пишет в стиле, которого в проекте нет.
Лечение: показать. Вставить файл, назвать путь, дать команду прочитать. Если объяснять приходится каждый раз — завести файл контекста проекта (статья 3.14).
Причина 3. Он помнит другое
Модель обучена на коде, которого в интернете было больше. А больше всего там
кода для старых версий: aiogram 2 против aiogram 3, классовые компоненты
React против хуков, старый Navigator во Flutter.
Напиши хендлер на aiogramПризнак: код выглядит уверенно, но не запускается. В ошибках —
ImportError, AttributeError, «нет такого параметра». Или библиотека ругается,
что способ устарел.
Лечение: называть версию. Не aiogram, а aiogram 3. Не React,
а React 18, функциональные компоненты, хуки.
Причина 4. Он услышал буквально
ИИ сделал ровно то, о чём просили. Проблема в том, что просили не то.
Убери эту ошибкуОшибка исчезнет. Скорее всего, её завернут в try/except и подавят — формально
просьба выполнена. Разница между «убрать ошибку» и «починить причину» для тебя
очевидна, для ИИ — нет.
Признак: задача закрыта, симптом ушёл, а проблема осталась. Или ушла вместе с нужным поведением.
Лечение: формулировать цель, а не действие. Не «убери ошибку», а «сделай так,
чтобы ошибка сервера обрабатывалась в fetch_weather».
Как сказать ИИ
Сводная таблица — по ней причина определяется за несколько секунд.
| Что видишь | Причина | Что делать |
|---|---|---|
| Код рабочий, но решение не твоё | ты не сказал | назвать подробности |
| Выдуманные имена, чужой стиль | он не видит | показать файлы |
Не запускается, ImportError | помнит другое | назвать версию |
| Симптом ушёл, проблема осталась | услышал буквально | назвать цель, не действие |
Когда причина непонятна, спроси у самого ИИ — он отвечает на это честно:
Прежде чем править: на какие предположения ты опирался,
когда писал этот код? Что из этого я тебе не говорил?На что смотреть
Не чини причину 1 средствами причины 3. Типичная сцена: получил не тот результат, начинаешь дописывать в запрос всё больше подробностей, а код всё так же не запускается — потому что дело было в версии, а не в подробностях.
Одна задача — одна причина за раз. Переписав запрос, меняй что-то одно. Иначе непонятно, что помогло, и в следующий раз придётся гадать заново.
«Он тупой» — не причина. Это ощущение возникает на причине 4, когда ИИ буквально выполнил просьбу. Проверь, что ты просил, а не что имел в виду.
Шпаргалка
Четыре причины: не сказал · не видит · помнит другое · услышал буквально.
Сначала определи причину, потом переписывай запрос.
Версию называй всегда: подробностями эту причину не вылечить.
Формулируй цель, а не действие.
Непонятно почему — спроси, на какие предположения он опирался.