コーディングAIの誤検知判定F1が0.43から0.70へ。GSEがスキルを育てる方法

Coding agent skill graph with replay validation
AICompany reconstruction of GSE skill evolution

コーディングAIの誤検知判定F1が0.43から0.70へ。GSEがスキルを育てる方法

コーディングAIに失敗から学ばせると、次は賢くなる。そう考えるのは自然です。ただし、学びをメモとして足し続けるだけでは、別の仕事で邪魔になる知識や、互いに矛盾する手順も増えていきます。人間の「忘れないように付箋を貼る」が、最後には壁一面の付箋になる問題です。

2026年8月に公開された論文Learning Globally Reusable Skills for Coding Agentsは、この問題をskill bank全体の変更管理として扱うGSE(Globalized Skill Evolution)を提案しました。OpenHandsによるbug reportの誤検知除去では、最も強い比較手法のF1 0.43に対し、GSEは0.70でした。

楽天最安値を一発検索!価格ナビで今すぐチェック!

重要なのは、モデルを再学習した結果ではないことです。失敗traceから作るskillを、関係図、統合、回帰testの3段階で管理した結果です。

古い問題:1件の失敗を直すと、skill bank全体が少しずつ壊れる

Coding agentのskillは、repository探索、test作成、error解釈、patch確認などの手順を自然言語でまとめたものです。実行に失敗したら、そのtraceを読んで新しい注意点を追加する。ここまでは多くの自己改善手法と似ています。

難しいのは、その注意点が他のskillと独立していないことです。

例えば「mockを使って外部serviceを切り離す」というskillは、「integration testでは実service contractを確認する」というskillと衝突する場合があります。「変更methodだけを見る」という高速化skillは、「caller側の前提まで追う」という探索skillより先に発火すると、bugの原因を見落とします。

局所的に成功した更新をそのまま追加すると、3つの問題が起きます。

  • 特定repositoryにしか通じない指示が残る
  • 同じ能力を表す似たskillが増える
  • 依存、併用、衝突の関係が見えない

GSEは、skillを単独の文書ではなく、関係を持つsystemとして扱います。

核心は3段階。関係を見る、共通化する、過去を再生する

GSEの処理は次の順番です。

  1. Agentの失敗traceから、能力不足の原因を診断する
  2. 更新提案をDSLで構造化する
  3. Skill Relation Graphで他skillへの影響を見る
  4. 発生元の失敗caseを再実行し、直せない提案を捨てる
  5. 似た提案をcluster化し、case固有部分を削る
  6. 関係する過去caseをreplayし、性能が落ちない更新だけを採用する

更新提案には、対象skill、edit操作、変更内容、理由、期待する挙動、relation変更が含まれます。自由文をそのままskill bankへ放り込まず、変更の意図と影響を機械的に追える形にするわけです。

Six stage workflow for reusable coding agent skills
AICompany reconstruction of the GSE workflow

Skill Relation Graphは3種類の関係を持つ

論文のSkill Relation Graphは、skillをnode、関係を有向edgeとして表します。Edgeは次の3種類です。

  • dependency: 後段skillが前段skillの前提や出力に依存する
  • co-usage: 一緒に、または特定の順序で使うと効果が高い
  • conflict: 同時に有効化すると矛盾する

このgraphがあるため、1つのskillを書き換えるとき、直接つながるskillも含めて整合性を確認できます。更新対象だけを見て「直った」と判断しない点が肝です。

Cluster統合は、失敗例を一般的な能力へ変える

新しい提案が元caseを直しても、まだ採用しません。GSEは、同じskill群を変更する提案や、意味的に近い新規skill提案をまとめます。そのclusterから共通patternを抜き出し、repository名や特定API名などのcase固有情報を除いてcandidate skill bankを作ります。

最後にhistorical replayを実行します。既存skillの変更なら、そのskillが過去に使われたcaseを再実行します。新規skillなら、cluster内の提案を生んだcaseを再実行します。性能を維持または改善できなければmergeしません。

これは、skill版の「unit testだけ通ったのでmainへ入れました」を防ぐ仕組みです。少し地味ですが、地味な回帰testはだいたい後でヒーローになります。

実験で何が伸びたのか

研究は2種類のsoftware engineering taskを使いました。

1つ目はbugを再現するtestの生成です。Multi-SWE-BenchのJava部分から、実際にbugを発火できる108 method、9 projectを手作業で確認しています。

2つ目はbug reportのfalse positive除去です。ByteDanceと構築したIndustrialBugsを使い、8つのGo repositoryから500 reportを集めました。内訳は実bug 132件、false alarm 368件です。

各runでは1 projectを丸ごと評価用に残し、残りのprojectだけでskill bankを進化させるone-project-held-out方式を採用しました。評価対象そのものからskillを作る漏洩を避け、別projectへ移せるかを見ています。

主なF1は次の通りです。

| Task | Agent | 最強baseline | GSE | |—|—:|—:|—:| | Bug-revealing test生成 | OpenHands | 0.22 | 0.31 | | Bug-revealing test生成 | mini-SWE-agent | 0.29 | 0.38 | | False-positive filtering | OpenHands | 0.43 | 0.70 | | False-positive filtering | mini-SWE-agent | 0.39 | 0.46 |

OpenHandsのfalse-positive filteringでは、precisionが0.29から0.55、recallが0.84から0.95へ上がりました。単に多くをbug扱いしたのではなく、見逃しを減らしながら誤検知も抑えた結果です。

Local skill updates compared with global skill evolution
AICompany comparison of local and global skill evolution

Ablationが示すこと。Graphだけでも、replayだけでも足りない

GSEからSkill Relation Graphを外すと、OpenHandsのfalse-positive filtering F1は0.70から0.59へ下がりました。Cluster統合とreplay-driven validationを含むgeneralization機構を外すと0.54まで下がりました。

Bug-revealing test生成でも、full GSEのF1 0.31に対し、どちらを外しても0.27です。

論文の主張は明確です。Skill同士の関係を守る仕組みと、局所更新を一般化して過去caseで検証する仕組みは、どちらも必要です。

ただし、これは因果関係を完全に分離した証明ではありません。AblationはOpenHandsを代表agentとして使い、同一のDeepSeek-V4-Flashを基盤LLMにしています。別modelや長期運用でも同じ差が出るかは未確認です。

実務へ持ち込むなら、skill fileを直接書き換えない

ここからはAICompanyの解釈です。論文はCodexやOpenCodeを直接評価していません。

実務への最小構成は、次のようにできます。

text failure trace -> structured proposal -> candidate skill branch -> origin case replay -> related regression replay -> accept or reject -> versioned skill bank

最初からgraph databaseを導入する必要はありません。各skillに depends_onworks_withconflicts_with のmetadataを持たせ、Git branchでcandidateを作るだけでも考え方を試せます。

測るべき指標は、成功率だけではありません。

  • Skill追加前後の成功率
  • 既存caseのregression数
  • Skill発火回数と未使用skill数
  • Promptへ読み込むtoken数
  • Skill重複率
  • Rejectされた更新の理由

特に「元の失敗が直った」と「skill bank全体が良くなった」を別のgateにすることが重要です。

Costは無料ではない

GSEのskill evolutionは1 case平均401.55K tokensで、Trace2Skillの357.64Kより12.28%多く使いました。

Downstream executionは593.21K tokensです。Human skillの620.58K、Live-SWE-agentの613.61K、Trace2Skillの619.65Kより少ない一方、base agentの489.31Kよりは多い。つまり、GSEは「tokenを減らす手法」ではなく、「追加costと引き換えに判断品質を上げ、他のskill手法より実行時の迷走を抑えた手法」です。

費用が高い環境では、すべての失敗からskillを作るのではなく、再発頻度、影響度、既存skillとの重複を先に判定した方がよいでしょう。

限界。まだ自動でskill bankを放置できる段階ではない

強い結果ですが、次の制約があります。

  • IndustrialBugsとproprietary agentは非公開で、主要結果を外部から完全再現できない
  • GSEの公式code repositoryを公開arXiv pageから確認できない
  • 基盤LLMはDeepSeek-V4-Flashに固定されている
  • Temperature 0で、複数seedの分散や信頼区間が示されない
  • 評価taskはtest生成と誤検知除去に限られる
  • 未観測のskill同士の衝突をhistorical replayだけで保証することはできない

また、one-project-held-outはproject間の移植性を見る良い設計ですが、時間をまたいだ長期劣化や、skill数が数千へ増えたときの探索costは測っていません。

結論:Agentの学習力より、学びをmergeする仕組みが重要になる

GSEの価値は、coding agentに新しい知識を足したことではありません。Skillを関係付きのsystemとして扱い、局所test、共通化、historical replayを通してからmergeしたことです。

OpenHandsのfalse-positive filtering F1が0.43から0.70へ伸びた結果は、この変更管理が単なる整理術ではない可能性を示しています。一方で、非公開dataと単一model依存があるため、数字をそのまま自社環境へ移すことはできません。

実務でまず試すなら、agentが失敗するたびにskill fileへ追記する運用を止めることです。Candidate branchを作り、元caseと関連caseをreplayし、versionを残してからmergeする。Agentを賢くする前に、Agentの学び方を壊れにくくする。その順番が効きます。

【送料無料】マクロキーパッド、ストリームコントローラーデッキゲームストリーミングショートカットキーボード、18個のプログラム可能

投稿者 AICompany

コメントを残す

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

CAPTCHA