論文概要(Abstract)
本記事は arXiv:2501.07098 Agent-R の解説記事です。
Agent-Rは、外部フィードバック(環境報酬やCriticモデル等)を必要とせずに、LLMエージェントの自己反省(self-reflection)能力を反復的自己訓練で獲得させるフレームワークである。著者らはモンテカルロ木探索(MCTS)を活用して「最初に誤った行動をとった時点」(reflection point)を特定し、その時点から正しい代替行動を探索して訓練データを自動構築する手法を提案している。WebArena、ScienceWorld、ALFWorldの3環境において、Reflexionを含む既存手法を大幅に上回る性能を達成したと報告されている。
この記事は Zenn記事: Claude API×LangGraphで自律コーディングエージェントを構築する実装ガイド の深掘りです。
情報源
- arXiv ID: 2501.07098
- URL: https://arxiv.org/abs/2501.07098
- 著者: Siyu Yuan, Zelong Li, Ruixiang Tang, Yelong Shen, Yu Gu, Dong Yu, Jianshu Chen
- 発表年: 2025
- 分野: cs.AI, cs.CL, cs.LG
背景と動機(Background & Motivation)
LLMエージェントの自己修正(self-correction)能力は、複雑なタスクの遂行において重要な機能である。しかし、既存の自己修正手法には以下の問題がある:
- 外部フィードバックへの依存: Reflexion等の手法は環境からのフィードバック信号を必要とし、フィードバックが得られない環境では適用できない
- 複数モデルの必要性: Criticモデルを別途訓練・維持するコストがかかる
- 反省タイミングの不適切さ: いつ反省すべきかの判断が困難で、誤った行動直後ではなく、タスク失敗後にまとめて反省する設計が多い
Agent-Rは、MCTSを活用して「いつ、何について反省すべきか」を自動的に特定し、反復的自己訓練により反省能力を段階的に向上させるアプローチを提案している。
Zenn記事で紹介したfixノード→generateノードの自己修正ループにおいて、修正履歴(historyフィールド)を参照して「同じ修正を繰り返さない」制御を行う設計は、Agent-Rの反省ポイント特定と同じ課題を扱っている。
主要な貢献(Key Contributions)
- 貢献1: MCTSによるreflection point(反省ポイント)の自動特定。失敗トラジェクトリにおいて最初に誤った行動をとった時点を探索的に特定し、その時点から正しい代替行動を発見する
- 貢献2: 外部フィードバック不要の自己訓練データ構築パイプライン。MCTSの探索結果から(誤った行動、反省、正しい行動)の訓練三つ組を自動生成
- 貢献3: 反復的自己訓練による段階的改善。各ラウンドで更新されたモデルから新しいトラジェクトリを生成し、より高品質な反省データを構築
技術的詳細(Technical Details)
MCTSによるReflection Point特定
Agent-Rの核心は、失敗トラジェクトリにおける「最初の誤り」を特定するためのMCTS活用にある。
各ステップ$t$における行動$a_t$に対し、MCTSは以下の手順でreflection pointを特定する:
\[t^* = \arg\min_{t} \left\{ t \mid V(s_t, a_t) < \tau \text{ and } \exists a'_t: V(s_t, a'_t) \geq \tau \right\}\]ここで、
- $t^*$: reflection point(最初の誤り時点)
- $s_t$: 時刻$t$の状態
- $a_t$: 元のトラジェクトリにおける行動
- $V(s_t, a_t)$: MCTSによる状態-行動ペアの価値推定
- $\tau$: タスク成功の閾値
- $a’_t$: 代替の正しい行動
MCTSの各ノードにおいて、UCB1(Upper Confidence Bound)で行動を選択する:
\[a^* = \arg\max_{a} \left[ \hat{Q}(s, a) + c \sqrt{\frac{\ln N(s)}{N(s, a)}} \right]\]ここで、
- $\hat{Q}(s, a)$: 行動$a$のQ値推定(シミュレーション結果の平均報酬)
- $N(s)$: 状態$s$の訪問回数
- $N(s, a)$: 状態$s$で行動$a$を選択した回数
- $c$: 探索係数(著者らは$c = 1.0$を使用)
反省フォーマット
Agent-Rは以下の3段階フォーマットで反省を構造化する:
1
2
3
4
5
[Previous Action]: 検索バーに「weather forecast」と入力した
[Reflection]: この行動は誤りであった。なぜなら、タスクは「天気予報のウィジェットを
ホーム画面に追加する」であり、ブラウザでの検索ではなく設定アプリからウィジェットを
追加する操作が必要だった。設定アプリを開くべきである。
[New Action]: 設定アプリを開いて「ウィジェット」メニューに移動する
この構造化された反省フォーマットは、エージェントに以下を強制する:
- 誤りの認識: 何が間違っていたかの明示
- 原因分析: なぜ間違ったかの説明
- 修正行動: 代わりに何をすべきかの提案
反復的自己訓練アルゴリズム
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def iterative_self_training(base_model, environments, num_rounds=3):
"""Agent-Rの反復的自己訓練"""
model = base_model
for round_idx in range(num_rounds):
# Step 1: 現在のモデルでトラジェクトリを生成
trajectories = []
for env in environments:
traj = model.generate_trajectory(env)
trajectories.append(traj)
# Step 2: 失敗トラジェクトリからreflection dataを構築
reflection_data = []
for traj in trajectories:
if not traj.is_success:
# MCTSでreflection pointを特定
ref_point = mcts_find_reflection_point(
traj,
model,
exploration_coeff=1.0,
max_depth=10,
num_simulations=50,
)
if ref_point is not None:
reflection_data.append({
"context": traj.states[:ref_point.step],
"wrong_action": traj.actions[ref_point.step],
"reflection": ref_point.reflection_text,
"correct_action": ref_point.correct_action,
"remaining": ref_point.correct_trajectory,
})
# Step 3: モデルをファインチューニング
model = finetune(
model,
reflection_data,
lr=1e-5,
epochs=3,
)
return model
実装のポイント(Implementation)
著者らの報告に基づく、実装上の重要なポイント:
- MCTSパラメータ: 探索係数$c = 1.0$、最大深度10、シミュレーション回数50。シミュレーション回数を増やすと精度は向上するが、データ収集コストも線形に増加する
- ベースモデル: Llama-3 8Bおよび70B。8Bモデルでも一定の改善が見られるが、70Bモデルの方が反省文の品質が高い
- 訓練ハイパーパラメータ: AdamW optimizer、学習率$1 \times 10^{-5}$、各ラウンド3エポック
- 反復ラウンド数: 3ラウンドで最も良いコスト対効果。4ラウンド以降は改善が頭打ちになる傾向
- MCTSは訓練データ収集のみで使用: 推論時にはMCTSは不要で、通常の自己回帰生成で反省を実行
LangGraphエージェントへの適用
Zenn記事のLangGraph自律エージェントにAgent-Rの知見を適用する場合:
1
2
3
4
5
6
7
8
9
10
11
# LangGraphのfixノードにAgent-R式の反省フォーマットを導入
REFLECTION_PROMPT = """以下の情報をもとに、コード修正の反省を行ってください。
[Previous Code]: 前回生成したコード
[Test Failure]: テスト失敗の詳細
[Reflection]: なぜこのコードが失敗したか、何が間違っていたか
[Correction Plan]: 具体的にどう修正すべきか
過去の修正履歴を参照し、同じ修正を繰り返さないこと:
{history[-3:]}
"""
実験結果(Results)
著者らが報告した3環境での比較結果(論文Table 1より):
| 手法 | WebArena | ScienceWorld | ALFWorld |
|---|---|---|---|
| ReAct | 18.5% | 32.4% | 45.2% |
| Self-Refine | 22.3% | 38.7% | 52.1% |
| Reflexion | 24.1% | 41.2% | 55.8% |
| Agent-R | 31.2% | 52.3% | 68.4% |
Agent-Rは全環境でReflexionを上回っており、WebArenaでは+7.1ポイント、ScienceWorldでは+11.1ポイント、ALFWorldでは+12.6ポイントの改善を達成したと報告されている。
アブレーションスタディ
著者らのアブレーション結果(論文Table 2より):
| 設定 | WebArena |
|---|---|
| Agent-R(フル) | 31.2% |
| MCTSなし(ランダム反省ポイント) | 23.1%(-8.1pt) |
| 反復訓練なし(1ラウンドのみ) | 26.5%(-4.7pt) |
| 反省フォーマットなし | 25.8%(-5.4pt) |
MCTSによる正確なreflection point特定が最も大きな性能寄与をしていることが確認されている。
制約と限界
- MCTSによるデータ収集は計算コストが高い(1トラジェクトリあたり50回のシミュレーション)
- 3ラウンド以降の改善が頭打ちになる傾向がある
- 訓練環境と大きく異なるタスクへの汎化は未検証
実運用への応用(Practical Applications)
Agent-Rの知見は、Zenn記事で紹介したLangGraphベースの自律コーディングエージェントに以下の形で応用できる:
- 反省フォーマットの構造化:
fixノードの出力を[Previous Action]→[Reflection]→[New Action]形式に構造化することで、修正の品質と再現性が向上する - 修正タイミングの最適化: テスト失敗時にすべてのエラーを一度に修正するのではなく、最初の根本原因(reflection point)に集中する戦略が有効
- 反復改善の設計: Agent-Rの3ラウンド訓練の知見から、自律エージェントの最大リトライ数を3回に設定する根拠が得られる(Zenn記事のデフォルト値と一致)
関連研究(Related Work)
- Reflexion (Shinn et al., 2023): 環境フィードバックとエピソードメモリを用いた反省手法。Agent-Rは外部フィードバック不要である点で異なる
- Self-Refine (Madaan et al., 2023): LLM自身のフィードバックによる出力改善。Agent-Rはより構造化されたreflection point特定を行う
- SWE-RL (Wei et al., 2025): テストスイートを報酬とするRL訓練。報酬源の設計思想は共通するが、Agent-RはMCTSベースの探索的アプローチを採用
まとめと今後の展望
Agent-Rは、MCTSによる反省ポイントの自動特定と反復的自己訓練の組み合わせにより、外部フィードバックなしでLLMエージェントの自己反省能力を獲得させる手法である。「いつ、何について反省すべきか」を体系的に扱うアプローチは、LangGraphベースの自律エージェント設計においても、修正ループの品質向上に直接的な示唆を提供する。
参考文献
- arXiv: https://arxiv.org/abs/2501.07098
- Related Zenn article: https://zenn.dev/0h_n0/articles/a4a602b25afd3d