Memory.recall()
La méthode Memory.recall() récupère les messages d'un thread précis et prend en charge la pagination, les options de filtrage et la recherche sémantique.
Exemple d'utilisationLien direct vers Exemple d'utilisation
const { messages } = await memory.recall({
threadId: 'thread-123',
perPage: 20,
})
ParamètresLien direct vers Paramètres
threadId:
resourceId?:
vectorSearchString?:
perPage?:
page?:
include?:
id (obligatoire), un threadId facultatif (utilise par défaut le threadId principal), withPreviousMessages (nombre de messages précédents, 2 par défaut pour la recherche vectorielle, sinon 0) et withNextMessages (nombre de messages suivants, 2 par défaut pour la recherche vectorielle, sinon 0).filter?:
dateRange filtre les messages selon leur date de création. metadata filtre les métadonnées superficielles des messages selon des paires clé-valeur scalaires exactes avec une sémantique AND. Les valeurs des métadonnées peuvent être des chaînes, des nombres finis, des booléens ou null.orderBy?:
threadConfig?:
lastMessages?:
semanticRecall?:
workingMemory?:
{ enabled: boolean; template?: string; schema?: ZodObject<any> | JSONSchema7; scope?: 'thread' | 'resource' } ou { enabled: boolean } pour la désactiver.threads?:
generateTitle contrôle la génération automatique du titre du thread à partir de la transcription de la conversation. Peut être un booléen ou un objet contenant un modèle et des instructions personnalisés.Filtrage des métadonnéesLien direct vers Filtrage des métadonnées
Utilisez filter.metadata pour rechercher des métadonnées scalaires superficielles stockées dans les messages :
const { messages } = await memory.recall({
threadId: 'thread-123',
filter: {
metadata: {
category: 'billing',
escalated: true,
priority: 2,
archivedAt: null,
},
},
})
Toutes les entrées de métadonnées sont combinées avec une sémantique AND. Un message doit correspondre à chaque clé et à chaque valeur avec une égalité stricte des types. null correspond aux métadonnées explicitement définies sur null. Il ne correspond pas à une clé absente.
Les filtres de métadonnées prennent uniquement en charge les valeurs scalaires superficielles : string, number fini, boolean et null. Les objets imbriqués, les tableaux, NaN et les valeurs infinies ne sont pas pris en charge. Les clés de métadonnées doivent commencer par une lettre ou un trait de soulignement, et contenir uniquement des caractères alphanumériques ou des traits de soulignement. Elles sont limitées à 128 caractères. Les clés de prototype réservées telles que __proto__, constructor et prototype ne sont pas autorisées. Les performances dépendent du backend de stockage. Les filtres de métadonnées arbitraires peuvent nécessiter l'analyse des messages candidats ; limitez donc la requête au moyen de threadId, resourceId ou dateRange lorsque cela est possible.
Valeur renvoyéeLien direct vers Valeur renvoyée
messages:
Exemple d'utilisation avancéeLien direct vers Exemple d'utilisation avancée
import { mastra } from './mastra'
const agent = mastra.getAgent('agent')
const memory = await agent.getMemory()
// Retrieve messages with pagination
const { messages } = await memory!.recall({
threadId: 'thread-123',
perPage: 50,
vectorSearchString: 'What messages are there?',
include: [
{
id: 'msg-123',
},
{
id: 'msg-456',
withPreviousMessages: 3,
withNextMessages: 1,
},
],
threadConfig: {
semanticRecall: true,
},
})
console.log(messages) // MastraDBMessage[]
// Fetch all messages without pagination
const allMessages = await memory!.recall({
threadId: 'thread-123',
perPage: false, // Fetch all
})
// Convert to AI SDK format if needed
import { toAISdkV5Messages } from '@mastra/ai-sdk/ui'
const uiMessages = toAISdkV5Messages(messages)