Memory.summarizeThread()
La méthode .summarizeThread() résume en une seule fois la conversation d’un fil. Elle charge les messages du fil depuis le stockage et les synthétise à l’aide du même mécanisme Observer que celui d’Observational Memory, mais sous la forme d’un appel autonome, sans qu’Observational Memory soit associé à un Agent.
Les messages sont chargés page par page, en commençant par les plus récents, dans les limites définies par lastMessages et maxInputTokens. Ainsi, le résumé d’un long fil ne nécessite pas de lire tout son historique depuis le stockage.
Aucune donnée n’est réécrite dans la mémoire. Le résumé et les valeurs extraites vous sont renvoyés, ainsi qu’au hook onExtracted de chaque extracteur. Vous décidez donc où les stocker, par exemple dans votre propre base de données.
Utilisez cette méthode à la fin d’une session lorsque vous souhaitez obtenir un résumé ou une extraction structurée de l’ensemble de la conversation, par exemple au terme d’un appel vocal. Pour des messages dont vous disposez déjà, sans avoir à les charger depuis un fil, utilisez plutôt la fonction autonome summarizeConversation(). Elle accepte les mêmes options, avec messages à la place de threadId.
Exemple d’utilisationLien direct vers Exemple d’utilisation
const result = await memory.summarizeThread({
model: 'openai/gpt-5-mini',
threadId: 'thread-123',
instructions: 'Summarize this voicemail call for the business owner.',
})
ParamètresLien direct vers Paramètres
threadId:
model:
resourceId?:
lastMessages?:
maxInputTokens.maxInputTokens?:
instructions?:
extract?:
onExtracted de chaque extracteur est déclenché avec la valeur extraite.requestContext?:
abortSignal?:
Valeur renvoyéeLien direct vers Valeur renvoyée
summary:
extracted:
extract, indexées par le slug de l’extracteur.extractionFailures:
usage:
Exemple d’utilisation avancéeLien direct vers Exemple d’utilisation avancée
L’exemple suivant résume un appel vocal terminé et stocke un enregistrement structuré dans la propre base de données de l’application :
import { Extractor } from '@mastra/memory'
import { z } from 'zod'
import { memory } from './mastra/memory'
import { callRecords } from './db'
const callSummary = new Extractor({
name: 'call-summary',
instructions: 'Return a concise summary of the call.',
schema: z.object({
summary: z.string(),
sentiment: z.enum(['positive', 'neutral', 'negative']),
requestedServices: z.array(z.string()),
}),
metadataKeyPath: false, // don't persist into memory metadata — the hook owns storage
onExtracted: async ({ current, threadId, resourceId }) => {
await callRecords.upsert({ callId: threadId, callerId: resourceId, record: current })
},
})
export async function onCallEnd(threadId: string, resourceId: string) {
await memory.summarizeThread({
model: 'openai/gpt-5-mini',
threadId,
resourceId,
instructions: 'Summarize this voicemail call for the business owner.',
extract: [callSummary],
})
}