CODENS: Transforming Code Changes into Living, Accessible, and Queryable Documentation
CODENSは、プルリクエストを、型付けされたソフトウェア知識グラフを漸進的に構築することで生きたクエリ可能なドキュメントへと変換するシステムであり、プロダクション環境のRuby on Railsプロジェクトにおける評価によって実証されている通り、エージェントによるリポジトリレベルの質問回答を可能にします。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
あなたは、絶えず書き換えられ続けている巨大で古めかしい図書館を歩いているところだと想像してください。新しい章が追加されたり、余白にメモが書き込まれたり、ページが破り取られて別のものに置き換えられたりするたびに、物語は変化します。コンピュータ・ソフトウェアの世界では、この図書館は「コードベース」であり、そのメモは「プルリクエスト」です。これは、開発者が変更を提案するために使用するデジタルなチケットです。問題は、これらの変更の混乱の中で、ソフトウェアがどのように機能するかという「物語」(ドキュメンテーション)がしばしば失われてしまうことです。開発者は、指示書が数千ものファイルや古いチャットログの中に散らばっているため、物事がどのように組み合わさっているのかを推測せざるを得なくなります。
これを解決するために、科学者たちは「知識グラフ」を構築し始めました。これらを単なる事実のリストとしてではなく、すべてのコードの断片が「都市」であり、それらの間のつながりが「道路」であるような、巨大で生きた地図と考えてください。ある都市を変更すると、地図はその都市へと続く道路を自動的に更新します。もう一つの重要な概念は「検索拡張生成(RAG)」です。これは、超スマートな司書に、単に推測させるのではなく、テキストの中から真実を見つけ出すために、特定の書籍を読んでから質問に答えてもらうようなものです。研究者たちが問いかけている大きな疑問は、「現在の図書館の姿を示すだけでなく、これまでに行われたあらゆる変更を記憶し、コード更新の歴史を検索可能な生きたガイドへと変えることができる地図を作れるだろうか?」ということです。
そこで、まさにそれを実現するために設計された新しいシステム、CODENSが登場します。CODENSを、Ruby on Railsのウェブプラットフォームのようなソフトウェア・プロジェクトを見守る、魔法のように高度に整理された記録保管係だと想像してください。CODENSは、単に最終バージョンのコードを読むのではなく、プロジェクトの歴史という「映画」を監視します。まず、プロジェクト全体をスキャンしてスケルトン(骨組み)となる地図を構築し、フレームワークの標準的なルールに基づいて、1,739もの異なる「部屋」(コントローラー、モデル、ビューなど)を特定します。
そして、魔法が起こります。CODENSは、建物の建設過程をタイムラプス動画で見るかのように、プロジェクトの履歴をプルリクエストごとに一つずつ再生していきます。すべての変更に対して、それは単に新しいレンガを見るだけではありません。強力なAI(LLM)に対し、なぜその変更が行われたのか、そしてそれが既存のものとどのように適合するのかを説明させます。決定的なのは、古い物語を上書きするのではなく、新しい詳細を古いものとマージ(統合)することです。もし開発者がページに新しいボタンを追加した場合、CODENSはボタンが存在することを示すように地図を更新しますが、同時にそのページが以前どのような姿であったかという歴史も保持します。これにより、更新のたびに賢く、より詳細になっていく「生きたドキュメンテーション」の層が生まれます。
この地図が構築されると、CODENSは3つの方法で探索を提供します。それは、さまざまな移動モードのようなものです。一つ目は、司書に似た言葉を含む本を求めるような、素早い「ベクトル検索」です。二つ目は、一つの部屋から次の部屋へとパン屑の跡を辿るように、それらがどのように繋がっているかを確認する「マルチホップ検索」です。しかし、最も強力なモードは「エージェントによる探索(エージェント・ガイデッド・トラバーサル)」です。ここでは、AIエージェントが懐中電灯を持った探偵として振る舞います。それは固定された経路に従うのではなく、どのドアを開け、どの道を進むべきかを判断し、さらには正確な答えを見つけ出すために独自のカスタムクエリさえも作成します。エージェントは、特定のノードの中を覗いたり、隣接する要素を確認したり、複雑な検索を実行したりするためのツールを使用し、完全な答えを組み立て上げます。
研究者たちは、1,700以上のファイルと数百のプルリクエストを持つ、現実世界の産業用プロジェクトを用いてこのシステムをテストしました。彼らは、「この機能はどのように動作するか?」「このボタンをクリックすると何が起きるか?」といった、実際の開発者が抱くであろう11種類の質問をシステムに投げかけました。結果は有望なものでした。システムは非常に高い精度と「忠実性(faithfulness)」を記録しました。これは、回答が実際のコードに基づいたものであり、作り話をしていないことを意味します。人間による専門家評価では、回答の関連性は平均4.09、網羅性は4.45というスコアを記録しました。また、システムは各クエリのコストと時間を追跡することもでき、探偵モード(エージェント)はより多くの時間とトークンを消費するものの、最も徹底した回答を提供できることが示されました。
しかし、論文では小さな問題点も指摘されています。システムは正しい情報を見つけることには優れていましたが、回答の提示の仕方が、時として少しテクニカルすぎると感じられることがありました。人間の査読者は、いくつかの回答が「詳細すぎる」あるいは「コード中心すぎる」と指摘しており、単純な要約があればよい場面でも、行ごとの引用を列挙していました。それはまるで、司書が本の正確なページ番号と段落を教えてくれるものの、物語の要約を教えてくれないようなものです。著者らは、次のステップは必ずしもより良い情報を見つけることではなく、その情報をより明確でユーザーフレンドリーな説明へと合成する方法をシステムに教えることであると示唆しています。
要するに、CODENSは、コード変更の乱雑で散らばった歴史を、構造化され、クエリ可能なメモリへと変えられることを示唆しています。プルリクエストを単なる一時的な修正としてではなく、継続的な知識のストリームとして扱うことで、複雑なコードベースの理解を劇的に加速させるシステムを構築できることを証明しています。まだ完璧に解決された問題ではない(特に、いかにして回答を人間らしく、親切なものにするか、あるいはロボットがマニュアルを読み上げているような状態から脱するかという点において)ものの、それは、ソフトウェアのドキュメンテーションが生きており、常に最新であり、常にあなたの質問に答える準備ができているという、鮮やかな未来への一端を提示しています。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。