見出し画像

ソフトウェア開発エージェントに見る問題解決のフレームワーク

自律ソフトウェア開発エージェントの最近の研究を見ながら、問題解決のフレームワークのヒントを考えます。


自律ソフトウェア開発エージェントの進展

エージェントだけで人間を介在せずにソフトウェア開発をする研究が進んでいます。2023年10月にHumanEvalに代わるソフトウェア開発の難問としてSWE-benchがプリンストン大学のチームから提案されました。これをベンチマークにいろいろなアプローチが提案されています。
ベースとなる大規模言語モデルは重要だがそれだけではないことがわかってきています。
関係があるかもしれないとして大量の情報を入力に追加することは精度に悪影響を与えます。
また、ソフトウェア問題を解く上で、複数の段階にそれぞれ適切な問題解決フレームワーク(ReActなど)を与えることも研究されています。

問題の構造

問題の構造は極端な場合、次の2つです:

  • よい問題構造 (well-structured problems):アプローチが一つで定量的に比較評価できチートしにくい問題

  • 悪い問題構造 (Ill-structured problems):多数のアプローチがあり、定量的な比較評価が難しくチートしやすい問題

チート(詐欺)しやすい、とは、例えば、Amazonで本をたくさん売る、という問題に対して、特定の日に大幅な割引販売をすればその日に限って大量の本を売ることはできるが売り上げの増大には結びつかない、というようなものです。事前に問題をチートできないように定義するのは難しく、実際にチートで問題が解かれたあとで問題を修正するということになります。

AlphaCodiumの方法

悪い問題構造の問題は数多くあり、実際に問題を解いてみないとわからないことが多いです。複雑なソフトウェア問題もそのひとつです。
AlphaCodiumは試験に基づき、複数段階を踏み、繰り返しを用いてコードを生成するために提案されているフレームワークです([arxiv] [ai-scholor] )。
問題を解決するために次の2つの段階からなります:

  • 事前段階

  • 反復段階

事前段階では次のようなステップを実行します:

  1. 問題文から目標、入力、出力、ルール、制約などを抽出し、AIによって箇条書き

  2. 問題文の理解に基づき、複数の解答コードの候補を生成

  3. 生成された解答コードをランク付けし、優れたものを選択

  4. 選択された解答コードに対して検証テストを実行

  5. 検証テストの結果を分析し、追加のテストケースを作成

反復段階では次のようなステップを実行します:

  1. 前処理フェーズで選択された解答コードを初期コードとする

  2. 初期コードを「公開テスト」でテスト

  3. テスト結果を分析し、コードを修正・改善

  4. 改善したコードを再度テストし、結果が向上したらそのコードを採用

  5. 「AIが生成した追加テスト」を使ってさらに反復改善

  6. 改善したコードを再度テストし、結果が向上したらそのコードを採用

これはソフトウェア開発の例ですが、以下のような一般的なフレームワークをソフトウェア開発に応用していると考えられます:

  • 前処理段階:反復段階の準備をしガードレールや収束の条件を定義する

  • 反復段階:前処理段階の情報を利用し回答を生成しながら反復改善する

プロンプトエンジニアリングからフレームワークへ

従来からプロンプトエンジニアリング ([microsoft]) でも

  • 繰り返す(対話)

などとしていました。
足りない情報があればユーザに聞き返させるとか、「もっと違う方法を教えて」を使う、など断片的なプロンプトエンジニアリング手法としても使われていました。
悪い構造の問題を解くためには探索的な試行錯誤が必要になります。問題の種類、あるいはソフトウェア開発などの領域に特化した領域で、問題を解くために有益なフレームワークをプロンプトエンジニアリングから問題解決のフレームワークとして取り出していくことは有効です。

むすび

生成AIの精度改善には次の3つの階層があります ([ai300lab]):

  • 問題解決フレームワークの改善

  • プロンプトエンジニアリングの改善

  • 大規模言語モデル(基盤モデル)改善

プロンプトエンジニアリングの改善の中から体系的に問題解決フレームワークへとまとめられつつあると感じています。
3つの階層それぞれの進化が三位一体となって生成AIの問題解決への有効性を高めていくと思います。

参考文献


この記事が気に入ったらサポートをしてみませんか?