前回の記事 では、LLM の評価ツールを自分のサービスでどう使うかを整理しました。評価ができるようになると、次に欲しくなるのは「評価の結果をもとに、プロンプトを自動で直してほしい」です。
この分野は 2023 年ごろから論文が続いています。2025 年に出た GEPA は ICLR 2026 の口頭発表に選ばれました。2026 年に入ると、直す対象がプロンプトから Claude Code などのスキル文書(SKILL.md) にまで広がっています。本稿では、標準的な手法の系譜と、実務で使うときの作法をまとめます。
数値は各論文の要旨(arXiv の abstract)で確認したものです。条件は論文ごとに違うので、論文をまたいで数値を比べないでください。
先に結論を書きます。
- 骨格はどの手法も同じです。 候補を作り、評価用データで採点し、良ければ採用する。この繰り返しです。違うのは「候補の作り方」と「どの候補を残すか」だけです。そして、どの手法も採点できることが前提です。評価の仕組みが先にあり、改善の手法はその上に載ります。
- 実務の標準に近いのは、DSPy の
MIPROv2とGEPAです。 GEPA は点数だけでなく、実行の記録と失敗の理由を文章のまま読んで直すので、少ない試行で効きます。 - 2026 年の新しい流れは、スキル文書の最適化です。 SkillOpt、SkillGrad、SkillAdam、Self-Supervised Skill Optimization などが出ています。共通する作法は「1 回の編集量に上限を設け、検証用データで良くなったときだけ採用する」です。
- 最大の落とし穴は、評価用データへの過剰適合です。 データは学習用・検証用・最後まで触らない試験用の 3 つに分けます。
1. 何を改善するのか
| 対象 | 例 | 主な手法 |
|---|---|---|
| 指示文 | システムプロンプト、タスクの説明 | APE、OPRO、ProTeGi、EvoPrompt、Promptbreeder、GEPA |
| 例示(少数の入出力例) | プロンプトに入れる模範例 | DSPy の BootstrapFewShot、MIPROv2 |
| 複数段の処理全体 | 検索 → 要約 → 回答のような連鎖 | DSPy(MIPROv2、GEPA)、TextGrad |
| 蓄積する文脈 | 作業の手引き、過去の教訓集 | ACE |
| スキル文書 | SKILL.md とその付属ファイル |
SkillOpt、SkillGrad、SkillAdam、Self-Supervised Skill Optimization |
| モデルの重み | 追加学習 | 強化学習(GRPO など)。本稿では扱いませんが、GEPA の比較相手です |
2. 手法の系譜
2.1 生成して選ぶ — APE(2022)
Large Language Models Are Human-Level Prompt Engineers(Zhou ほか)。
指示文を「プログラム」とみなし、LLM に候補を大量に書かせて、採点関数で最良のものを選びます。要旨では、24 の課題のうち 19 で人が書いた指示文と同等以上だったと報告しています。最も素朴な方法で、以降の手法の出発点です。
2.2 LLM そのものを最適化器にする — OPRO(2023、ICLR 2024)
Large Language Models as Optimizers(Yang ほか)。
「これまでの候補とその点数」をプロンプトに並べて LLM に見せ、もっと点の高い候補を書かせます。新しい候補を採点して一覧に足し、また書かせる。点数の推移から方向を読ませる発想です。
2.3 文章の「勾配」で直す — ProTeGi(2023)、TextGrad(2024)
- Automatic Prompt Optimization with “Gradient Descent” and Beam Search(Pryzant ほか、EMNLP 2023)。論文内では APO と呼ばれ、ProTeGi という名前でも知られています。少量のデータで間違えた例から「いまのプロンプトの何が悪いか」を文章で書かせ(これを勾配に見立てます)、その逆向きにプロンプトを直します。候補はビーム探索とバンディットで絞ります。
- TextGrad(Yuksekgonul ほか)。この考えを複数の部品からなる処理全体に広げ、LLM による文章の批評を逆向きに伝えて各部品を直します。書き方は PyTorch に合わせてあります。
注意: Textual Gradients are a Flawed Metaphor for Automatic Prompt Optimization(2025 年 12 月)は、この系統の手法が性能を上げることは多いものの、「勾配」のたとえでは挙動を説明できないと分析しています。名前に引きずられず、効くかどうかは手元で測ります。
2.4 進化させる — EvoPrompt(2023、ICLR 2024)、Promptbreeder(2023)
- EvoPrompt(Guo ほか)。遺伝的アルゴリズムなどの進化計算の操作を LLM にやらせ、プロンプトの集団を開発用データの点数で入れ替えていきます。
- Promptbreeder(Fernando ほか)。タスクのプロンプトだけでなく、「プロンプトの変え方を指示するプロンプト」自体も一緒に進化させます。
2.5 処理全体をプログラムとして最適化する — MIPRO(2024、EMNLP 2024)
Optimizing Instructions and Demonstrations for Multi-Stage Language Model Programs(Opsahl-Ong ほか)。
複数の LLM 呼び出しをつないだ処理で、各部品の指示文と例示を同時に最適化します。部品ごとの正解ラベルが無くても、最終結果の点数だけで回せるのが特徴です。候補の組み合わせは代理モデルで絞り、小さな束ごとに評価して費用を抑えます。DSPy には MIPROv2 として入っていて、GEPA が出るまでは実務で最もよく使われていた最適化器でした。
2.6 振り返りとパレート — GEPA(2025、ICLR 2026 口頭発表)
GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning(Agrawal ほか)。
仕組みは 3 段です。
- 処理を実行し、実行の記録(推論の過程、道具の呼び出し、評価器が返したメッセージなど)を文章のまま集めます。
- 別の LLM がそれを読んで「何がうまくいき、何がだめだったか」を振り返り、指示文の改訂案を書きます。
- 候補は 1 つに絞りません。どれか 1 つの例で最高点を取った候補をすべて残します(パレート前線)。 平均点だけで選ぶと消えてしまう「特定の種類の問題に強い候補」を保ち、それらの教訓を組み合わせていきます。
要旨によると、6 つのタスクで強化学習(GRPO)を平均 6%・最大 20% 上回り、試行回数は最大で 35 分の 1 でした。MIPROv2 も 10% 以上上回っています(AIME-2025 で +12%)。
DSPy では dspy.GEPA として使えます(中身は gepa パッケージです)。採点関数は dspy.Prediction(score=..., feedback=...) の形で、点数に加えて文章のフィードバックを返せます。たとえば「金額は正しいが、返金を確約している」のように理由を返すと、GEPA はそれを読んで直します。
2.7 文脈を育てる — ACE(2025、ICLR 2026)
Agentic Context Engineering(Zhang ほか)。
プロンプトを書き直すのではなく、作業の手引き(プレイブック)を少しずつ追記し、整理していく方法です。役割は生成・振り返り・整理の 3 つに分かれます。この論文が指摘している 2 つの問題は、実務でもよく起きます。
- 簡潔さへの偏り: 書き直すたびに要約され、業務に固有の知見が落ちていく。
- 文脈の崩壊: 全体の書き直しを繰り返すうちに、細部が少しずつ失われていく。
対策として、全体を書き直さず、項目単位で差分を足していきます。要旨では、エージェントの課題で +10.6%、金融の課題で +8.6% と報告しています。
2.8 スキル文書の最適化(2026)
2026 年に入って、Claude Code などのスキル(SKILL.md)を「固定したエージェントの外にある、学習できる状態」とみなして最適化する研究が一気に増えました。
| 論文 | 要点 |
|---|---|
| SkillOpt(2026 年 5 月) | 実行するモデルと、スキルを編集するモデルを分けます。採点済みの実行結果から追加・削除・置換の編集を作り、1 回の編集量に上限(文章版の学習率)を設け、検証用データで良くなったときだけ採用します。却下した編集も記録して繰り返しません。直接の対話・Codex・Claude Code の 3 つの環境で評価し、最適化したスキルはモデルや環境を変えても効果が残ると報告しています |
| SkillGrad(2026 年 5 月) | 勾配降下のたとえで、複数の実行から繰り返し現れる問題を**蓄積(モーメンタム)**し、成功と失敗を比べて原因を診断します。スキルの層を意識して直します。表計算と表の質問応答の課題で評価しています |
| SkillAdam(2026 年 9 月) | 最適化手法の Adam に倣い、過去に見つけた問題と試した修正の結果を記憶して修正の方向を安定させ、最近の改善がどれだけ一貫しているかで修正の幅を変えます |
| Self-Supervised Skill Optimization(2026 年 7 月) | 正解ラベルなしで改善します。スキルの実行結果を LLM に比べさせ、振る舞いの違いを集め、根拠の多いものからスキルに反映します。正解ラベルを使う最強の手法に近づき、ときに上回ると報告しています |
| Agent Skill Evaluation and Evolution(サーベイ、2026 年 6 月) | スキル改善の手法を「実行のフィードバック」「実行記録からの抽出」「圧縮」「強化学習」の 4 つに分類しています |
3. 手法の比較
| 手法 | 必要な信号 | 候補の作り方 | 候補の残し方 | 向いている場面 | 実装 |
|---|---|---|---|---|---|
| APE | 採点関数 | 例から一括で生成 | 最高点を 1 つ | 単発の分類・抽出 | 自作でも容易 |
| OPRO | 採点関数 | 過去の候補と点数を見せて生成 | 上位を残す | 点数が細かく出る課題 | 自作でも容易 |
| ProTeGi / TextGrad | 採点関数と、間違えた例 | 失敗の批評に沿って修正 | ビーム探索 | 失敗の型がはっきりした課題 | textgrad |
| EvoPrompt / Promptbreeder | 採点関数 | 交叉・突然変異 | 世代交代 | 探索の幅が欲しいとき | 研究実装 |
| MIPRO | 採点関数と少量のデータ | 指示文と例示を同時に提案 | 代理モデルで絞る | 複数段の処理、例示が効く課題 | DSPy の MIPROv2 |
| GEPA | 採点関数(文章のフィードバックがあると強い) | 実行記録を読んで振り返る | パレート前線 | 試行の費用が高い処理、エージェント | DSPy の GEPA、gepa |
| ACE | 実行のフィードバック | 項目単位で追記 | 整理役がまとめる | 長く使い続ける手引き・教訓集 | 研究実装 |
| スキル最適化(SkillOpt など) | 採点済みの実行(Self-Supervised Skill Optimization はラベル不要) | 上限付きの編集 | 検証で改善したときだけ採用 | SKILL.md の改善 |
研究実装 |
4. 実務で効く共通の作法
論文をまたいで繰り返し出てくる作法です。自分で仕組みを作るときも、これを守ります。
- データを 3 つに分ける。 学習用(候補を作るのに使う)、検証用(採用するかを決める)、試験用(最後に 1 回だけ使う)。GEPA を本番に入れた Decagon の報告 では、反復とデータを増やすほど GEPA があらゆる例外をプロンプトに詰め込み、冗長で汎化しないプロンプトになったと書かれています。学習用と検証用は半々の分け方がうまくいったそうです。
- 編集の量に上限を設ける。 全体の書き直しは細部を失います(ACE の「文脈の崩壊」)。差分で直し、1 回の変更を小さく保ちます(SkillOpt)。
- 良くなったときだけ採用し、却下した案も記録する。 同じ失敗案を何度も試さないようにします。
- 採点関数に文章で理由を返させる。 点数だけより、「なぜ減点したか」を返すほうが改善が速くなります(GEPA)。
- 平均だけで選ばない。 特定の種類の問題に強い候補を残します(GEPA のパレート前線)。重大な失敗の件数は、平均とは別に見ます。
- 採点役の偏りを疑う。 LLM の採点で最適化すると、採点役に好まれる書き方に寄っていきます。人の判定との一致率を定期的に測ります。採点の偏りについては LLM 評価とモデル選択の論文を読む で詳しく扱いました。
- 最適化したプロンプトを人が読む。 自動で直したプロンプトは、評価用データの癖(特定の固有名詞や言い回し)を覚え込んでいることがあります。
5. 自分の業務に当てる
前回の記事 の 3 つの例と、自社の Claude Code スキルで考えます。
| 業務 | 向いている手法 | 理由と注意 |
|---|---|---|
| EC の問い合わせ対応 | GEPA(DSPy) | 機械で判定できる部分が多く、採点関数が「どこがだめか」を文章で返しやすい(注文番号の誤り、禁止表現の使用など)。過去の返信が大量にあるので、データを 3 つに分けやすい |
| 社内の法務チェック | MIPROv2 で例示を選ぶ+人による確認 | 正解データが少なく、自動で書き直した指示文が審査方針から外れる危険があります。指示文は人が管理し、どの過去事例を例示に入れるかを自動で選ぶほうが安全です。採点では見落としを最優先にします |
| 社内規程の問い合わせ | 検索と回答を分けて最適化 | 検索は機械の判定で回せるので最適化しやすい部分です。回答側は「分からないと言えるか」を採点に入れておかないと、最適化の結果として断らなくなります |
| 自社の Claude Code スキル | SkillOpt 型の上限付き編集 | スキルの実行を評価する試験を用意し(たとえば claude plugin eval)、差分の編集を検証で良くなったときだけ採用します。正解を用意しにくければ、Self-Supervised Skill Optimization の比べる方式が使えます |
6. 評価の仕組みに入れておくもの
改善の手法は、評価の仕組みの上に載ります。評価の仕組みが次の機能を備えていれば、ここで挙げた手法をあとから差し込めます。
- データを学習用・検証用・試験用に分けて管理できる
- 採点関数が点数と文章の理由の両方を返す(GEPA の入力になります)
- 実行の記録(途中の推論や道具の呼び出し)を残す(GEPA や SkillOpt の入力になります)
- 候補ごとの結果を例ごとに保存する(パレート前線の計算に要ります)
- プロンプトやスキルの版と、採用・却下の履歴を残す
参考資料
- Zhou ほか, Large Language Models Are Human-Level Prompt Engineers(APE)
- Yang ほか, Large Language Models as Optimizers(OPRO, ICLR 2024)
- Pryzant ほか, Automatic Prompt Optimization with “Gradient Descent” and Beam Search(EMNLP 2023)
- Yuksekgonul ほか, TextGrad: Automatic “Differentiation” via Text
- Melcer ほか, Textual Gradients are a Flawed Metaphor for Automatic Prompt Optimization
- Guo ほか, EvoPrompt(ICLR 2024)
- Fernando ほか, Promptbreeder
- Opsahl-Ong ほか, Optimizing Instructions and Demonstrations for Multi-Stage Language Model Programs(MIPRO, EMNLP 2024)
- Agrawal ほか, GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning(ICLR 2026 Oral)
- DSPy ドキュメント: GEPA
- Optimizing GEPA for production(Decagon)
- Zhang ほか, Agentic Context Engineering(ICLR 2026)
- Yang ほか, SkillOpt: Executive Strategy for Self-Evolving Agent Skills
- Wang ほか, SkillGrad: Optimizing Agent Skills Like Gradient Descent
- SkillAdam: Stable and Efficient Skill Evolution for Agents
- Peng ほか, Self-Supervised Skill Optimization
- Ding ほか, Agent Skill Evaluation and Evolution: Frameworks and Benchmarks
- Ramnath ほか, A Systematic Survey of Automatic Prompt Optimization Techniques(EMNLP 2025)
- Cui ほか, A Survey of Automatic Prompt Optimization with Instruction-focused Heuristic-based Search Algorithm(ACL 2025)
関連記事
Singularity Society はテクノロジー集団として MulmoClaude / MulmoTerminal / MulmoCast を開発しています。エンジニア・起業家向けの実践プログラム BootCamp も運営しています。
