Mistral перевела с агентами 40 000 строк Fortran 77 на C++: без человека не вышло
Mistral переписала на C++ часть симулятора нефтегазового пласта для европейского энергетического оператора. Лучше всего сработала схема, в которой агентами управляет человек: полностью автономные агенты либо копировали Fortran, либо застревали.
Mistral перевела 40 000 строк на Fortran 77 в C++ для европейской энергетической компании. Это симулятор пласта, то есть подземного месторождения, где много физики. Тестов у программы не было, а документация лежала в старых PDF и комментариях к коду. Инженеры Mistral Карло Антонио Патти и Расул Алакбарли описали, как выполняли проект и что не сработало.
Перевести синтаксис с языка на язык, по их словам, модели уже умеют. Сложность в другом: Fortran 77 появился в 1977 году, в нём нет модулей и структур. Данные хранятся в общих глобальных блоках, а тип переменной определяет первая буква её имени. Поэтому новый код на C++ построчно не сверишь с исходным.
Сначала команда сделала «стенд сверки». Агенты вставляли в код на Fortran выгрузку промежуточных значений, а тесты на C++ проверяли, что перенесённый модуль выдаёт те же числа. Документацию собирали иначе. Программу разложили в дерево вызовов, и больше сотни агентов в Mistral Vibe описали его снизу вверх. Каждый агент открывал запрос на изменение, а отдельный агент-рецензент по расписанию их проверял.
Первая попытка, где каждый агент неделю самостоятельно переводил свою подпрограмму, дала рабочий код. Но, по словам авторов, это был Fortran, перепечатанный синтаксисом C++. Во второй попытке над каждым модулем работала команда агентов: планировщик, программист, тестировщик и рецензент. Код стал лучше, но на сложных ошибках агенты застревали, а помочь им было некому.
В итоге остановились на середине. Модули меньше 10 000 строк проходят цепочку агентов, а человек снимает их с мёртвой точки и сам принимает правки. Перенесено пока ядро: 40 000 из 300 000 строк. Авторы признают, что условия были удобными: код был самодостаточным и запускался. Без рабочей исходной версии или с физикой, которая нигде не описана, задача была бы тяжелее.