コード修復AIは本番前に練習できる。SkillForgeが変えるリポジトリ学習

透明な練習環境でコード部品を修復したAIエージェントが、得た知識を大きなソフトウェアリポジトリへ運ぶ概念図
本番のIssueへ入る前に、安全な練習環境でプロジェクト固有の知識を得る考え方を表したAICompanyのオリジナル図

コード修復AIは本番前に練習できる。SkillForgeが変えるリポジトリ学習

初めて入る巨大なコードベースで、いきなり本番の不具合を直してほしい。人に頼んでも少し酷な注文です。ところがコーディングエージェントには、これを平然と求めがちです。

一般的なPythonやGitの知識があっても、そのリポジトリだけのAPIの組み合わせ、例外処理、設定の流儀までは知りません。READMEを読めば全部分かるわけでもなく、過去のIssueが十分に残っているとも限りません。

ドライブレコーダーもAIにお任せ

SkillForgeが提案するのは、本番のIssueが来る前に、リポジトリ自身から練習問題を作る方法です。通っているテストを手掛かりに機能の一部を再実装させ、そこで生まれた失敗を修復する。その軌跡から、プロジェクト固有の知識を再利用できるスキルへ変えます。

SWE-bench Verifiedでは、DeepSeek-V3.2を使うMini-SWE-Agentの解決率が66.4%から72.2%へ上がりました。モデルを追加学習した数字ではありません。リポジトリで先に転び、転び方をメモしてから本番へ向かった結果です。

問題は知識不足より、プロジェクト固有の癖にある

コーディングエージェントを改善する方法には、大きく二つあります。

一つは、過去のIssue、コミット、修復軌跡から経験を集める方法です。実例に根ざす一方、新しいリポジトリや履歴の薄い領域では材料が足りません。

もう一つは、本番Issueを解きながら複数案を試し、その場で学ぶ方法です。対象へ密着できますが、Issueごとにトークンと時間を使います。学びが手に入る頃には、すでに本番の調査費用を払っています。

SkillForgeは、その間を狙います。履歴を待たず、本番Issueも使わず、現在のコードとテストから先に学ぶ。冷蔵庫を開けてから献立を考えるのではなく、厨房の癖を開店前に覚えておく発想です。

通るテストから、わざと難しい練習問題を作る

出発点は、成功するテストです。各テストを実行し、どのファイルやコード範囲が一緒に働いているかを追跡します。単一の関数を無作為に壊すのではなく、一つの機能を支える複数のコード断片をまとめて対象にします。

次に、対象の元実装を見せず、LLMへ再実装させます。手作業で典型バグを埋め込むのではありません。一般的なコーディング知識だけで機能を再構成させることで、そのモデルが知らないプロジェクト固有の前提を自然に踏ませます。

再実装後にテストが失敗すれば、それが練習Issueです。エージェントは通常の修復と同じようにコードを読み、パッチを当て、テストを回します。SkillForgeは成功軌跡だけでなく失敗軌跡も集め、どこを見て、何を誤解し、どんな変更が効いたかを抽出します。

論文のSWE-bench Verified実験では、この方法で577件の合成Issueを作りました。評価対象の正解コミットより前のスナップショットだけを使い、未来の修正情報がスキルへ混ざらないよう時間を分けています。

成功するテストから関連コードを選び、隔離環境で再実装と失敗修復を行い、二種類の知識へまとめる流れ
テスト追跡、隔離再実装、失敗検出、修復軌跡、スキル蒸留というSkillForgeの流れを再構成した図

スキルを二層に分け、必要な瞬間だけ渡す

蒸留される知識は二種類です。

グローバル診断スキルは、ファイルやAPIの役割、調査の手順、関連するAPIを記録します。「この症状なら、まず設定の正規化とキャッシュ無効化の関係を見る」といった、リポジトリ全体を歩くための地図です。

ローカル介入スキルは、特定のファイル、クラス、関数を変更するときの注意点を記録します。「この値を変えるなら、別モジュールの登録順序も保つ」といった、編集地点に結び付いた落とし穴です。

本番Issueが来ると、最初にBM25検索で関連するグローバルスキルを上位5件だけ選び、初期プロンプトへ加えます。その後、エージェントが該当ファイルへアクセスした時点で、対応するローカルスキルを追加します。

全部を最初から詰め込まないのが重要です。DjangoとSphinxで検索件数を変えた実験では、スキルなしの62.3%から上位5件で69.7%まで上がりましたが、関連スキルをすべて入れると67.5%へ下がりました。知識は多ければ勝ちではありません。必要な棚から、必要な一冊だけ取る設計です。

少数の全体診断知識を先に渡し、特定コードへ触れたときだけ地点別の注意知識を追加する二段階注入の図
全体の地図を最初に渡し、コード地点別の注意点を必要時だけ追加する二層スキル注入を再構成した図

500件と731件で、5ポイント前後の改善

SWE-bench Verifiedは、GitHub上のPythonリポジトリから人が検証した500件の修復課題です。

DeepSeek-V3.2では、Mini-SWE-Agentが66.4%、SkillForgeが72.2%でした。GPT-5-miniでは55.0%から60.6%へ上がっています。どちらも絶対値で5ポイント以上の改善です。

Python、JavaScript、TypeScript、Goを含む731件のSWE-bench Proでも、DeepSeek-V3.2は28.3%から34.1%、GPT-5-miniは47.6%から51.7%へ上がりました。Pythonだけの小さな実験に閉じてはいません。

ただし、無料の改善ではありません。Verifiedで1件当たりの平均費用は、DeepSeek-V3.2が0.049ドルから0.074ドル、GPT-5-miniが0.031ドルから0.066ドルへ増えました。この費用には、練習Issueの生成、修復軌跡の収集、スキル蒸留を評価件数へ割り振った事前計算分が含まれます。

同じリポジトリで多くのIssueを解けば事前費用を薄められます。一方、コードが頻繁に変わり、スキルを何度も作り直す現場では割高になるかもしれません。論文の平均費用を、そのまま自社運用の料金表にはできません。

二つのスキルは両方必要で、別モデルには渡しにくい

アブレーションでは、DeepSeek-V3.2からグローバル診断スキルを外すと68.4%、ローカル介入スキルを外すと67.8%へ落ちました。GPT-5-miniでも57.6%と57.2%です。地図だけでも、現場の注意書きだけでも足りません。

さらに興味深いのが、別モデルが作ったスキルを渡す実験です。GPT-5-miniが作ったスキルをDeepSeek-V3.2へ渡すと65.2%で、スキルなしの66.4%を下回りました。逆向きではGPT-5-miniが55.0%となり、元のベースラインと同じです。

つまり、蒸留されたのは客観的なリポジトリ説明だけではありません。そのモデルがどこで迷い、どう直したかという癖も入っています。モデルを交換するときは、古いスキル資産をそのまま移せると考えず、再蒸留とA/B評価を組み込む必要があります。

小さく試すなら、20テストと時間分離から始める

AICompanyの解釈として、実務へ持ち込むなら最初から全リポジトリを処理する必要はありません。次の小さな試験で十分です。

  1. 安定して通る重要テストを20件選ぶ。
  2. 各テストが触るモジュールと関数を記録する。
  3. 隔離したコンテナや一時ブランチで、元実装を隠した再実装課題を作る。
  4. 修復軌跡から、全体の診断手順とコード地点別の注意点を別々に保存する。
  5. 過去時点のスナップショットだけでスキルを作り、それより後の実Issueでスキルありとなしを比べる。

測るのは解決率だけではありません。1件当たり費用、変更ファイル数、無関係な編集、テスト回数、古いスキルが誤誘導した件数も記録します。改善がなければ対象テストを増やす前に、合成Issueが本当にプロジェクト固有の癖を露出しているかを見直します。

もちろん、練習用のバグを本番ブランチへ置いてはいけません。学習のために障害を作り、本当に障害を起こしたら、ちょっと完成度の高いコントです。

公開実装はあるが、論文値とのずれが残る

公式リポジトリはMITライセンスで、Issue合成、軌跡収集、スキル抽出、評価リーク除外、BM25検索、実行時注入のコードを公開しています。手順もREADMEにまとまっており、仕組みを追える状態です。

一方、確認したコミット99dca133df6b56ea78b702c33edb4903d335697fのDeepSeek-V3.2評価ファイルは、500件中365件解決、1件失敗を記録しています。全500件を分母にすると73.0%で、論文表の72.2%と一致しません。更新後の別実行や集計条件の違いかもしれませんが、説明は見当たりませんでした。

また、公開ツリーにはGPT-5-miniの対応する生結果ファイルを確認できません。AICompanyでも500件と731件のフル評価は再実行していません。記事の比較値は論文表に基づき、公開ファイルとの差は再現性上の未解決点として扱います。

もう一つの制約はテストです。SkillForgeは通るテストから学習信号を作るため、ほとんどテストされないコード領域には弱いままです。合成Issueの問題文もLLMが生成し、人が確認してはいるものの、実際の開発者が書くIssueと同じ分布とは限りません。

エージェントへ教える前に、失敗できる稽古場を作る

SkillForgeの価値は、スキルファイルを増やしたことだけではありません。本番の失敗を待たず、コードとテストを使ってプロジェクト固有の弱点を先に発見したことです。

結果は有望です。ただし、テストされていない領域、モデル交換、事前計算費用、公開評価値のずれは残ります。自社リポジトリへ入れるなら、全自動の知識工場としてではなく、時間分離した小さな実験から始めるべきでしょう。

一般知識の強いモデルでも、知らない現場では新人です。新人へいきなり本番障害を渡すより、失敗しても安全な練習環境を用意する。SkillForgeが示したのは、コーディングエージェントの性能向上が、モデル選びだけでなく稽古場の設計でも決まるということです。

参考資料

ドライブレコーダーもAIにお任せ

投稿者 AICompany

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA