TokenLimiterProcessor
Le TokenLimiterProcessor limite le nombre de tokens dans les messages. Il peut être utilisé comme Processor d'entrée, d'entrée par étape et de sortie :
- Processor d'entrée (
processInput) : filtre les messages historiques afin qu'ils tiennent dans la fenêtre de contexte avant le démarrage de la boucle agentique, en donnant la priorité aux messages récents - Processor d'entrée par étape (
processInputStep) : élague les messages à chaque étape d'un workflow d'agent en plusieurs étapes, ce qui empêche une croissance illimitée du nombre de tokens lorsque des tools déclenchent des appels supplémentaires au LLM - Processor de sortie : limite les tokens de la réponse générée, en streaming ou non, au moyen de stratégies configurables pour gérer le dépassement des limites
Exemple d'utilisationLien direct vers Exemple d'utilisation
import { TokenLimiterProcessor } from '@mastra/core/processors'
const processor = new TokenLimiterProcessor({
limit: 1000,
strategy: 'truncate',
countMode: 'cumulative',
})
Paramètres du constructeurLien direct vers Paramètres du constructeur
options:
limit:
encoding?:
strategy?:
countMode?:
trimMode?:
Valeur renvoyéeLien direct vers Valeur renvoyée
id:
name?:
processInput:
processInputStep:
processOutputStream:
processOutputResult:
getMaxTokens:
Comportement du flux de sortieLien direct vers Comportement du flux de sortie
En tant que Processor de sortie, seules les parties qui transportent une sortie générée sont prises en compte dans la limite : text-delta et object. Les parties du cycle de vie (telles que step-start), les deltas de raisonnement, les métadonnées de réponse et les parties de tool (tool-call, tool-result) ne sont ni comptabilisées ni retenues. Les appels de tools atteignent donc toujours la boucle agentique et sont exécutés.
Avec la stratégie truncate par défaut, la première fois qu'une sortie est retenue, le Processor émet une partie transitoire data-token-limit-reached dans le flux :
for await (const part of stream.fullStream) {
if (part.type === 'data-token-limit-reached') {
console.log('output truncated at', part.data.limit, 'tokens')
}
}
Comportement en cas d'erreurLien direct vers Comportement en cas d'erreur
Lorsqu'il est utilisé comme Processor d'entrée (avec processInput comme avec processInputStep), TokenLimiterProcessor lève une erreur TripWire dans les cas suivants :
- Messages vides : s'il n'y a aucun message à traiter, un TripWire est levé, car il est impossible d'envoyer une requête à un LLM sans message.
- Les messages système dépassent la limite : si les messages système dépassent à eux seuls la limite de tokens, un TripWire est levé, car il est impossible d'envoyer une requête à un LLM contenant uniquement des messages système et aucun message utilisateur ou assistant.
import { TripWire } from '@mastra/core/agent'
try {
await agent.generate('Hello')
} catch (error) {
if (error instanceof TripWire) {
console.log('Token limit error:', error.message)
}
}
Exemple d'utilisation avancéeLien direct vers Exemple d'utilisation avancée
Comme Processor d'entrée (limiter la fenêtre de contexte)Lien direct vers Comme Processor d'entrée (limiter la fenêtre de contexte)
Utilisez inputProcessors pour limiter les messages historiques envoyés au modèle et ainsi respecter les limites de la fenêtre de contexte :
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
],
})
Comme Processor d'entrée par étape (limiter la croissance des tokens sur plusieurs étapes)Lien direct vers Comme Processor d'entrée par étape (limiter la croissance des tokens sur plusieurs étapes)
Lorsqu'un agent utilise des tools sur plusieurs étapes (par exemple, avec maxSteps > 1), chaque étape accumule l'historique de conversation de toutes les étapes précédentes. Utilisez inputProcessors pour limiter également les tokens à chaque étape de la boucle agentique. Le TokenLimiterProcessor s'applique automatiquement à l'entrée initiale et à chaque étape suivante :
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,
})
Comme Processor de sortie (limiter la longueur de la réponse)Lien direct vers Comme Processor de sortie (limiter la longueur de la réponse)
Utilisez outputProcessors pour limiter la longueur des réponses générées :
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',
}),
],
})