2026年2月7日

クロスツールのシーケンス競合

オフィスの自動化シナリオにおいて、ツール間の実行タイミングの競合(Cross-Tool Temporal Conflicts) は最も一般的な問題の一つです。

例えば、Agentが「Excelレポートを生成(ツールA)してから、メールを送信(ツールB)」する必要がある場合です。Excelの生成が完了する前にメール送信ツールを呼び出したり、本来順序立てて(シリアルに)行うべきこれら2つのタスクを並列実行しようとしたりすると、添付ファイルのないメールが送信されたり、プログラムがエラーになったりします。

LangChainエコシステムにおいて、この問題を解決する核心は、**「確率的な予測」から「決定論的な制約」**へと移行することにあります。以下に、4つの階層別ソリューションを紹介します。

1. アーキテクチャ層:LangGraphを使用した状態遷移の強制(ベストプラクティス)

LangChain公式は現在、この種の問題解決に LangGraph を推奨しています。従来のAgent(AgentExecutorなど)はループベースであり、論理的な飛躍が起こりやすいのに対し、LangGraphではステートマシン(状態機械)を構築できます。

  • 原理: ワークフローをグラフ(Graph)として定義します。ノード(Node)はツールやLLMであり、エッジ(Edge)は依存関係を表します。
  • 解決策: 「Node A(レポート生成)」が完了して初めて「Node B(メール送信)」に遷移できると明示的に定義します。これにより、物理的に順序の乱れを禁止します。
  • 実装アプローチ:
    1. State(状態)の定義: report_path フィールドを含め、初期値を None とします。
    2. 条件付きエッジ(Conditional Edge)の定義: State.report_path が存在するかチェックします。存在すれば「メール送信ノード」へ、存在しなければ強制的に「レポート生成ノード」へ戻すか、エラーを出します。

2. ツール定義層:パラメータによる強い依存関係(ハード制約)

Pydanticによるツールパラメータの検証メカニズムを利用し、ツール定義レベルで「論理的なロック」を作成します。

  • 原理: LLMは必須パラメータがすべて埋まらない限り、ツールを呼び出せません。前工程の**成果物(Artifact)**を後工程の必須パラメータに設定することで、LLMに前工程の実行を強制します。
  • コード戦略:
    • ツールA (generate_report): 単なる “Done” ではなく、明確なIDやパス(例:{"status": "success", "file_id": "rpt_12345"})を返します。
    • ツールB (send_email): 入力パラメータ attachment_file_id必須項目として定義します。
  • 効果: Agentが send_email を呼び出そうとした際、file_id が不足していることに気づき、このIDを取得するためにまず generate_report を呼び出す必要があると「認識」します。

3. プロンプトエンジニアリング層:思考の連鎖(CoT)と依存関係の宣言

アーキテクチャを変更できない場合は、System Promptを強化してAgentの計画能力を誘導します。

  • 明示的な依存関係の宣言 (Dependency Declaration):プロンプトに「ツール使用プロトコル」セクションを追加します。”PROTOCOL: You MUST follow strict sequential order. Use search_data first. ONLY after search_data returns output, use analyze_data. NEVER call email_result until analyze_data is finished.”
  • 強制的なCoT (Chain of Thought):行動を起こす前に、計画を出力するようAgentに強制します。”Before calling any tool, output a plan: [Step 1], [Step 2 (Dependent on Step 1)]”

4. ランタイム層:人間による介入とチェックポイント(Human-in-the-loop)

重要なオフィスタスク(一斉メール送信、ファイル削除など)において、LLMの自律性だけに頼るのは不十分です。

  • メカニズム: LangGraphの interrupt_before 機能を使用します。
  • フロー:
    1. Agentがレポート生成を実行完了。
    2. Agentがメール送信を実行しようとする。
    3. システムが一時停止(Suspend)。
    4. 人間のユーザーに確認画面を表示:「メールを送信しようとしています。添付ファイルは report.xlsx です。続行しますか?」
    5. 人間が確認後、システムが再開。
    • これにより、タイミングの問題だけでなく、セキュリティの問題も解決します。

ソリューションの比較と推奨

ソリューション複雑度信頼性適用シナリオ
LangGraph (ステートマシン)極めて高い本番環境、複雑なオフィスフロー(承認、経費精算、部門間連携)
パラメータの強い依存関係2~3ステップの単純な依存関係(ダウンロード → 要約など)
プロンプトによる制約プロトタイプ開発、許容誤差が大きいシナリオ

まとめと推奨事項

あなたの「自動化オフィスAgent」には、LangGraph + パラメータの強い依存関係 の組み合わせを強く推奨します。

  1. LangGraph でマクロなプロセス(Excel作成 → メール送信)を編成する。
  2. パラメータ渡し でミクロなデータの正しい流れ(Excelのファイルパスをメールツールに確実に渡す)を保証する。