TokenLimiterProcessor
TokenLimiterProcessor は、メッセージ内のトークン数を制限します。input processor、ステップごとの input processor、output processor として使用できます。
- input processor(
processInput): Agent ループの開始前に、最近のメッセージを優先しながら、コンテキストウィンドウに収まるよう過去のメッセージを絞り込みます - ステップごとの input processor(
processInputStep): 複数ステップの Agent ワークフローで各ステップのメッセージを整理し、Tool が追加の LLM 呼び出しを発生させた場合にトークン数が際限なく増えるのを防ぎます - output processor: 上限超過時の処理戦略を設定し、ストリーミングまたは非ストリーミングで生成応答のトークン数を制限します
使用例使用例への直接リンク
import { TokenLimiterProcessor } from '@mastra/core/processors'
const processor = new TokenLimiterProcessor({
limit: 1000,
strategy: 'truncate',
countMode: 'cumulative',
})
コンストラクターパラメーターコンストラクターパラメーターへの直接リンク
options:
limit:
encoding?:
strategy?:
countMode?:
trimMode?:
戻り値戻り値への直接リンク
id:
name?:
processInput:
processInputStep:
processOutputStream:
processOutputResult:
getMaxTokens:
出力ストリームの動作出力ストリームの動作への直接リンク
output processor として使用する場合、上限に加算されるのは生成出力を含む part、つまり text-delta と object だけです。lifecycle part(step-start など)、reasoning delta、応答メタデータ、Tool の part(tool-call、tool-result)は加算も送出の抑止もされないため、Tool 呼び出しは常に Agent ループへ到達して実行されます。
デフォルトの truncate 戦略では、出力の送出が初めて抑止されたとき、processor は一時的な data-token-limit-reached part をストリーム上に送出します。
for await (const part of stream.fullStream) {
if (part.type === 'data-token-limit-reached') {
console.log('output truncated at', part.data.limit, 'tokens')
}
}
エラー時の動作エラー時の動作への直接リンク
input processor(processInput と processInputStep の両方)として使用すると、TokenLimiterProcessor は次の場合に TripWire エラーをスローします。
- メッセージが空: 処理するメッセージがない場合、メッセージなしで LLM リクエストを送信できないため、TripWire がスローされます。
- system メッセージが上限を超過: system メッセージだけでトークン上限を超えた場合、system メッセージだけで user/assistant メッセージのない LLM リクエストは送信できないため、TripWire がスローされます。
import { TripWire } from '@mastra/core/agent'
try {
await agent.generate('Hello')
} catch (error) {
if (error instanceof TripWire) {
console.log('Token limit error:', error.message)
}
}
詳細な使用例詳細な使用例への直接リンク
input processor として使用する(コンテキストウィンドウを制限)input processor として使用する(コンテキストウィンドウを制限)への直接リンク
モデルに送信する過去のメッセージを制限するには inputProcessors を使用します。これにより、コンテキストウィンドウの上限内に収めやすくなります。
import { Agent } from '@mastra/core/agent'
import { Memory } from '@mastra/memory'
import { TokenLimiterProcessor } from '@mastra/core/processors'
export const agent = new Agent({
id: 'context-limited-agent',
name: 'context-limited-agent',
instructions: 'You are a helpful assistant',
model: 'openai/gpt-5.6-sol',
memory: new Memory({/* ... */}),
inputProcessors: [
new TokenLimiterProcessor({ limit: 4000 }), // Limits historical messages to ~4000 tokens
],
})
ステップごとの input processor として使用する(複数ステップでのトークン増加を制限)ステップごとの input processor として使用する(複数ステップでのトークン増加を制限)への直接リンク
Agent が複数のステップにわたって Tool を使用する場合(maxSteps > 1 など)、各ステップにはそれまでのすべてのステップの会話履歴が蓄積されます。Agent ループの各ステップでもトークン数を制限するには、inputProcessors を使用します。TokenLimiterProcessor は、最初の入力とそれ以降のすべてのステップに自動的に適用されます。
import { Agent } from '@mastra/core/agent'
import { TokenLimiterProcessor } from '@mastra/core/processors'
export const agent = new Agent({
id: 'multi-step-agent',
name: 'multi-step-agent',
instructions: 'You are a helpful research assistant with access to tools',
model: 'openai/gpt-5.6-sol',
inputProcessors: [
new TokenLimiterProcessor({ limit: 8000 }), // Applied at every step
],
})
// Each tool call step will be limited to ~8000 input tokens
const result = await agent.generate('Research this topic using your tools', {
maxSteps: 10,
})
output processor として使用する(応答の長さを制限)output processor として使用する(応答の長さを制限)への直接リンク
生成する応答の長さを制限するには、outputProcessors を使用します。
import { Agent } from '@mastra/core/agent'
import { TokenLimiterProcessor } from '@mastra/core/processors'
export const agent = new Agent({
id: 'response-limited-agent',
name: 'response-limited-agent',
instructions: 'You are a helpful assistant',
model: 'openai/gpt-5.6-sol',
outputProcessors: [
new TokenLimiterProcessor({
limit: 1000,
strategy: 'truncate',
countMode: 'cumulative',
}),
],
})