Mistral AI レガシーコードの近代化

Mistral AIは、欧州のエネルギー事業者向けに、物理計算集約型の貯留層シミュレーターの40,000行のコードをFortran 77からC++へ移行することに成功しました。このプロジェクトは、複雑なレガシーシステムの近代化には、単なる構文の翻訳を超えたアーキテクチャのリファクタリングが必要であり、数値検証と構造化されたhuman-in-the-loop(人間が介在する)エージェントワークフローによってそれが支えられることを示しています。

数値的な等価性を検証するための確立

移行後のC++コードベースがレガシーなFortran 77システムと一致することを確認するため、Mistralは移行を開始する前にパリティハーネス(等価性検証用具)を実装しました。手続き型のFortranとオブジェクト指向のC++の間には構造的な違いがあるため、行単位での対応は困難ですが、出力の数値的な等価性が、正当性を証明する唯一の信頼できる手段となります。

パリティハーネスは以下の要素で構成されています:

  • State Export Subroutines: Fortranのコードベースに追加され、状態のスナップショットをダンプします。
  • C++ Test Framework: これらのチェックポイントをロードし、移行されたモジュールの出力を検証するように設計されています。
  • Skill.md Files: AIエージェントがハーネスを正しく利用できるようにガイドするために使用されます。

Fortranコード内に特定の変数(例:RHOG)をエクスポートする行を挿入することで、チームはそれらの値を参照用チェックポイントとして使用し、移行されたC++モジュールを検証することができました。

エージェントツリーによるレガシーコードのドキュメント化

レガシーなコードベースは、古いPDFやインラインコメントに断片化されたドキュメントが保存されていることがよくあります。Mistralは、手続き型のFortranプログラムを単一の呼び出し元・呼び出し先ツリー(caller-callee tree)として扱うことで、この問題に対処しました。

カスタムパーサーを使用してツリーを生成し、MistralはVibe CLIを介して100以上のエージェントを配備しました。これらのエージェントは、Mistral OCRとドキュメントライブラリを使用して、関連するPDFを取り込み、コードベースをドキュメント化しました。プロセスはボトムアップ方式を採用しました:エージェントはツリーの末端(leaves)から開始し、上に向かって作業を進め、各ノードがサブエージェントを生成してコードをドキュメント化し、プルリクエスト(PR)を作成します。cronスケジュールで実行されるレビュアーエージェントが、これらのPRを監視し、必要に応じて修正タスクをスケジュールします。

移行のためのAIエージェントワークフローの進化

Mistralは、移行プロセスにおいて3つの異なる自律性のレベルをテストし、構造化された人間が介在するワークフローが、品質と効率の最適なバランスを提供することを見出したことが分かりました。

完全自律型翻訳

最初の試みでは、エージェントにサブルーチンを独立して翻訳する完全な自律性が与えられました。その結果、「C++の構文で書き直されたFortran」という状態になり、COMMONブロックがグローバル構造体になり、GOTOによる制御フローがそのまま残るなど、真のアーキテクチャの近代化には至りませんでした。

構造化されたエージェントチーム

2番目の試みでは、モジュールごとにエージェントのチーム(planner、coder、tester、およびcode quality reviewer)を利用しました。コードの品質は向上しましたが、エージェントは人間の介入なしでは複雑なバグに遭遇した際に頻繁に停滞しました。

Human-in-the-Loop 構造化ワークフロー

最終的に成功したアプローチは、人間がcoder、tester、およびreviewerエージェントのワークフローを運用することでした。コードベースは、独立したモジュール(Fortranの10,000行未満のサブツリー)に分割されました。各モジュールは以下の手順に従いました:

  1. Architecture Generation: ターゲットとなるC++のアーキテクチャを生成します。
  2. Engineering Review: 貯留層エンジニア(reservoir engineer)と共にアーキテクチャをレビューします。
  3. Task Queuing: 承認されたアーキテクチャをタスクキューに分割します。
  4. Implementation Loop: plan $\rightarrow$ implement $\rightarrow$ test $\rightarrow$ repeat というサブワークフローを実行します。
  5. Human Merge: 人間が結果として生成されたPRをレビューし、マージするまで変更を要求します。

レガシーシステムの近代化における主要原則

シミュレーターの300,000行のうち40,000行の移行に基づき、Mistral AIは大規模なレガシー移行において3つの核心的な原則を特定しました:

  1. パリティハーネスを優先する: 移行コードを書く前に検証システムを構築してください。数値的な一致は、完了を証明する最も説得力のある証拠となります。
  2. ドキュメント化を最初に行う: 移行の前に、エージェントを使用してドキュメントを整理・集約してください。読めないコードは移行できません。
  3. 構造化されたワークフローを実装する: 大規模なプロジェクトでは、人間によるレビューゲートを備えた構造化されたワークフローが、完全な自律性や純粋な手動作業の両方を上回るパフォーマンスを発明します。

Sources