エージェントミドルウェアとは、LangChain が LangChain 1.0 で導入した抽象化であり、エージェントの標準ループを捨てることなくエージェントをカスタマイズするためのものである。コアループはモデルノードとツールノードという 2 つの部分をそのまま保ち、ミドルウェアは 3 つのフックを通じてそこに接続する。before_model はモデル呼び出しの前に実行され、状態を更新したり他のノードへジャンプしたりできる。after_model はモデル呼び出しの後に実行され、同じ能力を持つ。modify_model_request はモデル呼び出しの前に実行され、そのリクエストに限って、ツール、プロンプト、メッセージのリスト、モデル、モデルの設定、出力形式、ツール選択を変更する。ミドルウェアは独自の状態スキーマやツールを追加することもできる。1 つのエージェントに複数のミドルウェアを与えることができ、それらは Web サーバーにおけるミドルウェアと同じように動作する。すなわち、モデル呼び出しに向かう途中では順番に、戻る途中では逆順に実行される。

用法

LangChain は エージェントミドルウェア で、ミドルウェアを エージェントフレームワーク に共通する問題への答えとして提示している。単純なモデル・プロンプト・ツールのループの上に構築された抽象化では コンテキストエンジニアリング に対する制御が少なすぎるため、ユースケースが自明でなくなると、開発者はそれを離れて独自のコードに移ってしまうという問題である。LangChain が以前に取った対策はエージェントにパラメータを追加すること(動的プロンプト、独自の状態、モデル前後のフック、呼び出しごとのモデル選択)だったが、この投稿によれば、それらは数が多くなり、互いに依存し合い、組み合わせることも再利用可能なバリエーションとしてパッケージ化することも難しくなった。ミドルウェアは、そうしたカスタマイズのポイントを、代わりに合成可能な単位として再パッケージ化したものである。

1.0 のアルファ版に同梱された 3 つの実装が、フックの使われ方を示している。割り込みによるツール呼び出しの ヒューマン・イン・ザ・ループ レビュー(after_model を使用)、メッセージが閾値を超えたときの要約(before_model を使用)、そしてメッセージへの Anthropic のプロンプトキャッシュのタグ付け(modify_model_request を使用)である。LangChain はまた、ミドルウェアによって、以前は個別の LangGraph エージェントとして提供していたエージェントアーキテクチャ(supervisor、swarm、bigtool、deepagents、reflection)を再現できること、そして既製のミドルウェアやコミュニティによるミドルウェアを提供する予定であることも述べている。これらはアルファ版の時期に、ベンダーが自社のフレームワークについて述べたものである。

後の LangChain の投稿 ハーネスエンジニアリングによる Deep Agents の改善 は、ミドルウェアを(そこでは LangChain の用語で、モデル呼び出しやツール呼び出しの周囲に置くフックのことだと説明されている)、システムプロンプトやツールと並ぶ 3 つのハーネスの調整つまみの一つとして用いており、自社のコーディングエージェントのために作った 3 つのミドルウェアを説明している。LocalContextMiddleware はエージェントの起動時に実行され、作業ディレクトリとその親ディレクトリ・子ディレクトリをマッピングし、Python のインストールなどのツールを見つけ出す。これにより、そうしたコンテキストはエージェントが自ら探し出すのではなく注入される。LoopDetectionMiddleware はツール呼び出しのフックを通じてファイルごとの編集回数を追跡し、1 つのファイルに一定回数の編集が行われると、アプローチを考え直すよう促すコンテキストを追加する(ドゥームループ を参照)。PreCompletionChecklistMiddleware はエージェントが終了する前に割り込み、タスクの仕様に照らした検証を一通り行うよう促す。この投稿は、こうした決定論的なコンテキスト注入を、プロンプティングを補完するものとして提示している。

適用される場面

このパターンが前提としているのは、標準的なフレームワークのループの上に構築されたエージェントであり、開発者がそのループを維持しながら、何がモデルに入るか、ステップがどういう順序で進むかを制御したい場合である。LangChain の説明では、その代替策はフレームワークを離れて独自のコードに移ることである。このパターンが対処するリスクは、その前身が生み出したもの、すなわち調整・組み合わせ・既製のバリエーションとしての提供が難しい、互いに作用し合う多数のパラメータである。これは一つのベンダーによる設計であり、そのベンダーの発表の中で説明されたもので、評価は報告されていない。

関連用語