エージェントの途中へ、共通の制御を加える

前の節では、人の確認を待ってからツールを実行する制御を学びました。この節では、確認に加えて、入力の整理や上限の検査などを、エージェントの途中へ組み込む考え方を説明します。

エージェントの動作を変えたいとき、プロンプトの書き換えだけでは対応しきれない場合があります。モデルへ渡す履歴を整理する、利用できるツールを条件に応じて変える、回数の上限を超えたら止める、ツールのエラーを扱う、といった処理は、実行の途中へ組み込む必要があります。

LangChainのmiddlewareは、エージェントの実行の前後や、モデル・ツールの呼び出しの周囲へ処理を加える仕組みです。create_agentで組み立てるエージェントに、共通の方針や制御を組み合わせるために利用します。単独で動く別のAIではなく、エージェントの動かし方を調整する部品です。

指示で期待することと、処理で強制すること

「何度も検索しないでください」という指示は、モデルに望ましい行動を伝えます。一方、呼び出し回数を数え、上限へ達したら実際に次の呼び出しを止める処理は、実行を制御します。期待を伝えることと、実行条件を強制することには違いがあります。

同じように、「申請登録の前に確認する」という方針は、前の節で説明した確認待ちの仕組みと組み合わせる必要があります。middlewareは、このようにプロンプトだけでは保証できない段階へ制御を加えるために役立ちます。ただし、提供される機能を組み合わせれば、すべての業務ルールが自動で完成するわけではありません。

たとえば「これからモデルを呼ぶ直前」に上限を確かめ、「ツールを動かす直前」に人の承認が必要かを調べ、「呼び出しが返った直後」に利用量を記録する、という置き方が考えられます。どのタイミングへ何を差し込むかが、middlewareを設計する際の焦点です。

コンテキストを、その時点の仕事へ合わせる

第3章では、保存した情報とモデルへ渡す情報を分けました。エージェントでは、ツールを使うたびに新しい情報が加わるため、どの段階で何を渡すかがさらに重要になります。利用者の依頼、過去の結果、今回利用できるツールが、その時点の仕事に合っている必要があります。

必要な情報を、適切な形式で、その呼び出しに合わせて渡す設計をコンテキストエンジニアリングと呼びます。単に長い指示文を書くことではありません。関係の無いツールを減らす、長い履歴を要約する、直前の検索結果を整理する、といった操作も含みます。

たとえば規程を説明する段階では、検索結果の本文と出典が重要です。申請を登録する段階では、確定した申請内容と、操作を許可する条件が重要になります。同じエージェントの中でも、段階によって必要な情報が変わります。

runtime contextは、信頼できる実行情報を渡す

モデルが生成した引数と、アプリケーションが把握している利用者情報は、別の経路で扱えます。LangChainのruntime contextは、利用者IDや接続先など、その実行に必要な情報をツールやmiddlewareへ渡すために使えます。会話の途中でモデルに本人の識別子を自由に決めさせる必要はありません。

runtimeは、プログラムが実行されるときの仕組みを指します。runtime contextは、その一回の実行へアプリケーションから渡す設定や情報です。モデルへ見せる入力全体を指す「コンテキスト」とは、使う場所が違います。runtime contextに置いた情報が、そのまま自動的にモデルへ送られるわけではありませんが、ツールがその情報を結果に含めればモデルへ渡る可能性があります。

情報を置く場所主な役割
モデルへ渡すコンテキスト今回の生成のための質問・方針・履歴・資料。
state(状態)処理の途中や同じ会話で引き継ぐ情報。
Store会話をまたいで保存・取得する情報。
runtime context今回の実行に必要な利用者情報や接続先など。

たとえば本人の申請状況を調べるツールでは、質問文に書かれた名前よりも、ログインによって確認された本人情報を利用する方が適切です。ただし、contextへ値を入れる前の認証と、取得先での権限確認は、アプリケーション側の責任です。contextを渡すだけで本人確認が済むわけではありません。

MCPは、ツールの接続方法の一つ

外部サービスのツールを接続する方法として、MCP(Model Context Protocol)があります。MCPは、ツールや文脈情報を受け渡すための共通の通信の取り決めです。このような取り決めをプロトコルと呼びます。MCPサーバーは、その取り決めに従って機能を提供するプログラムです。LangChainの対応する連携を使うと、公開された機能をエージェントのツールとして利用できます。

ここで増えるのは、利用できる機能を受け取る接続経路です。どのツールをモデルへ見せ、どの利用者に実行を許可し、失敗時にどうするかという設計は、引き続き必要です。MCPを学ぶ際も、プロトコルの名前より先に、LangChainのツールの意味を理解しておくと位置づけが明確になります。

middleware、runtime context、外部ツールの接続は、いずれもエージェントの柔軟性を、実際の仕事の条件へ合わせるための仕組みです。次の節では、その応用として検索をツール化する構成を扱います。