Aller au contenu principal

Memory.listThreads()

La méthode listThreads() récupère des fils avec prise en charge de la pagination et filtrage facultatif selon resourceId, metadata ou les deux.

Exemples d’utilisation
Lien direct vers Exemples d’utilisation

Lister tous les fils avec pagination
Lien direct vers Lister tous les fils avec pagination

const result = await memory.listThreads({
page: 0,
perPage: 10,
})

Récupérer tous les fils sans pagination
Lien direct vers Récupérer tous les fils sans pagination

Utilisez perPage: false pour récupérer en une seule fois tous les fils correspondants.

attention

Utilisez la pagination, en particulier pour les jeux de données volumineux. Employez cette option avec prudence.

const result = await memory.listThreads({
filter: { resourceId: 'user-123' },
perPage: false,
})

Filtrer selon resourceId
Lien direct vers filter-by-resourceid

const result = await memory.listThreads({
filter: { resourceId: 'user-123' },
page: 0,
perPage: 10,
})

Filtrer selon les métadonnées
Lien direct vers Filtrer selon les métadonnées

const result = await memory.listThreads({
filter: { metadata: { category: 'support', priority: 'high' } },
page: 0,
perPage: 10,
})

Filtre combiné (resourceId et métadonnées)
Lien direct vers Filtre combiné (resourceId et métadonnées)

const result = await memory.listThreads({
filter: {
resourceId: 'user-123',
metadata: { status: 'active' },
},
page: 0,
perPage: 10,
})

Paramètres
Lien direct vers Paramètres

filter?:

{ resourceId?: string; metadata?: Record<string, unknown> }
Objet de filtrage facultatif. resourceId filtre les fils selon l’ID de la ressource. metadata filtre les fils selon des paires clé-valeur de métadonnées (logique AND : toutes doivent correspondre)

page?:

number
Numéro de page à récupérer (indexé à partir de 0)

perPage?:

number | false
Nombre maximal de fils à renvoyer par page, ou false pour tous les récupérer

orderBy?:

{ field: 'createdAt' | 'updatedAt', direction: 'ASC' | 'DESC' }
Configuration du tri avec le champ et le sens (valeur par défaut : { field: 'createdAt', direction: 'DESC' })

Valeur renvoyée
Lien direct vers Valeur renvoyée

result:

Promise<StorageListThreadsOutput>
Promise résolue avec les résultats paginés des fils et leurs métadonnées

L’objet renvoyé contient :

  • threads : tableau d’objets représentant les fils
  • total : nombre total de fils correspondant au filtre
  • page : numéro de la page actuelle (identique au paramètre d’entrée page)
  • perPage : nombre d’éléments par page (identique au paramètre d’entrée perPage)
  • hasMore : booléen indiquant si d’autres résultats sont disponibles

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()

let currentPage = 0
const perPage = 25
let hasMorePages = true

// Fetch all active threads for a user, sorted by creation date
while (hasMorePages) {
const result = await memory?.listThreads({
filter: {
resourceId: 'user-123',
metadata: { status: 'active' },
},
page: currentPage,
perPage: perPage,
orderBy: { field: 'createdAt', direction: 'ASC' },
})

if (!result) {
console.log('No threads')
break
}

result.threads.forEach(thread => {
console.log(`Thread: ${thread.id}, Created: ${thread.createdAt}`)
})

hasMorePages = result.hasMore
currentPage++ // Move to next page
}

Filtrage selon les métadonnées
Lien direct vers Filtrage selon les métadonnées

Le filtre de métadonnées utilise la logique AND : toutes les paires clé-valeur indiquées doivent correspondre pour qu’un fil soit inclus dans les résultats :

// This will only return threads where BOTH conditions are true:
// - category === 'support'
// - priority === 'high'
await memory.listThreads({
filter: {
metadata: {
category: 'support',
priority: 'high',
},
},
})