Middleware Configurations
このガイドでは、NPO StudioでAIエージェントを作成または編集する際に利用可能なMiddleware設定について説明します。ミドルウェアタブは、Human in the loop、PII (Personally Identifiable Information)保護、およびSummarization(LangChainに基づく)の3つの主要機能を提供します。
ミドルウェア設定へのアクセス
- エージェントデザインキャンバスからAIエージェントを開きます。
- AIエージェントノード(例:"Agent 1 - Main Agent")をクリックします。
- 右側の設定パネルで、Middlewareタブを選択します。
ヒューマンインザループ
ヒューマンインザループミドルウェアは、エージェントが自律的に実行できるツールと、明示的な人間の承認が必要なツールを制御する機能を提供します。有効にすると、設定したルールに一致するツールコールは実行を一時停止し、人間が承認、編集、または拒否するのを待ってから進行します。
ヒューマンインザループの有効化
ミドルウェアパネルの上部でHuman in the loopスイッチをONに切り替えます。この機能は、メインエージェントおよびサブエージェントノードの両方で利用可能です。


MCPサーバーごとのツール権限の設定
ヒューマンインザループを有効にした後、接続された各MCPサーバーは折りたたみ可能なセクションとして表示されます。各MCPサーバー内のツールごとに承認ルールを設定します。
ツール権限ルールの追加
- MCPサーバーセクションを展開します(例:"Lunar15 Apr ZCP Alert Backend"、"ddg-search")。
- Select a toolドロップダウンをクリックして、そのMCPサーバーから特定のツールを選択します。
- Select one or more permission ドロップダウンをクリックして、そのツールに対する許可を割り当てます。
- checkmark ボタンをクリックして確認するか、X ボタンをクリックしてキャンセルします。
- ツールは、割り当てられた許可アクションと共にリストに表示されます。
Note: MCPサーバーにHuman in the Loop用に設定されたツールがない場合、「このMCPには設定されたツールがありません」と表示されます。

ツールの許可アクション
各設定されたツールは、エージェントがツール実行リクエストをどのように処理するかを定義する1つ以上のアクションボタンを表示します。ツールは同時に複数の許可で設定できます: 承認、編集、拒否。
| アクション | 説明 |
|---|---|
| Approve | ツールの実行を進めることを許可します。人間のレビュアーは、ツール呼び出しとその引数が受け入れ可能であることを確認します。 |
| Edit | 人間のレビュアーが実行前にツール呼び出しの引数を変更できるようにします。編集可能な許可が設定されている場合に利用可能です。 |
| Reject | ツールの実行を完全にブロックします。エージェントは、ツール呼び出しが拒否されたことを通知され、ツールなしで進めなければなりません。 |
ツールルールの管理
- ツールの隣にある three-dot menu (⋮) をクリックして追加オプションにアクセスします(例: ルールを削除)。
- MCPサーバーヘッダーの add アイコンをクリックして、新しいツール許可ルールを追加します。
- 同じMCPサーバーからの複数のツールは、それぞれ異なる許可設定を持つことができます。
実行時のHuman in the Loopの動作
Human in the Loopが有効なエージェントが NPO Workspace チャットで使用されるとき:

- エージェントはユーザーのメッセージを処理し、ツールを呼び出す必要があることを判断します。
- ツールを自動的に実行する代わりに、エージェントはチャットに "Tool execution pending approval" メッセージを表示します。
- メッセージには次の内容が表示されます:
- 呼び出されている tool name (例:fetch_content、search、get_alerts_api_alert_v1...)。
- エージェントが渡そうとしている arguments
- 人間のレビュアーは、利用可能なアクションボタンのいずれかをクリックします:
- Approve: ツールは表示された引数で実行されます。
- Edit: レビュアーが引数を修正し、その後ツールは更新された値で実行されます。
- Reject: ツール呼び出しはブロックされ、エージェントはツールの結果なしで続行します。
- アクションの後、エージェントはツールの結果(承認された場合)またはそれなしで処理を再開します(拒否された場合)。
Note: 複数のツール呼び出しが単一の保留中の承認メッセージに表示される場合があります。メッセージ内の各ツール呼び出しはレビューされる必要があります。すべての保留中のツールが対処されるまで、エージェントは進行しません。メインエージェントとサブエージェントに選択されたすべてのMCPサーバーは、「Human in the loop」セクションに表示される必要があります。選択するためにツールが構成されているMCPを確認してください。
設定例
| MCPサーバー | ツール | 利用可能なアクション | ユースケース |
|---|---|---|---|
| ZCPアラートバックエンド | get_alerts_api_alert_v1... | 承認、編集、拒否 | 実行前にアラートクエリをレビュー |
| ddg-search | fetch_content | 承認、拒否 | エージェントが取得できるURLを制御 |
| ddg-search | search | 承認、編集、拒否 | 検索クエリをレビューおよび修正 |
ヒューマンインザループのベストプラクティス
- write operations(作成、更新、削除)を実行するツールや sensitive data にアクセスするツールに対して、ヒューマンインザループを有効にします。
- 引数の調整が精度を向上させるツール(例:検索クエリ、APIフィルター)には、Edit 権限を使用します。
- リスクが低い read-only tools に対しては、会話のスピードを維持するために「Human in the Loop」を外しておくことを検討してください。
- MCPサーバーごとにツールルールを設定して、細かな制御を適用します - すべてのツールが同じレベルの監視を必要とするわけではありません。
- ユーザーエクスペリエンスがスムーズであることを確認するために、公開前に Playground で承認フローをテストしてください。
- 「Human in the Loop」は、メインエージェントとサブエージェントのノードに独立して適用されます - 各エージェントノードをその特定のツール使用に基づいて設定してください。
PII 個人を特定できる情報
PIIミドルウェアは、AIエージェントを通じて流れる敏感なデータを自動的に検出し、保護します。有効にすると、特定のデータタイプのメッセージをスキャンし、保護アクションを適用します。

PIIの有効化
PII スイッチをONに切り替えて、エージェントのPII保護を有効にします。
サポートされているPIIタイプ
各PIIタイプは、個別にONまたはOFFに切り替えることができます:
| PIIタイプ | 説明 |
|---|---|
| メールアドレス (例: user@example.com) | |
| Credit card | クレジット/デビットカード番号 |
| IP | IPアドレス (IPv4/IPv6) |
| MAC address | ネットワークMACアドレス |
| URL | ウェブURLおよびリンク |
各PIIタイプには、検出されたデータの取り扱いを決定するアクションドロップダウンがあります:
- Redact: 検出されたPIIをプレースホルダー (例: [REDACTED]) に置き換え、メッセージから敏感な値を完全に削除します。
各PIIタイプについて、保護が適用される場所を選択できます。チェックボックスを使用して1つ以上を選択してください:
- Input: エージェントに送信されたユーザーメッセージ内のPIIをスキャンして保護します。
- Output: ユーザーへのエージェントの応答内のPIIをスキャンして保護します。
- Tool results: ツール/API コールから返されたデータ内の PII をスキャンし、保護します。
| PII タイプ | アクション | 入力 | 出力 | ツール結果 | ユースケース |
|---|---|---|---|---|---|
| メール | レダクト | チェックを外す | チェック | チェック | エージェントが応答内でメールを漏洩しないようにする |
| クレジットカード | レダクト | チェックを外す | チェック | チェックを外す | 出力内のカード番号をブロックする |
| IP | レダクト | チェックを外す | チェック | チェックを外す | 応答から IP アドレスを隠す |
| MAC アドレス | レダクト | チェックを外す | チェック | チェックを外す | 応答から MAC アドレスを隠す |
| URL | レダクト | チェック | チェックを外す | チェックを外す | 処理前にユーザー入力から URL を削除する |
- 敏感なタイプ(メール、クレジットカード)のために Output 保護を有効にして、偶発的なデータ漏洩を防ぎます。
- バックエンド API が公開すべきでないユーザーデータを返すときに Tool results を有効にします。
- LLM に到達する前にユーザー提供データを匿名化したい場合は Input を有効にします。
- 新しい MCP ツールを接続する際に PII 設定を確認し、機密情報が返される可能性があります。
要約
要約ミドルウェア(LangChain に基づく)は、会話履歴を自動的に圧縮してコンテキストウィンドウの制限を管理します。会話が設定された閾値を超えると、重要な情報を保持しながらコンテキストを制限内に保つために要約をトリガーします。
要約の有効化
Summarization スイッチを ON に切り替えて、会話の要約を有効にします。
LLM 設定
要約には、要約を生成するための独自の LLM が必要です。次の必須フィールドを設定します:
Provider(必須)
- 要約を生成するために使用される LLM プロバイダー。
- 例: OpenAI
- 設定されたプロバイダーのドロップダウンから選択します。
Default model(必須)
- 要約に使用される特定のモデル。
- 例: GPT 4o
- 要約タスクのために、品質とコストのバランスが取れたモデルを選択してください。
API Key(必須)
- LLMプロバイダーとの認証に使用されるAPIキー。
- 例: BachDX
- システム内の事前設定されたAPIキーから選択してください。
トリガー
Trigger セクションでは、要約を開始する条件を定義します。いずれかの有効な条件が満たされると、要約プロセスが実行されます。複数のトリガーを同時に有効にすることができ、any 条件が満たされると要約がアクティブになります。
Messages- 会話が指定されたメッセージ数に達したときに要約をトリガーします。
- 例: 50 - 会話内の50メッセージ後に要約が実行されます。
- 値をクリアするにはxをクリックしてください。
- 会話が指定されたトークン数に達したときに要約をトリガーします。
- 要約がアクティブになる前の最大トークン数を入力してください。
- LLMのコンテキストウィンドウの制限内に収めるのに便利です。
- 会話がコンテキストウィンドウの指定された割合を使用したときに要約をトリガーします。
- スライダーで調整可能(0-100%)。
- モデルの容量に対する動的なコンテキスト管理に便利です。
キープ
Keep セクションでは、要約が実行された後にどれだけの会話履歴を保持するかを決定します。3つの戦略のいずれかを選択してください。
Messages (Keep by message count)- 要約後に最新のメッセージの固定数を保持します。
- Messages limit: 保持する最近のメッセージの数。
- 例: 30 - 要約後、最新の30メッセージがそのまま保持され、古いメッセージは要約に置き換えられます。
- 指定されたトークン予算まで最近のメッセージを保持します。
- Tokens limit: 最近の履歴から保持する最大トークン数。
- コンテキストウィンドウの使用を正確に制御する必要がある場合に便利です。
- 最近のメッセージとして、全体の会話の一定割合を保持します。
- Fraction limit: スライダーで調整可能(例:12%)。
- 残りの部分は要約されます。
- 会話の長さに関係なく、比例的なコンテキスト管理に役立ちます。
How Summarization Works (LangChain-based)
- エージェントは、設定された Trigger 条件に対して会話を監視します。
- トリガー閾値に達すると、要約LLMが古いメッセージの簡潔な要約を生成します。
- システムは、Keep 戦略に従って最近のメッセージを保持します。
- 要約は古い会話履歴を置き換え、コンテキストサイズを減少させます。
- 将来のインタラクションでは、要約 + 最近のメッセージがコンテキストとして使用されます。
| シナリオ | トリガー | キープ戦略 | 推奨事項 |
|---|---|---|---|
| 短い会話、コスト重視 | メッセージ: 30 | メッセージ: 10 | シンプルで予測可能 |
| 長い会話、品質重視 | トークン: モデル制限に近い | 割合: 20% | コンテキストの使用を最大化 |
| 可変長の会話 | 割合: 80% | メッセージ: 20 | 会話の長さに適応 |
| 厳格なトークン予算 | トークン: 4000 | トークン: 1000 | 正確なトークン管理 |
- 要約のために、頻繁に実行されるため、迅速でコスト効果の高いモデル(例:GPT 4o)を使用します。
- 要約自体のための余裕を持たせるために、Trigger の閾値をモデルの実際のコンテキスト制限よりも低く設定します。
- 安全のために複数のトリガータイプを有効にします—1つの条件が誤って設定されている場合、別の条件がそれをキャッチします。
- 実際の会話でテストして、要約後に重要なコンテキストが保持されていることを確認します。
- マルチターンタスクエージェントの場合、最近の指示が保持されるように Messages キープ戦略を優先します。
- 知識が豊富な会話の場合、より多くの詳細を保持するために Tokens または Fraction を優先します。