Aller au contenu principal

RAG (Retrieval-Augmented Generation) dans Mastra

La RAG dans Mastra vous aide à enrichir les sorties des LLM en intégrant un contexte pertinent issu de vos propres sources de données, ce qui améliore la précision et ancre les réponses dans des informations réelles.

Le système RAG de Mastra fournit :

  • Des API standardisées pour traiter et vectoriser les documents
  • La prise en charge de plusieurs vector stores
  • Des stratégies de découpage et d’embedding pour une récupération optimale
  • De l’observabilité pour suivre les performances d’embedding et de récupération

Exemple
Lien direct vers Exemple

Pour implémenter la RAG, vous traitez vos documents en chunks, créez des embeddings, les stockez dans une base de données vectorielle, puis récupérez le contexte pertinent au moment de la requête.

import { embedMany } from 'ai'
import { PgVector } from '@mastra/pg'
import { MDocument } from '@mastra/rag'
import { z } from 'zod'

// 1. Initialize document
const doc = MDocument.fromText(`Your document text here...`)

// 2. Create chunks
const chunks = await doc.chunk({
strategy: 'recursive',
size: 512,
overlap: 50,
})

// 3. Generate embeddings; we need to pass the text of each chunk
import { ModelRouterEmbeddingModel } from '@mastra/core/llm'

const { embeddings } = await embedMany({
values: chunks.map(chunk => chunk.text),
model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'),
})

// 4. Store in vector database
const pgVector = new PgVector({
id: 'pg-vector',
connectionString: process.env.POSTGRES_CONNECTION_STRING,
})
await pgVector.upsert({
indexName: 'embeddings',
vectors: embeddings,
}) // using an index name of 'embeddings'

// 5. Query similar chunks
const results = await pgVector.query({
indexName: 'embeddings',
queryVector: queryVector,
topK: 3,
}) // queryVector is the embedding of the query

console.log('Similar chunks:', results)

Cet exemple présente l’essentiel. Initialisez un document et créez des chunks, puis générez et stockez des embeddings avant de rechercher du contenu similaire.

Traitement des documents
Lien direct vers Traitement des documents

Le traitement des documents est l’élément de base de la RAG. Les documents peuvent être découpés avec différentes stratégies (récursive, fenêtre glissante, etc.) et enrichis de métadonnées. Consultez la documentation sur le découpage et l’embedding.

Stockage vectoriel
Lien direct vers Stockage vectoriel

Mastra prend en charge plusieurs vector stores pour la persistance des embeddings et la recherche de similarité, notamment pgvector, OracleDB, Pinecone, Qdrant et MongoDB. Consultez la documentation sur les bases de données vectorielles.

Ressources supplémentaires
Lien direct vers Ressources supplémentaires