Искусственный интеллект в Data Science: инструменты и границы возможностей

Искусственный интеллект в Data Science: инструменты и границы возможностей

Нейросети ещё не стали обязательным требованием у работодателей, но многие дата-сайентисты уже активно используют LLM: генерируют код в Cursor, пишут SQL-запросы в DataGrip и обращаются за советом к ChatGPT.

Генерация и сопровождение кода

Одно из самых популярных применений ИИ — работа с кодом: автодополнение, генерация фрагментов, объяснение логики, рефакторинг и создание тестов. Нейросеть может объяснить непонятный участок кода, перевести его на другой язык, продолжить строку или сгенерировать docstring.

Мой основной инструмент — GigaCode, ассистент на базе GigaChat. Он похож на GitHub Copilot: помогает дописывать код и ускорять рутину. Однако Copilot глубже интегрируется в IDE, а GigaCode требует отдельной настройки.

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

При работе с SQL полезны как универсальные ассистенты, так и специализированные решения. Например, DataGrip помогает генерировать и оптимизировать запросы, анализировать execution plan и рефакторить код. Однако важно понимать логику построения запроса — ИИ часто пропускает важные детали.

Написание документации

ИИ эффективно генерирует тексты: создаёт README, docstrings и краткие сводки переписок или требований от заказчика — удобно для прикрепления к тикетам в CRM.

Создание тест-кейсов

Нейросети помогают выявлять крайние и неочевидные сценарии, которые человек может упустить. Это полезно при разработке моделей, пайплайнов или сервисов — ИИ предлагает больше условий и обнаруживает скрытые ошибки.

Написание простых сервисов

Современные LLM — ChatGPT, Claude, GigaChat, Qwen Chat, DeepSeek — подходят для прототипирования простых сервисов. Особенно полезны, если у дата-сайентиста недостаточно практического опыта в разработке.

Использование агентов

Агентные пайплайны позволяют LLM не просто отвечать, а выбирать действия, вызывать инструменты и передавать результат дальше. Такие системы часто строятся с помощью LangChain и LangGraph и превращаются в специализированных ИИ-ассистентов.

Например, агент может определить тип задачи и направить запрос в нужный модуль или ноду. Чаще всего они используются для маршрутизации — автоматического выбора следующего шага после анализа запроса.

Не учитывают весь контекст

ИИ хорошо справляется с локальными задачами — описанием функции или оптимизацией фрагмента кода. Но он не видит всей системы: не знает всех требований заказчика, архитектурных ограничений или нефункциональных условий.

Предлагают нестандартные решения (не всегда лучшие)

Нейросети опираются на паттерны из обучающих данных. Иногда это приводит к рабочим, но нестандартным решениям, которые сложно поддерживать.

Например, Copilot однажды предложил использовать else после цикла в Python. Конструкция технически верна, но редко используется и плохо читается — в продакшене её обычно избегают.

Разработчик должен быть готов к таким вариантам и либо заменить их на более привычные, либо понять, почему модель выбрала именно такой путь.

Выдают ошибки

Частая проблема — код работает, но логически неверен. ИИ может ошибиться в условии if, неправильно обработать API-ответ или вызвать неожиданное исключение.

Иногда модель фокусируется на части задачи, игнорируя общие условия. Например, добивается высокой метрики, но допускает target leakage — дублирование таргета в признаках. На тестах всё выглядит хорошо, но на проде модель мгновенно падает.

Вольно обращаются с источниками

В Data Science критично использовать достоверные данные. Однако ИИ может ссылаться на нерепрезентативные или недостоверные источники — например, выдавать фрагмент интернет-статьи как общий вывод исследования.

Копят недочёты

ИИ может сгенерировать рабочий, но неоптимальный код. Если разработчик не замечает недочёта, такой код может тиражироваться в команде и стать локальным «стандартом» — как обучение стажёра на плохих примерах.

Декомпозировать задачи

Чем проще запрос, тем точнее отвечает ИИ. Многоэтапные задачи повышают риск ошибок. Лучше разбивать их на мелкие, однозначные шаги.

Челленджить ИИ в работе с данными

Не стоит принимать выводы ИИ на веру. Полезно задавать вопросы: Почему ты так думаешь? Откуда это взято? Зачем это нужно?

Математические и статистические методы проверки результатов по-прежнему необходимы — от них нельзя отказываться.

Проверять результаты одной LLM с помощью другой

Разные модели могут по-разному оценить один и тот же код. Использование второй LLM помогает избежать эффекта «стажёра», который считает, что раз код работает — значит, всё в порядке.

Валидировать результат вручную

Особенно важно проверять результат живым разработчиком в критичных задачах — безопасности, доступах, криптографии. Любая ошибка может привести к уязвимостям.

Также разработчик должен понимать каждую строку сгенерированного кода: будет ли он работать на другой машине, не использует ли специфические библиотеки, не содержит ли скрытых багов.

Даже если LLM в 70% случаев работает корректно, это не гарантирует, что она не ошибётся в критичный момент. Пока ручная валидация обязательна.

Проверять воспроизводимость результата в чистом окружении

Любой код нужно тестировать в разных средах. Если в проекте нет requirements.txt, тестов или конфигурации, есть риск, что код не запустится вне исходной машины.

ИИ особенно подвержен этой проблеме — без чётких инструкций он может сгенерировать непереносимое решение.

Задавать ограничения

Ключевой навык — не только писать хорошие промпты, но и ограничивать результат. Например, в LangChain можно использовать системный промпт с дополнительным «мини-промптом», повышающим точность ответа.

  • создаётся промпт и параметры,
  • они отправляются в LLM,
  • результат обрабатывается парсером, задающим фиксированную структуру.

Это делает ответы стабильнее. Альтернатива — with_structured_output() в LangChain, где схема результата описывается заранее (через Pydantic или JSON Schema). Тогда модель возвращает не текст, а структурированный объект — это снижает ошибки и упрощает интеграцию в код.

Почему джунам лучше выполнять задачи самостоятельно

Пока нет вакансий, где использование ИИ — обязательное требование. Это полезный навык, но войти в Data Science можно и без него.

ИИ может замедлить обучение джунов. Представим двух начинающих специалистов:

  • Первый изучает документацию, ищет решения на Stack Overflow, консультируется с мидлом. Через неделю сдаёт рабочий и частично проверенный код.
  • Второй использует ИИ и сдаёт задачу за два дня. Но код не соответствует ТЗ, а сам джун плохо понимает, что написал. Задачу приходится переделывать — итоговый срок оказывается больше.

Это утрированно, но суть ясна: ИИ ускоряет одни процессы, но может замедлить другие. Использовать его можно и нужно, но только с пониманием принципов генерации и готовностью проверять результат.

Итог: инструменты вроде Copilot ускоряют работу, но не заменяют мышление. ИИ — помощник для простых задач, требующий чёткого направления и ручной проверки. Ответственность за результат всегда остаётся на человеке.

Читать оригинал