世界を動かす技術を、日本語で。

研究:自己生成エージェントのスキルは無意味である

概要

SkillsBench は、LLMエージェントのスキル活用効果を評価するための新しいベンチマーク。 86タスク・11ドメインで、 スキル有無・自己生成スキル の3条件を比較。 Curated Skills (厳選スキル)は平均16.2ポイントのパス率向上を実現。 自己生成スキル は平均で効果なし、モデルによるスキル自作の限界を示唆。 小規模モデル+スキルで、大規模モデル単体に匹敵する性能を確認。

SkillsBench: LLMエージェントにおけるスキル活用の効果測定

  • SkillsBench :86タスク・11ドメインから成る新ベンチマークの構築
  • 各タスク: スキルなし/厳選スキル/自己生成スキル の3条件で評価
  • 7つのエージェント-モデル構成 で合計7,308の実行経路を検証
  • Curated Skills (厳選されたスキル):
    • 平均パス率を16.2ポイント向上
    • ドメインごとに効果のばらつき
      • 例) ソフトウェアエンジニアリング :+4.5ポイント
      • ヘルスケア :+51.9ポイント
    • 84タスク中16タスクでは逆にパフォーマンス低下も観測
  • 自己生成スキル :平均で効果なし
    • LLMモデル自体によるスキル作成の不安定さを示唆
  • Focused Skills (2~3モジュールの絞り込みスキル):
    • 包括的なドキュメントよりも高い効果
  • 小規模モデル+スキル
    • スキルなしの大規模モデルと同等のパフォーマンスを実現

SkillsBenchの意義と今後の課題

  • LLMエージェントの実運用に向けたスキル設計指針 の提供
  • スキル導入効果のドメイン依存性 の明示
  • 自己生成スキルの限界、今後の自動スキル生成手法の課題提起
  • ベンチマークの標準化 による、今後のスキル研究の基盤整備

Hackerたちの意見

一般的なルールとして、LLMで自動化する層が増えるほど、次の層はどんどん悪くなるみたい。LLMの出力を新しいLLMの入力に流すと、物事がすぐに崩れたり、失われたりするのがわかるよね。アイデアがあって、実装計画もある程度できてるなら、LLMにコーディングを任せれば、メンテナンスしやすくていいものができる。基本的にはあなた次第。層を一つ減らして、アイデアは持ってるけど、実装計画はLLMに考えさせると、実装も含めて、理想からは程遠くなる。さらに層を減らして、LLMに全部やらせると、もうめちゃくちゃになる。

この原則は、フィードバックがない場合にのみ当てはまると思う。そう、オープンループ制御の層を何層も通ると、各層で精度が下がるけど、各レベルにメトリクスがあって自己調整できるなら、状況はそこまで深刻じゃないと思う。

人は、zipファイルの圧縮の例をよく引き合いに出すよね。圧縮を続けると劣化するってやつ。同じことがjpegやmp3にも言える。でも、私は「電話ゲーム」(中国のささやきとも呼ばれる)の例えを使うのが好き。自然言語がどれだけ危ういか、そしてどれだけ早く劣化するかを際立たせると思う。多くの人が、私たちがコミュニケーションを取る能力に対してあまり感心していないと思う。

LLMに同じ画像を正確に再現させようとする画像のシーケンスみたいなもので、数十回の反復の後に何かグロテスクな崩壊が起きるんだ。テキストやコードでも同じことが起こる。「意味の崩壊」って呼んでる。数年後、LLMがSharePointサイトを読み込んで要約を作り、その要約の要約を作る…みたいなことを続けると、最終的にはグロテスクなスラリーができあがると思う。ある時点で、意味のあるものをプロセスに注入するために新鮮な人間の入力が必要になるんじゃないかな。

「自己生成スキル:スキルは提供されないが、エージェントはタスクを解決する前に関連する手続き知識を生成するよう促される。これにより、LLMの潜在的なドメイン知識の影響が分離される。」これは有用な結果だけど、これが「LLMがスキルを生成する」と考える人たちの意図とは必ずしも一致しないことに注意が必要だね。LLMに、何かを達成するために苦労した経験から得た教訓を表すスキルを書かせる方が一般的だと思うし、彼らが言ってることとはかなり違う。ニュースメディアや人気のSNSアカウントは、適切な注意を払って報道するだろうし、誰も誤解しないと思うよ。

うん、タスクを試みて、その試みから学んだ教訓の後にLLMがスキルを生成することに興味がある。初めてタスクを試みる前ではないよ。この結果はちょっと馬鹿げてて、現実のスキルが「自動生成」される方法から離れてる気がする。

これよりもひどいことがあるよ。「評価されるタスク」は、指示のマークダウンファイル1つと、不透明な検証者だけに限られてるんだ(13-14ページ)。既存のコードベースやリファクタリング、そういうのは全く関係ない。要するに、「問題定義」が広い意味で文脈に合わないってこと。だから、エージェントに自分のスキルを生成させるために与えられたプロンプトを見ると、こうなってる:> 重要:まずスキルを生成してください。このタスクを解決する前に、以下のステップに従ってください。1. タスクの要件を分析し、必要なドメイン知識、API、または技術を特定します。2. このタスクを解決するために役立つ1〜5のモジュラーなスキル文書を書きます。各スキルは:特定のツール、ライブラリ、API、または技術に焦点を当てること;該当する場合はインストール/セットアップ手順を含むこと;コード例や使用パターンを提供すること;類似のタスクに再利用可能であること。3. 各スキルを環境/skills/ディレクトリに説明的な名前でマークダウンファイルとして保存します。4. その後、作成したスキルを参考にしてタスクを解決します。自己生成されたスキルを充実させたり抽出したりするための「探求」は全くできないんだ。ウェブ検索もできないし、既存のコードベースを探ってベストプラクティスや重要なファイルを探すこともできない。タスクの説明に関する自分の妄想の中だけでしか動けない。スキルが生成された後にセッションを再起動してないみたいだし、4番目の項目からもそれがわかるよね?だから、スキルを生成するために使われた文脈をただ吐き出してるだけ。だから、空っぽのコードベースのエージェントは「もっと計画を立てる」だけじゃ良くならないよ。他の文脈、特にそのただの雰囲気でコーディングされたコードベースに新しい機能を求める場合には、誤解を招く結果だね。

いわゆる「スキル」の目的は、エージェントがその文脈に引き込んで行動できるような短いハウツーリマインダーであることだよ。もし知識がすでにモデルの中にあるなら、推論フェーズで自然に現れるだろうから、スキルとして書くことにはあまりメリットがない。特にそれが非常に関連性が高くて、表に出しにくい場合を除いてはね。

LLMが、何かを達成するために苦労した教訓を表すスキルを書くのはもっと一般的だと思う(願わくば)し、彼らが言っていることとはかなり違う。先週、Claudeに問題解決を手伝ってもらうためにスキルを作ってもらったんだけど、かなり良い出来だったよ。いくつかの問題はあったけど(Claudeは逸話的データを過剰に指定する傾向がある)、正しい方向への強い一歩だと思う。それに、「スキル」は私の意見では広すぎる。私には(Claudeが書いた)個人的なデータを使ってトレーニングを分析するためのスキルがある。再訪する予定のドメインについてかなり長いやり取りを使うと、自己生成されたスキルの余地は十分にあると思う、特にClaudeに何をしないべきかを伝えるときにはね。

うん、私の最も役立つAIツールのいくつかは、「ロールプレイセッション」で作られたスキルだよ。基本的にはエージェントに頭の中を吐き出して、質問をさせてタスクを達成する方法を見つけさせる。そして、最終的には実際の問題解決セッションから得られた証拠に基づいて、もっと厳密で洗練されたスキルにまとめるんだ。

これは、必ずしも人々が「LLMがスキルを生成する」と考えるときに思い描いていることではないことに注意することが重要です。この論文を読んでいると、そうは思えません。エージェントを労働力に導入してスキルを使うように指示するのではなく、タスクを与えるべきです。これは明らかに思えるけど、全員にとってそうとは限らないかも。(それに、研究者にとっては、事前プロンプトのスキル作成が機能しないことが確認されるのは嬉しいことだね。もし機能していたら面白かったけど。)

私は「タスクを完了する際にLLMにスキルを追加させても、通常通りに推論させるのと比べて意味のある改善にはならない」というふうに解釈したんだけど、これが論文の根本的な主張みたいだね。

ニュースメディアや人気のソーシャルメディアアカウントは、これを報道する際に適切な注意を払うだろうし、誰も誤解しないと思うよ。 :D

エージェントにスキルを構築させるのに、書いていることに関する知識を増強せずに指示する意味はほとんどないよ。出力を入力に流すだけで、システム内の情報を広げてないからね。エージェントにオンラインでリサーチさせて、それをモデルが正確に把握できない情報や、トレーニングデータより新しい情報に絞り込むと、より役立つスキルが生まれるよ。私はこのアプローチを導くためにスキルを使ってる: https://github.com/sammcj/agentic-coding/blob/main/Skills/sk...

実際に試してみた後にスキルを自動的に更新するのは役立つと思う。そうすれば、実際のフィードバックでスキルを改善できるから。うまくいってるみたいだけど、実際に研究はしてないんだ。

その通り、エージェントにリサーチや追加データの自主性を与えなかったんだよね。ドキュメントもないし、ウェブ検索もできない、参考資料もなし。こんな風にスキルを構築する意味って何なんだろう?

自己生成ドキュメントについても同じ観察をしてるよ。LLMを使って「ベストプラクティス」やドキュメントを定義するためにコードを内省することで、全く悪いガイダンスを引き出す開発者を見たことがある。そこには自分のバイアスが入ってしまうからね。開発者たちは「良い」を定義する箇条書きを打つのすら面倒くさがってる。一例として、C#/.NETの抽出したスニペットがConfigureAwait(false)を散りばめていて、アプリケーションコードには不要で、ASP.NETでは一般的に必要ないものだった。だけど、コーディングエージェントは「ライブラリ」コードのように見えるものを見て、それを適用することにした。そしたら誰かがそのコードに対してLLMを使って「ベストプラクティス」を引き出して、リポジトリに入れて、他のコンテキストを汚染し始めた。PRでそのコードを見つけて、ソースを確認してゼロに戻したよ。Task.Runのひどい使い方も整理しなきゃいけなかった(これもC#ではベストプラクティスじゃないし、何をしてるのかちゃんと理解したい)。結局、私たちはコーディングエージェントに一貫性と品質を向上させるためのキュレーションされたベストプラクティスガイダンスを提供する新しいシステムを構築してる。自己生成スキルや知識の使い方は、画像を入れてLLMにその画像を変えずに返させる実験のようだ。nサイクル後、元のものから深く変異してしまう。エージェントによるコーディングが未来だけど、人々はまだ適応していない。パンチカードからアセンブリ、FORTRAN、C、JavaScriptへと進化してきた。それぞれのステップでより多くの抽象化が加わってる。次の抽象化はMarkdownで、Markdownの作成やキュレーションに時間を投資するチームは、エージェントが品質やセキュリティ、パフォーマンス、メンテナンス性、その他の非機能的な側面を犠牲にせずに運用できるより良いガードレールを作ると思う。

エージェントによるコーディングが未来だけど、人々はまだ適応していない。パンチカードからアセンブリ、FORTRAN、C、JavaScriptへと進化してきた。それぞれのステップでより多くの抽象化が加わってる。完全に反対するわけじゃない(私も同じことを主張してきた)。でも、LLM層と他の層との間には重要な違いがあって、LLMは非決定的で、他の層は決定的だよね。それがダイナミクスをどう変えるのかはわからないけど、確実に変わると思う。

これは驚くべきことでもないし、関係ないね。特定のモデルのためにスキルを作るとき、通常はモデルに自分の潜在的な知識だけでスキルを作るようには頼まないよ。そうじゃないと、モデルに「行動する前に計画を立てて、間違えないように」と言ってるのと同じ効果を期待することになる。でも、まさにそれを論文の著者たちはやったんだ!「自己生成」と言っても、モデルにはツールへのアクセスを全く与えてない、ウェブ検索すらも。もし彼らが以下の方法で作成されたスキルをテストしていたら、もっと面白かっただろうね:A) モデルが人間にインタビューしてからスキルを作成する、またはB) モデルが情報を集めるために1つ以上の深いリサーチタスクを実行する、またはC) 上記の組み合わせ。

そうでなければ、モデルに「行動する前に計画を立てて、間違いを犯さないように」と言うのと似た効果が期待されるはずだ。こういった技術が実際に効果的だった以前のバージョンはなかったのかな?

これは驚くべきことでもなく、関係ないことだね。特定のモデルのためにスキルを作るとき、通常はモデルに自分の潜在的な知識だけに基づいてスキルを作らせたりしないんだ。これ!論文の唯一驚くべき点は、誰かがこのテーマについて十分に理解せずにスキルに関する論文を書いたことだね。

私にはカスタムのスキルクリエイターがあって、こんな内容が含まれてる:> 一般的な落とし穴は、Claudeがスキルを作成し、そのタスクを完了する方法について生成された情報で満たしてしまうことだ。これの問題は、生成されたコンテンツがすべてClaudeの確率空間の中にある情報だってこと。Claudeは自分が既に知っている情報を自分に伝えているだけなんだ!> 代わりに、ClaudeはSKILL.mdに記録するべき情報を次のようにすべきだ:> 1. Claudeのトレーニングデータの外にある情報(Claudeがリサーチや実験、経験を通じて学ばなければならなかった情報)> 2. コンテキスト特有の情報(Claudeが今知っているが、後でコンテキストウィンドウがクリアされた後は知らなくなる情報)> 3. 未来のClaudeを現在のClaudeと整合させる情報(未来のClaudeが望む行動をするためのガイドとなる情報)> Claudeは派生データを記録するのも避けるべきだ。馬を水に連れて行くが、飲み方を教えない。Claudeが必要な情報を簡単に得られるソースがあるなら、そのソースを指し示してあげて。Claudeが必要な情報が既に知っている情報や提供された情報から簡単に導き出せるなら、派生データを提供しないこと。興味のある人は、完全なスキルはここにあるよ: https://github.com/j-r-beckett/SpeedReader/blob/main/.claude...

正直、研究者がそれを読んで実行して研究を書く前に、arxivに発表した方がいいかもね。こういうスレッドはよく見かけるけど、一つのことが仮定されて、その後に実行者たちが自分たちのやったことについてコメントし合うのが一般的だから。

LLMが自分が知っていることや知らないことについて内省するのはあまり得意じゃないと思うけど、それ以外は素晴らしいね。シェアしてくれてありがとう。

これめっちゃいいね!ブログ記事みたいに読めるし、良いスキルを書くための技術を学んでる気がする。もしかしたら、別のヒューリスティックかも。スキルは面白いブログ記事みたいに読まれるべきで、明白じゃない情報を強調するべきだね。

自分で生成したスキルがマイナスの効果(-1.3pp)をもたらし、キュレーションされたスキルがプラス16.2ppを与えるという結果が、個人的には一番興味深いと思う。大きな差だけど、納得できる。LLMは手続き的な知識を生産するよりも、消費する方が得意だという考えと一致してるね。ソフトウェアエンジニアリングの+4.5ppは、ヘルスケアの+51.9ppと比べるとかなり低く感じる。これはフロンティアモデルがすでに強いSWEの先入観を持っているから、スキルの追加価値が少ないことを反映してるんじゃないかな。もしそうなら、スキルはモデルが弱い領域でこそ最も価値があることになる。実際にエージェントを運用するのに適した場所だし、これは励みになるね。

もし違ったらごめんだけど、これは私のLLMの感覚テストに完全に失敗してる…

ソフトウェアエンジニアリングの+4.5ppは、ヘルスケアの+51.9ppと比べると怪しいほど低いね。これも私には目立った。LLMがソフトウェアエンジニアリングのトピックに関する大量のトレーニングデータを持っていると思うし、それが大きな不一致を説明しているかもしれない。私の経験では、非常に新しいかあまり使われていないソフトウェアライブラリやツールを使うとき、スキルが本当に輝くんだ。例:Adobe React Spectrum UIライブラリ。スキルがなければ、Opus 4.6はこのライブラリを使おうとすると全く使い物にならない。ちゃんとキュレーションされたスキルがあれば、すごく良くなる。大きな違いだよ。

クロードのために持っているスキルは、すべて個人的な好みに基づいていて、私が持っている設定を反映してる。これは、私にとってうまくいく特定のセットに確率空間を絞る方法なんだ。

評価に基づいてAIコーディングループを始めたときに、測定可能な変化があった。定義上、追加があると数字は右上がりになる。まさに「測定するものを得る」って感じだね :) 数ヶ月前のChaos Congressのトークで、コーディングループの部分に飛んでみて: https://media.ccc.de/v/39c3-breaking-bots-cheating-at-blue-t... 。トークは主にMCPに焦点を当ててるけど、今はスキルにも同じフローを使ってる。この種の経験があると、評価や同等の測定可能な品質を証明するものがないプラグインやスキルリポジトリを引き受けるのがためらわれる。一般的に、少数のことが大きな影響を持つけど、それを正しくするのが重要で、残りは千の傷による死になっちゃう。

一般的に言うと、LLM(大規模言語モデル)が推論を使って新しい情報を「創造」できないことを示すような結果が出てるみたいだね。LLMが生成したスキルも役に立たないし、LLMが生成したコンテンツでトレーニングするとモデルが崩壊しちゃうこともあるみたい。これが直感的に受け入れられてるのは分かるけど、個人的には結構驚きだよ。トレーニングコーパスにはたくさんの情報が含まれてるし、モデルは…明るい初心者レベルで動いてる感じ。もっとコーパスの側面をじっくり見れば、得られる洞察があるはずなのに。なんでこれが驚くべきこととして考えられないんだろう?

トレーニングコーパスは、事前学習の段階でとても大まかにしか学習されてないんだよね。推論時の計算を使って対処しようとしても、せいぜい自己整合性が少し増すだけで、最初に効果的に学習していない情報を再現することはできないんだ!