Microsoft Researchは6月30日、AIエージェントに追加の作業手順や判断基準を与えるMarkdown形式のエージェントスキルSKILL.)
- SkillOpt: Agent skills as trainable parameters - Microsoft Research
- SkillOpt | Executive Strategy for Self-Evolving Agent Skills
AI agents often fail because their instructions, or skills, are manually modified with no guarantee of improvement. Learn how SkillOpt turns skill editing into a training process, making agent behavior more reliable without changing model weights: https://
— Microsoft Research (@MSFTResearch) June 30, 2026t. pic.co/ 6o0O8c3d4x twitter. com/ TlfpieGJ8m
AIエージェントの性能は、ツールを呼び出せるかだけでなく、どの手順でツールを使い、結果を検証し、出力まで進めるかにも左右される。手作業中心のスキル編集では、もっともらしい修正でも実際の性能を下げたり、指示が長くなって意図しない方向へ変わったりする可能性があった。SkillOptは、エージェントに与えるスキルを
仕組みは、実行、振り返り、更新を繰り返してスキルを改善するループで構成される。まず対象エージェントが現在のスキルを使って、正解または採点基準のあるタスク群を実行する。続いて、スキル編集を担当するモデル
ただし、SkillOptで改善できるかどうかは、スキル変更の効果を検証できるデータを用意できるかに左右される。検証結果を見てスキルの変更を採用する仕組みであるため、エージェントに実行させる入力タスク、理想の出力または自動採点できる判定基準を、train、val、testに分けて用意しておく必要がある。公開ベンチマークは再現実験や試用には使えるが、自社業務や独自スキルを改善したい場合は、その業務に近い評価データと採点方法を別途用意することになる。
実装はGitHubのmicrosoft/
具体的な手順として、公式ガイドでは、リポジトリに含まれる設定ファイルとスクリプトに加えて、モデル接続情報lucadiliello/から元データを取得する。取得後は、リポジトリ側が用意したtrain、val、testに入れるか」
# 公式ガイドの学習例は、リポジトリ内のscripts/train.pyを使う。
# PyPI版もあるが、ここでは設定ファイルやスクリプトを使うためソースを取得する。
git clone https://github.com/microsoft/SkillOpt.git
cd SkillOpt
# 取得したリポジトリからSkillOpt本体をインストールする。
# ベンチマークによっては追加の依存関係やデータ準備が必要になる。
pip install -e .
# 公式ガイドでは、リポジトリ自体にはベンチマークの実データを含めていない。
# SearchQAは、質問、参照文脈、正答を含む質問応答ベンチマーク。
# SearchQAの場合は、Hugging Faceのlucadiliello/searchqaから元データを取得する。
# ダウンロード容量は公式ガイドで約6.5GBとされている。
# 取得したデータを、リポジトリ内のサンプルID一覧に合わせて次のような分割データにする。
# data/searchqa_split/
# train/items.json # スキル変更の材料にする実行履歴を集めるタスク
# val/items.json # 候補スキルを採用するか判定する検証用データ
# test/items.json # 最後に性能を確認する保留データ
# items.jsonはタスクの配列。SearchQAならid、question、context、answersなどを含める。
pip install datasets
python - <<'PY'
import json, os
from datasets import load_dataset
ds = load_dataset("lucadiliello/searchqa")
by_key = {r["key"]: r for split in ds.values() for r in split}
for split in ["train", "val", "test"]:
ids = json.load(open(f"data/searchqa_id_split/{split}/items.json"))
items = []
for x in ids:
r = by_key[x["id"]]
items.append({
"id": r["key"],
"question": r["question"],
"context": r["context"],
"answers": r["answers"],
})
os.makedirs(f"data/searchqa_split/{split}", exist_ok=True)
json.dump(items, open(f"data/searchqa_split/{split}/items.json", "w"))
print(split, len(items))
PY
# SearchQA向けの設定で、スキルを最適化する例。
# --config: 利用するベンチマーク設定ファイル。
# --split_dir: train / val / testに分けた採点用データの場所。
# --azure_openai_endpoint: Azure OpenAIのエンドポイント。
# --optimizer_model: 実行履歴を分析し、スキルの変更案を作るモデル名またはデプロイ名。
# APIなどで接続するモデルを指定し、成功・失敗の傾向から編集案を出させる。
# --target_model: 現在のスキルを使ってタスクを実行する対象モデル。
# 最終的にbest_skill.mdを読み込ませる相手にあたる。
# train.pyは、設定に従って実行、振り返り、編集、検証のループを回す。
python scripts/train.py \
--config configs/searchqa/default.yaml \
--split_dir data/searchqa_split \
--azure_openai_endpoint https://your-resource.openai.azure.com/ \
--optimizer_model gpt-5.5 \
--target_model gpt-5.5
# 既存のスキルを評価するだけなら、同梱スキルを指定して評価用スクリプトを実行する。
# --skill: 評価するスキルファイル。ここでは同梱のSearchQA向けスキルを指定。
# --split: 評価対象の分割。valid_unseenはテスト用の保留データに相当する。
# --split_dir: 評価に使うデータ分割の場所。
python scripts/eval_only.py \
--config configs/searchqa/default.yaml \
--skill ckpt/searchqa/gpt5.5_skill.md \
--split valid_unseen \
--split_dir data/searchqa_split \
--azure_openai_endpoint https://your-resource.openai.azure.com/
スキルの最適化を実行すると、設定に従って実行、振り返り、編集、検証のループが進み、結果はoutputs/<run_に保存される。検証で最良と判定されたスキルは、best_として出力される。
評価は、SearchQA、SpreadsheetBench、OfficeQA、DocVQA、LiveMathematicianBench、ALFWorldの6ベンチマークで実施された。7種類のモデルを対象に、直接チャットでの実行、Codex、Claude Codeの3実行モードそれぞれで、スキルなしで実行した場合と、SkillOptで最適化した最終スキルを使った場合の差を確認している。GPT-5.
最適化されたスキルは、モデルの規模や実行環境をまたいで再利用できる点も特徴となる。たとえば、Codex内の実行環境で最適化したスプレッドシート向けスキルをClaude Codeに移しても性能が向上しており、特定のツール環境だけに依存した手順ではなく、より一般的な作業ロジックを獲得している可能性がある。また、最終的な成果物はbest_という自然言語のファイルで、中央値で約920トークンだった。論文で示されたベンチマーク別の事例では、最終版のスキルに実際に反映された編集は少数で、追加、削除、置換などの操作はおおむね1〜4件にとどまったとしている。指示を増やし続けるのではなく、効果を確認できた小さな修正だけを採用していることがうかがえる。
著者のYifan Yang氏は関連投稿で、SkillOptが公開から1カ月でGitHubのスターが10.