/autoresearch — 自己改善プロンプト最適化
Karpathy 自己研究パターン:生成 → 評価 → スコア → 保持/破棄 → 突然変異 → 繰り返し
アーキテクチャ
コアエンジン:crates/sgr-agent/src/autoresearch.rs(Rust モジュール、genai フィーチャー)
ダッシュボード:skills/autoresearch/dashboard.py(Python、スタンドアロンビューアー)
テストケース:skills/autoresearch/test_cases/*.json(include_str! でコンパイル時に埋め込み)
ターゲット
| ターゲット | 最適化対象 | 評価指標 |
|---|---|---|
tool-selection | エージェントのツール説明 | 66のテストタスクでのツール選択正解率 |
system-prompt | エージェントシステムプロンプト (SOUL.md) | 意思決定品質:適切なツール+一貫した推論(4基準) |
skill | 任意の SKILL.md ファイル | 二値基準合格率(4基準) |
decision-parser | 構造化出力スキーマ | パース成功率+フィールド品質(5基準) |
使用方法(Rust API)
use sgr_agent::autoresearch::{AutoResearch, Config, Target};
let config = Config {
target: Target::ToolSelection,
batch_size: 10,
cycle_secs: 120,
gen_model: "gemini-2.5-flash".into(),
eval_model: "claude-sonnet-4-6".into(),
data_dir: "autoresearch_data/tool-selection".into(),
};
let ar = AutoResearch::new(config);
ar.run(20).await?; // 20サイクル
クイックスタート(CLI — rc-cli に組み込み済みの場合)
# ツール選択の最適化(最も効果的)
cargo run -- autoresearch tool-selection --cycles 20
# システムプロンプトの最適化
cargo run -- autoresearch system-prompt --cycles 10
# 特定のスキルを最適化
cargo run -- autoresearch skill --name delegate --cycles 15
# 意思決定パーサーの最適化
cargo run -- autoresearch decision-parser --cycles 10
# ダッシュボード(Python、スタンドアロン)
python3 skills/autoresearch/dashboard.py --target tool-selection --port 8501
仕組み
各サイクル:
- 生成 — 現在のプロンプトから N 個の出力を生成(Gemini、エージェントと同じモデル)
- 評価 — 各出力を二値評価基準に対して評価(Claude Sonnet、異なるモデルで客観性を担保)
- スコア — 全出力の合格基準の合計
- 保持 — スコアが best_score より高ければ保持、そうでなければ破棄
- 突然変異 — 勝利プロンプトを突然変異させ改善を試行
- ログ — ダッシュボード追跡用に JSONL に記録
- 待機 — 次のサイクルまで待機(デフォルト2分)
環境変数
GEMINI_API_KEY— 生成用(エージェントが使用するモデルと同じモデルでテスト)ANTHROPIC_API_KEY— 評価・突然変異用(異なるモデルで客観性を担保)
ヒント
- 二値評価 — yes/no 基準が最も効果的。リッカート尺度は避けること。
- 過度な制約は避ける — 狭い基準を多く設定すると、モデルが評価をゲームする。
- 10〜20サイクルで大幅な改善が期待できる。
- 結果の適用 — 最良プロンプトは
data/<target>/best_prompt.txtに保存される。
コスト
- ツール選択:約 $0.05/サイクル(低コスト — テストごとに1回の LLM 呼び出し+文字列一致評価)
- システムプロンプト:約 $0.20/サイクル(生成+テストごとの LLM 評価)
- スキル:約 $0.30/サイクル(生成+テストごとの LLM 評価、出力が長い)
- 意思決定パーサー:約 $0.15/サイクル(生成+部分的なローカル評価)
- 20サイクルで約 $1〜6(ターゲットによる)。永続的な改善が得られる。