Aller au contenu principal

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'utilisation
Lien direct vers Exemple d'utilisation

const { messages } = await memory.recall({
threadId: 'thread-123',
perPage: 20,
})

Paramètres
Lien direct vers Paramètres

threadId:

string
Identifiant unique du thread depuis lequel récupérer les messages

resourceId?:

string
Identifiant facultatif de la ressource propriétaire du thread. Lorsqu'il est fourni, valide la propriété du thread

vectorSearchString?:

string
Chaîne de recherche permettant de trouver des messages sémantiquement similaires. Nécessite l'activation du rappel sémantique dans threadConfig.

perPage?:

number | false
Nombre de messages à récupérer par page. Définissez cette valeur sur false pour récupérer tous les messages sans pagination. Si elle n'est pas fournie, utilise par défaut threadConfig.lastMessages.

page?:

number
Numéro de page indexé à partir de zéro pour la pagination. Utilisé avec perPage pour récupérer les messages par lots.

include?:

{ id: string; threadId?: string; withPreviousMessages?: number; withNextMessages?: number }[]
Tableau des identifiants de messages précis à inclure avec des messages de contexte facultatifs. Chaque élément possède un 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?: { start?: Date; end?: Date; startExclusive?: boolean; endExclusive?: boolean }; metadata?: Record<string, string | number | boolean | null> }
Options de filtrage pour la récupération des messages. 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?:

{ field: 'createdAt'; direction: 'ASC' | 'DESC' }
Ordre de tri des messages récupérés. Par défaut, la date de création est triée par ordre décroissant.

threadConfig?:

MemoryConfig
Options de configuration de la récupération des messages et de la recherche sémantique
MemoryConfig

lastMessages?:

number | false
Nombre de messages les plus récents à récupérer. Définissez cette valeur sur false pour désactiver la fonctionnalité. Lorsque perPage n'est pas explicitement fourni, cette valeur est utilisée par défaut.

semanticRecall?:

boolean | { topK: number; messageRange: number | { before: number; after: number }; scope?: 'thread' | 'resource' }
Active la recherche sémantique dans l'historique des messages. Peut être un booléen ou un objet contenant des options de configuration. Lorsque cette fonctionnalité est activée, le stockage vectoriel et le modèle d'embedding doivent être configurés.

workingMemory?:

WorkingMemory
Configuration de la fonctionnalité de mémoire de travail. Peut être { enabled: boolean; template?: string; schema?: ZodObject<any> | JSONSchema7; scope?: 'thread' | 'resource' } ou { enabled: boolean } pour la désactiver.

threads?:

{ generateTitle?: boolean | { model: DynamicArgument<MastraLanguageModel>; instructions?: DynamicArgument<string> } }
Paramètres associés à la création des threads de mémoire. 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ées
Lien 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ée
Lien direct vers Valeur renvoyée

messages:

MastraDBMessage[]
Tableau des messages récupérés au format de la base de données

Exemple d'utilisation avancée
Lien direct vers Exemple d'utilisation avancée

src/test-memory.ts
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)