Мнения 27 апреля 2025

Управление рисками ИИ в программной инженерии

Далее

Хотя искусственный интеллект уже активно используется в разработке программного обеспечения, его внедрение связано с рядом специфических рисков — от генерации уязвимого кода до некорректных архитектурных решений. Насколько ИИ помогает программистам, какие ошибки он допускает и как ими управлять, рассказал Николай Бушков, архитектор R&D-центра «Т-Банка».

Как искусственный интеллект меняет разработку ПО

В 2024 году Нобелевская премия по физике была присуждена Джону Хопфилду и Джеффри Хинтону за их вклад в развитие искусственных нейронных сетей. Их работы, начатые еще в 1970–1980-х годах, получили широкое применение благодаря стремительному развитию технологий и появлению таких инструментов, как ChatGPT.

ИИ-методы можно условно разделить на две группы: детерминированные (классическое программирование) и вероятностные (машинное обучение). В свою очередь, машинное обучение делится на неглубокое (работа с таблицами и структурированными данными) и глубокое (нейросети, анализирующие неструктурированные данные, такие, как тексты, изображения, звук и видео). Глубокие нейросети могут быть дискриминативными (классификация данных, например, различение котов и собак на фото) и генеративными (создание новых данных — текстов, картинок, кода, музыки).

ИИ-модели также различаются по типам данных, с которыми они работают. Большие языковые модели (LLM) в основном обрабатывают текст, но все чаще используются мультимодальные модели (LMM), способные анализировать и комбинировать текст, изображения, звук и видео.

С развитием генеративных моделей ИИ стал не только инструментом для анализа данных, но и полноценным участником процессов разработки ПО.

Основные риски и ошибки ИИ в программной инженерии

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

ИИ-риски можно систематизировать по этапам жизненного цикла программного обеспечения (SDLC). Этот подход помогает определить наиболее критичные моменты, где могут возникать ошибки и угрозы безопасности.

Риски на разных этапах SDLC

Сопровождение и эксплуатация

  1. ИИ может выдавать пользователю недостоверную информацию (галлюцинации).
  2. Недобросовестные пользователи могут манипулировать системой, вызывая неожиданные результаты (например, SQL-инъекции).

Внедрение

  1. Генеративные ИИ-модели требуют значительных вычислительных ресурсов, что может привести к неоправданным затратам.
  2. Ошибки в конфигурациях, предложенных ИИ, могут ухудшить производительность или создать уязвимости в системе.

Реализация

  1. ИИ-ассистенты разработчиков могут приводить к созданию кода с уязвимостями. Исследования показывают, что при использовании ИИ-разработчики становятся увереннее в коде, даже если он менее безопасен.
  2. Генерация автотестов на основе ИИ может закреплять неправильное поведение программы и затруднять ее поддержку.

Разделение процессов разработки на этапы помогает лучше контролировать возможные риски. В SDLC выделяют несколько ключевых стадий:

  1. Анализ требований — необходимо учесть ограничения ИИ: контекст, специфику данных и возможные искажения.
  2. Проектирование архитектуры — нужно закладывать механизмы контроля генерации, интеграцию с классическими алгоритмами и адаптацию к изменениям модели.
  3. Разработка — ИИ-ассистенты могут ускорять работу, но требуют контроля, особенно с точки зрения безопасности кода.
  4. Тестирование — нужно уделять внимание не только функциональным, но и нефункциональным аспектам (например, защите от атак).
  5. Внедрение и сопровождение — модели необходимо регулярно обновлять и проверять на ошибки.

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

Исторически разделение ролей (бизнес-аналитик, системный аналитик, архитектор, разработчик) было обусловлено высокой стоимостью труда программистов: их старались максимально загрузить кодингом, сократив их участие в коммуникациях. Однако гибкие методологии и ускорение процессов разработки изменили ситуацию: фактор «испорченного телефона» между командами стал замедлять работу, а не ускорять ее.

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

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

Именно в этом заключается один из ключевых ИИ-специфических рисков на стадиях анализа требований и проектирования.

Кроме того, у ИИ ограничено контекстное понимание запроса. Разработчик, помимо формальных спецификаций, опирается на неявные знания о проекте, которые помогают ему принимать решения. В отличие от него, языковая модель ориентируется только на информацию из запроса. Дополнительно на процесс влияет ограничение длины контекста — современные модели могут учитывать десятки тысяч токенов, но даже этого бывает недостаточно для сложных задач. Все это делает генеративный ИИ больше вспомогательным инструментом, чем самостоятельным участником процесса проектирования.

Тренды

Бурный рост популярности ChatGPT обусловлен не только маркетинговыми усилиями, но и реальным технологическим прорывом в развитии генеративных нейросетей. За последние два с половиной года качество моделей заметно выросло благодаря увеличению объемов данных и времени предобучения. Однако этот этап развития технологий уже близится к завершению, дополняя другое направление — улучшение качества за счет увеличения вычислительных ресурсов, выделяемых на генерацию каждого отдельного ответа. Это так называемые reasoning-модели, способные к более сложным рассуждениям. Параллельно продолжается работа над мелкими алгоритмическими улучшениями, которые постепенно повышают точность и надежность работы языковых моделей.

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

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

Одним из таких направлений является агентный (и мультиагентный) подход. В рамках LLM/LMM уже достаточно успешно смоделирована работа мозга на уровне нейросети, а теперь фокус смещается к имитации деятельности человека в целом. В агентном подходе нейросеть получает «сенсоры» (способы восприятия информации, аналогичные зрению и слуху) и «исполнительные механизмы» (инструменты для взаимодействия с внешним миром, подобно рукам и голосу). Биологическая эволюция ограничила человека лишь определенным набором таких механизмов, но именно он оказался универсальным для взаимодействия между людьми, что и позволяет моделировать сложные коллективные системы на основе отдельных агентов. Так же, как команды, сообщества и предприятия состоят из людей, мультиагентные системы могут строиться из взаимодействующих между собой ИИ-агентов.

В программной инженерии «сенсоры» и «исполнительные механизмы» ИИ пока что не так универсальны. Например, они могут читать и записывать файлы, работать с API или запрашивать помощь у человека. Но постепенно их возможности расширяются: агенты уже осваивают командные оболочки, интерпретаторы Python и даже взаимодействие с графическим интерфейсом компьютера. Хотя мультиагентные системы в разработке ПО пока находятся на ранних стадиях, их эволюция будет напоминать усложнение человеческих коллективов: по мере роста сложности задач в них будет усиливаться специализация ролей.

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

Итоги

За последние пару лет ИИ стал гораздо чаще использоваться в программной инженерии. Это связано не только с ростом его возможностей, но и с очевидными перспективами автоматизации дорогостоящих задач в IT. Многие исследования подтверждают, что развитие ИИ-систем оказывает прямое влияние на экономику и перераспределение рабочих процессов. Конечно, для их внедрения все еще требуется квалифицированный IT-персонал, но в целом эта перестройка не выглядит слишком сложной: современные ИИ-системы имитируют человеческую деятельность на разных уровнях — от нейросетевого до мультиагентного.

Чтобы эффективно управлять ИИ-специфическими рисками в разработке ПО, в первую очередь нужно уметь управлять рисками в IT в целом. Большинство особенностей ИИ, вызывающих сложности сейчас, могут со временем измениться, так как технологии продолжают развиваться. Однако предложенные в статье примеры и методики позволяют выработать систематический подход, который поможет адаптировать управление рисками под реальные задачи бизнеса. У каждой компании свой уровень зрелости в работе с ИИ, и понимание этого фактора становится важной частью стратегии его внедрения.

Обложка: downloaded from Freepik