📝

なぜAI Agentは失敗するのか?正確率を上げるアプローチまとめました

に公開

はじめに

Claude CodeやCursor、Manusなど、驚くほど賢いAI Agentが次々と登場している一方で、企業が本番環境への導入を検討すると、ある壁にぶつかります。それは「不安定性」です。LLMベースのAI Agentは、同じ指示でも毎回異なる結果を返すことがあり、95%以上の正確率が求められる業務では、この不確実性が致命的になるのです。

なぜAI Agentは失敗するのでしょうか。METRが2025年3月に発表した研究結果によると、4分以内の短いタスクではほぼ100%の成功率を達成する一方、4時間を超える長時間タスクでは成功率が10%未満まで低下します。最新のClaudeモデルでさえ、50%の成功率を維持できるのは約50分のタスクまでという現実があります。

では、どうすればAI Agentの正確率を向上させることができるのでしょうか。本記事では、最新研究とプロダクション事例を基に、実証済みの6つのアプローチを紹介します。

正確率を向上させる6つの技術

1. 推論アーキテクチャの進化

AI Agentの推論能力を大きく改善する3つのアーキテクチャパターンを紹介します。

まず注目したいのがChain-of-Thought (CoT)です。段階的に推論プロセスを示すことで、複雑な問題解決能力を向上させる手法になります。

実装例を見てみましょう:

# 通常のプロンプト
prompt = "果樹園に15本の木があります。今日作業者が植樹します。作業後は21本になりました。何本植えましたか?"

# Chain-of-Thoughtプロンプト  
cot_prompt = """
問題を段階的に解きましょう:
1. 最初の木の本数: 15本
2. 作業後の木の本数: 21本  
3. 植えた本数 = 21 - 15 = 6本
答え: 6本
"""

この段階的推論により、GSM8Kベンチマークで17.7%→78.7%の劇的向上を実現しています。

次のReAct(Reasoning and Acting)は、思考と行動を組み合わせた革新的なアプローチです。

ReActの動作パターン:

  1. Thought: 「この歴史的事実を確認するにはWikipediaで検証が必要」
  2. Action: wikipedia_search("織田信長 本能寺の変 1582年")
  3. Observation: 「1582年6月2日、本能寺にて明智光秀により討たれた」
  4. Thought: 「情報が一致している。回答を生成しよう」
def react_loop(query):
    context = []
    while not is_complete(context):
        thought = generate_thought(query, context)
        action = decide_action(thought)  
        observation = execute_action(action)
        context.append({"thought": thought, "action": action, "observation": observation})
    return generate_final_answer(context)

このプロセスにより、HotpotQAやFeverでのハルシネーション問題を効果的に克服しています。

そしてTree-of-Thoughts (ToT)は、さらに高度な推論を可能にします。

Game of 24の解法プロセス(数字:4, 5, 6, 10):

探索ツリーの構築

  • パス1: 10 - 4 = 65 × 6 = 3030 - 6 = 24
  • パス2: 5 × 6 = 3010 - 4 = 630 - 6 = 24
  • パス3: 4 + 5 = 9 → 行き詰まり → バックトラック
class ToTSolver:
    def solve(self, numbers, target=24):
        solutions = []
        self.dfs(numbers, [], solutions, target)
        return self.evaluate_best(solutions)
    
    def dfs(self, remaining, operations, solutions, target):
        if len(remaining) == 1:
            if remaining[0] == target:
                solutions.append(operations)
            return
        
        # すべての可能な操作を試す
        for op in ['+', '-', '*', '/']:
            new_state = self.apply_operation(remaining, op)
            if self.is_promising(new_state, target):
                self.dfs(new_state, operations + [op], solutions, target)

この手法で従来の4%から74%へと成功率が劇的に向上しました。

2. Context Engineering

2025年に特に注目を集めているのが、Context Engineeringという概念です。これは「適切な情報を、適切なタイミングで、適切な形式で提供する」技術を指します。

特に効果的なのが動的ツール選択です。

動的ツール選択の実装例:

問題: 100個のツールから最適なツールを選択
解決策: RAGによる意味的検索で30個以下に絞り込み

class ContextAwareToolSelector:
    def __init__(self, all_tools):
        self.tools = all_tools
        self.vector_store = self.create_tool_embeddings()
    
    def select_tools(self, task_description, max_tools=30):
        # タスクとツール記述の類似性を計算
        relevant_tools = self.vector_store.similarity_search(
            task_description, k=max_tools
        )
        return relevant_tools
        
    def create_tool_embeddings(self):
        # ツール記述をベクトル化して検索可能にする
        descriptions = [tool.description for tool in self.tools]
        return VectorStore.from_texts(descriptions)

効果:

  • ツール選択正確率: 3倍向上
  • プロンプト長: 大幅短縮
  • モデル混乱: 大幅減少

もう一つ重要なのがエラーコンテキストの保持です。従来は失敗した操作をすぐに忘れさせていましたが、あえて失敗情報を残すことで、同じセッション内での学習を可能にしています。

# 失敗した操作を意図的に残す
context.append({
    "action": failed_action,
    "error": stack_trace,
    "lesson": "このアプローチは機能しない"
})

この手法により、AI Agentは同じミスを繰り返さなくなり、タスク完了までの試行回数が大幅に減少します。

3. Self-Consistency

AI Agentの出力が毎回異なるという問題を解決するのが、Self-Consistencyという手法です。

Self-Consistencyの投票メカニズム:

ステップ1: 同じ問題を複数回解く

  • 実行1: 「答えは42」
  • 実行2: 「答えは42」
  • 実行3: 「答えは40」
  • 実行4: 「答えは42」
  • 実行5: 「答えは44」

ステップ2: 多数決で最終回答を決定

def self_consistency(prompt, model, num_samples=5):
    responses = []
    for i in range(num_samples):
        response = model.generate(prompt, temperature=0.7)
        responses.append(extract_answer(response))
    
    # 多数決
    from collections import Counter
    vote_counts = Counter(responses)
    final_answer = vote_counts.most_common(1)[0][0]
    
    return final_answer, vote_counts

結果: 「42」が3票で採用

効果:

  • GSM8K: +17.9% 改善
  • AQuA: +12.2% 改善
  • 追加訓練: 不要

4. 階層型設計による複雑性の管理

複雑なタスクには、階層型のAgent設計が効果的です。

AgentOrchestraによる階層型タスク分解:

タスク例: 市場調査レポート作成

class PlanningAgent:
    def decompose_task(self, task):
        subtasks = [
            {"id": 1, "type": "data_collection", "desc": "市場データ収集"},
            {"id": 2, "type": "analysis", "desc": "競合分析"},
            {"id": 3, "type": "reporting", "desc": "レポート作成"}
        ]
        return subtasks
    
    def orchestrate(self, subtasks):
        results = {}
        for task in subtasks:
            agent = self.get_specialist_agent(task["type"])
            results[task["id"]] = agent.execute(task)
        return self.aggregate_results(results)

class DataCollectionAgent:
    def execute(self, task):
        # Web検索、API呼び出し等
        return self.collect_market_data()

class AnalysisAgent:
    def execute(self, task):  
        # 統計分析、トレンド分析
        return self.analyze_competitors()

実績:

  • GAIA Level 1: 92.45% 成功率
  • GAIA Level 2: 83.72% 成功率
  • 従来の一体型Agent: 約50%成功率

興味深いことに、100以上の本番Agent実装を分析した結果から12-Factor Agent原則が生まれました。この研究から、成功するAgentは「高度に自律的」ではなく、「よく設計されたソフトウェア」であることが判明しました。

特に重要なのは、タスクを3-10ステップに制限すること、各サブAgentをステートレスな純粋関数として実装すること、そして人間の介入を例外処理ではなく通常の操作として扱うことです。これらの原則に従うことで、70-80%で頭打ちになりがちな正確率を、さらに向上させることができます。

5. 知識検索の動的最適化

従来のRAG(Retrieval-Augmented Generation)は一度だけ検索して終わりでしたが、Agentic RAGでは、Agentが必要に応じて何度でも検索を繰り返します。

Agentic RAGの動的検索プロセス:

質問: 「2023年のAI分野の主要な技術革新は?」

class AgenticRAG:
    def query(self, question):
        context = []
        iteration = 0
        
        while not self.is_sufficient(context) and iteration < 5:
            # 現在のコンテキストに基づいて検索クエリを生成
            search_query = self.generate_query(question, context)
            results = self.vector_db.search(search_query)
            context.extend(results)
            
            # 情報の充足度を評価
            if self.evaluate_completeness(context, question) > 0.8:
                break
                
            iteration += 1
            
        return self.generate_answer(question, context)

実行例:

  • 検索1: "AI 2023 技術革新" → ChatGPT、GPT-4発見
  • 評価: 不完全 (0.4/1.0)
  • 検索2: "マルチモーダルAI 2023" → CLIP、DALL-E発見
  • 評価: やや不完全 (0.7/1.0)
  • 検索3: "LangChain ベクトルDB" → 包括的情報獲得
  • 評価: 充分 (0.85/1.0)

このような動的な検索により、従来の静的RAGと比較して大幅な精度向上を実現しています。

6. パフォーマンス最適化による実用性向上

最後に、実装面での最適化技術について説明します。これらは正確率を直接向上させるだけでなく、実用性を大幅に改善します。

最適化技術の実装例:

並列実行パターン

並列実行により、複数のタスクを同時に処理することで、大幅な高速化を実現できます:

import asyncio

async def parallel_processing(query):
    # 独立したタスクを並列実行
    tasks = [
        analyze_query(query),           # 問い合わせ分析
        search_knowledge_base(query),   # 知識検索  
        generate_response_candidates(query, num=3)  # 複数候補生成
    ]
    
    # 全タスクを同時実行
    analysis, knowledge, candidates = await asyncio.gather(*tasks)
    
    # 結果を統合して最終回答を生成
    final_response = await synthesize_response(analysis, knowledge, candidates)
    return final_response

この手法により、順次処理と比較して数倍から10倍以上の高速化を達成できます。

キャッシング戦略

効果的なキャッシュパターン:

  • 製品仕様クエリ: 90%ヒット率
  • 価格情報: 85%ヒット率
  • 技術サポート: 75%ヒット率
  • 総合コスト削減: 最大90% (Anthropic実装)

Few-shot プロンプティング

few_shot_examples = [
    {"入力": "製品Aの在庫状況", "出力": "在庫: 150個、納期: 3日"},
    {"入力": "顧客Bの購入履歴", "出力": "過去3ヶ月: 5回購入、合計15万円"},
    {"入力": "配送状況の確認", "出力": "出荷済み、到着予定: 明日14時"}
]

わずか数個の例を提供するだけで、タスクの精度を大幅に向上させることができます。

導入戦略

ここまで紹介した技術を実際に使う際、最も重要なのはタスクに応じた使い分けです。

要求正確率 推奨アプローチ 具体例
95%以上 純粋なAgentは不適。人間レビューまたはルールベース併用 医療診断、金融取引
80-90% Agent + 人間監督のハイブリッド カスタマーサポート、コード生成
80%以下 現行Agent技術で対応可能 コンテンツ生成、データ分析

現実的には、完璧を求めすぎずに「80%の精度で十分な業務」から始めることをおすすめします。そこで成功体験を積んでから、より要求レベルの高い業務へと展開していくのがおすすめでしょう。

おわりに

現在AI Agentの正確率向上は、もはやモデルの能力だけの問題ではありません。今回紹介した6つの技術をうまく組み合わせることで、モデルの再訓練なしでも実用レベルの正確率を達成できるようになってきました。
AI Agentの進化は日進月歩です。実際、タスク処理能力は7ヶ月ごとに倍増しているという研究結果もあります。今後も技術動向を追いながら、実践的な活用方法を探っていきたいところです。

参考資料

Accenture Japan (有志)

Discussion