メインコンテンツへ移動

ToolCallFilter

ToolCallFilter は、モデルへ送信する前にメッセージ履歴から Tool 呼び出しとその結果を除外する input processor です。特定の Tool 操作をコンテキストから除外したい場合や、すべての Tool 呼び出しを完全に削除したい場合に役立ちます。

使用例
使用例への直接リンク

import { ToolCallFilter } from '@mastra/core/processors'

// Exclude all tool calls
const filterAll = new ToolCallFilter()

// Exclude specific tools by name
const filterSpecific = new ToolCallFilter({
exclude: ['searchDatabase', 'sendEmail'],
})

// Enable filtering during agent loops and keep the two most recent tool-producing steps
const filterAfterRecentTools = new ToolCallFilter({
filterAfterToolSteps: 2,
})

// Preserve compact model-facing output for filtered completed tool results
const filterWithCompactToolHistory = new ToolCallFilter({
preserveModelOutput: true,
})

コンストラクターパラメーター
コンストラクターパラメーターへの直接リンク

options?:

Options
Tool 呼び出しフィルターの設定オプション
Options

exclude?:

string[]
除外する特定の Tool 名のリスト。指定しない場合や undefined の場合は、すべての Tool 呼び出しが除外されます

filterAfterToolSteps?:

number
Agent ループ中のフィルタリングを有効にし、Tool を生成した直近の指定ステップ数に含まれる Tool 呼び出しと結果を保持します。undefined の場合、ステップのフィルタリングは無効です

preserveModelOutput?:

boolean
providerMetadata.mastra.modelOutput を持つ、フィルタリング対象の完了済み Tool 結果について、モデル向けの簡潔な出力を保持します。生の Tool 引数と結果は削除されます

戻り値
戻り値への直接リンク

id:

string
'tool-call-filter' に設定された processor の識別子

name:

string
'ToolCallFilter' に設定された processor の表示名

processInput:

(args: { messages: MastraDBMessage[]; messageList: MessageList; abort: (reason?: string) => never; requestContext?: RequestContext }) => Promise<MessageList | MastraDBMessage[]>
設定に基づいて入力メッセージを処理し、Tool 呼び出しとその結果を除外します

processInputStep:

(args: ProcessInputStepArgs) => Promise<ProcessInputStepResult>
filterAfterToolSteps が設定されている場合に Agent ループのステップ入力を処理します。ステップのフィルタリングが無効な場合は変更を返しません

ステップのフィルタリング
ステップのフィルタリングへの直接リンク

デフォルトでは、ToolCallFilter は Agent ループ開始前の初期入力だけをフィルタリングします。各ループステップでもフィルタリングするには、filterAfterToolSteps を設定します。

filterAfterToolSteps は、Tool を生成したステップを数えます。たとえば filterAfterToolSteps: 2 は、Tool を生成した直近2ステップの Tool 呼び出しと結果を保持し、それ以前の Tool 呼び出しと結果を除外します。Tool 以外のテキストはコンテキストに残ります。

各ステップですべての過去の Tool 呼び出しと結果を除外するには、filterAfterToolSteps: 0 を設定します。

const filter = new ToolCallFilter({
filterAfterToolSteps: 2,
})

モデル向けの簡潔な出力を保持する
モデル向けの簡潔な出力を保持するへの直接リンク

フィルターが削除する完了済み Tool 結果について、簡潔な toModelOutput 履歴を保持するには、preserveModelOutput: true を設定します。これにより、生の toolInvocation.argstoolInvocation.result ペイロードを削除しつつ、モデル向けの出力をプロンプト内のテキストとして残せます。

保持されるのは、providerMetadata.mastra.modelOutput を持つ完了済みの Tool 結果だけです。Tool 呼び出し、未完了の結果、保存済みのモデル出力がない結果は、引き続き除外されます。

const filter = new ToolCallFilter({
preserveModelOutput: true,
})

フィルタリング対象の Tool についてのみ簡潔な出力を保持するには、preserveModelOutputexclude を組み合わせます。

const filter = new ToolCallFilter({
exclude: ['searchDatabase'],
preserveModelOutput: true,
})

詳細な使用例
詳細な使用例への直接リンク

src/mastra/agents/filtered-agent.ts
import { Agent } from '@mastra/core/agent'
import { ToolCallFilter } from '@mastra/core/processors'

export const agent = new Agent({
id: 'filtered-agent',
name: 'filtered-agent',
instructions: 'You are a helpful assistant',
model: 'openai/gpt-5.6-sol',
tools: {
searchDatabase,
sendEmail,
getWeather,
},
inputProcessors: [
// Filter out database search tool calls from context
// to reduce token usage while keeping other tool interactions
new ToolCallFilter({
exclude: ['searchDatabase'],
}),
],
})

すべての Tool 呼び出しをフィルタリングする
すべての Tool 呼び出しをフィルタリングするへの直接リンク

import { Agent } from '@mastra/core/agent'
import { ToolCallFilter } from '@mastra/core/processors'

export const agent = new Agent({
id: 'no-tools-context-agent',
name: 'no-tools-context-agent',
instructions: 'You are a helpful assistant',
model: 'openai/gpt-5.6-sol',
tools: {
searchDatabase,
sendEmail,
},
inputProcessors: [
// Remove all tool calls from the message history
// The agent can still use tools, but previous tool interactions
// won't be included in the context
new ToolCallFilter(),
],
})