← 返回列表

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の各ステップ実行後に振り返りを行ったりします。

评论

暂无已展示的评论。

发表评论(匿名)