AIシリーズ面接問題6:AIエージェントの3つの中核的方法論:ReAct、Plan-and-Solve、Reflectionについて説明してください
AIエージェントの3つの中核的方法論:ReAct、Plan-and-Solve、Reflection
AIエージェントは、環境を自律的に認識し、意思決定を行い、行動を実行するインテリジェントエンティティです。その中核的方法論は主に3つあります:ReAct、Plan-and-Solve、Reflection。以下でそれぞれ紹介し、フローチャートとコード例を補足します。
1. ReAct(Reasoning + Acting)
中核思想:推論(Reasoning)と行動(Acting)を交互に行う。エージェントは各ステップでまず現在の状態と次の計画を考え(推論)、次にアクション(ツールの呼び出し、情報検索など)を実行し、その結果に基づいてさらに推論を続けます。
フローチャート:
[初期状態] → [推論: 次のステップを考える] → [行動: アクションを実行] → [結果を観察] → [推論: 計画を更新] → ... → [最終回答]
サンプルコード(疑似コード):
def react_agent(question):
context = []
while not solved:
# 推論:思考ステップを生成
thought = llm.generate_thought(question, context)
# 行動:思考に基づいてアクションを選択
action = llm.choose_action(thought)
# アクションを実行し、観察を得る
observation = execute_action(action)
# 思考、行動、観察をコンテキストに追加
context.append((thought, action, observation))
return final_answer
例:
- ユーザーが「今日の北京の天気は?」と質問
- エージェントが推論:「天気APIを調べる必要がある。都市名と日付が必要。」
- 行動:天気APIを呼び出す(パラメータ:北京、今日)
- 観察:「晴れ、25°C」が返ってくる
- 推論:「情報を得たので回答できる。」
- 出力:「北京は今日晴れ、25°Cです。」
2. Plan-and-Solve
中核思想:まず完全な計画(Plan)を立て、その後段階的に実行(Solve)する。計画段階で複雑なタスクをサブステップに分解し、実行段階で順番に完了し、中間結果に応じて計画を調整する場合もあります。
フローチャート:
[タスク] → [計画立案: サブステップに分解] → [ステップ1を実行] → [ステップ2を実行] → ... → [ステップNを実行] → [最終回答]
サンプルコード:
def plan_and_solve(task):
# 計画段階
plan = llm.generate_plan(task) # 例:["資料検索", "情報整理", "レポート作成"]
context = {}
for step in plan:
# 各ステップを実行
result = execute_step(step, context)
context[step] = result
# 結果を統合
final = llm.synthesize(context)
return final
例:
- タスク:「AIエージェントに関するブログを書く」
- 計画:
1. AIエージェントの定義と最新動向を検索
2. 重要なポイントを読んで整理
3. ブログのアウトラインを作成
4. 内容を埋める
5. 校正して公開
- 実行:各ステップを順に完了し、最終的にブログを出力。
3. Reflection
中核思想:エージェントが実行中または実行後に、自身の行動を振り返り(Reflection)、結果を評価し、その後の行動を改善する。自己批判、エラー修正、戦略最適化などを含みます。
フローチャート:
[行動] → [結果を観察] → [振り返り: 成功か評価] → [失敗の場合: 戦略を調整] → [再行動] → ... → [成功]
サンプルコード:
def reflection_agent(task):
max_attempts = 3
for attempt in range(max_attempts):
action = llm.generate_action(task)
result = execute(action)
# 振り返り
reflection = llm.reflect(task, action, result)
if reflection['success']:
return result
else:
# 振り返りに基づいてタスク記述や戦略を調整
task = reflection['improved_task']
return None
例:
- タスク:「1234 * 5678 を計算」
- 行動:直接計算し、結果 7006652 を得る
- 振り返り:計算過程をチェックし、桁上げエラーを発見
- 調整:再計算し、正しい結果 7006652 を得る(実際は正しい)
- それでも間違っている場合は、正しくなるまで振り返りを続ける。
まとめと比較
| 方法論 | 特徴 | 適用シナリオ |
|---|---|---|
| ReAct | 推論と行動を交互に行い、動的に調整 | リアルタイムの情報やり取りが必要なタスク(例:QA、検索) |
| Plan-and-Solve | 計画を先に立ててから実行、構造化された分解 | 複雑な多段階タスク(例:文章作成、データ分析) |
| Reflection | 自己振り返りと修正、反復最適化 | 高い正確性が求められるタスク(例:数学計算、コード生成) |
実際の応用では、これらを組み合わせることがよくあります。例えば、ReActにReflectionメカニズムを追加したり、Plan-and-Solveの各ステップ実行後に振り返りを行ったりします。
评论
暂无已展示的评论。
发表评论(匿名)