Aller au contenu principal

ExtractParams

ExtractParams configure l'extraction de métadonnées à partir de chunks de documents au moyen d'une analyse par LLM.

Exemple
Lien direct vers Exemple

import { MDocument } from '@mastra/rag'

const doc = MDocument.fromText(text)
const chunks = await doc.chunk({
extract: {
title: true, // Extract titles using default settings
summary: true, // Generate summaries using default settings
keywords: true, // Extract keywords using default settings
},
})

// Example output:
// chunks[0].metadata = {
// documentTitle: "AI Systems Overview",
// sectionSummary: "Overview of artificial intelligence concepts and applications",
// excerptKeywords: "KEYWORDS: AI, machine learning, algorithms"
// }

Paramètres
Lien direct vers Paramètres

Le paramètre extract accepte les champs suivants :

title?:

boolean | TitleExtractorsArgs
Active l'extraction du titre. Définissez la valeur sur true pour utiliser les paramètres par défaut, ou fournissez une configuration personnalisée.

summary?:

boolean | SummaryExtractArgs
Active l'extraction du résumé. Définissez la valeur sur true pour utiliser les paramètres par défaut, ou fournissez une configuration personnalisée.

questions?:

boolean | QuestionAnswerExtractArgs
Active la génération de questions. Définissez la valeur sur true pour utiliser les paramètres par défaut, ou fournissez une configuration personnalisée.

keywords?:

boolean | KeywordExtractArgs
Active l'extraction des mots-clés. Définissez la valeur sur true pour utiliser les paramètres par défaut, ou fournissez une configuration personnalisée.

schema?:

SchemaExtractArgs
Active l'extraction structurée des métadonnées à l'aide d'un schéma Zod.

Arguments des extracteurs
Lien direct vers Arguments des extracteurs

TitleExtractorsArgs
Lien direct vers titleextractorsargs

llm?:

MastraLanguageModel
Modèle de langage AI SDK à utiliser pour l'extraction du titre

nodes?:

number
Nombre de nœuds de titre à extraire

nodeTemplate?:

string
Modèle de prompt personnalisé pour extraire les nœuds de titre. Doit inclure l'espace réservé {context}

combineTemplate?:

string
Modèle de prompt personnalisé pour combiner les titres. Doit inclure l'espace réservé {context}

SummaryExtractArgs
Lien direct vers summaryextractargs

llm?:

MastraLanguageModel
Modèle de langage AI SDK à utiliser pour l'extraction du résumé

summaries?:

('self' | 'prev' | 'next')[]
Liste des types de résumés à générer. Peut uniquement inclure 'self' (chunk actuel), 'prev' (chunk précédent) ou 'next' (chunk suivant)

promptTemplate?:

string
Modèle de prompt personnalisé pour générer le résumé. Doit inclure l'espace réservé {context}

QuestionAnswerExtractArgs
Lien direct vers questionanswerextractargs

llm?:

MastraLanguageModel
Modèle de langage AI SDK à utiliser pour générer les questions

questions?:

number
Nombre de questions à générer

promptTemplate?:

string
Modèle de prompt personnalisé pour générer les questions. Doit inclure les espaces réservés {context} et {numQuestions}

embeddingOnly?:

boolean
Si la valeur est true, génère uniquement des embeddings, sans questions

KeywordExtractArgs
Lien direct vers keywordextractargs

llm?:

MastraLanguageModel
Modèle de langage AI SDK à utiliser pour l'extraction des mots-clés

keywords?:

number
Nombre de mots-clés à extraire

promptTemplate?:

string
Modèle de prompt personnalisé pour extraire les mots-clés. Doit inclure les espaces réservés {context} et {maxKeywords}

SchemaExtractArgs
Lien direct vers schemaextractargs

schema:

ZodType
Schéma Zod définissant la structure des données à extraire.

llm?:

MastraLanguageModel
Modèle de langage AI SDK à utiliser pour l'extraction.

instructions?:

string
Instructions indiquant au LLM les éléments à extraire.

metadataKey?:

string
Clé sous laquelle imbriquer les résultats de l'extraction. En cas d'omission, les résultats sont répartis dans l'objet de métadonnées.

Exemple avancé
Lien direct vers Exemple avancé

import { MDocument } from '@mastra/rag'

const doc = MDocument.fromText(text)
const chunks = await doc.chunk({
extract: {
// Title extraction with custom settings
title: {
nodes: 2, // Extract 2 title nodes
nodeTemplate: 'Generate a title for this: {context}',
combineTemplate: 'Combine these titles: {context}',
},

// Summary extraction with custom settings
summary: {
summaries: ['self'], // Generate summaries for current chunk
promptTemplate: 'Summarize this: {context}',
},

// Question generation with custom settings
questions: {
questions: 3, // Generate 3 questions
promptTemplate: 'Generate {numQuestions} questions about: {context}',
embeddingOnly: false,
},

// Keyword extraction with custom settings
keywords: {
keywords: 5, // Extract 5 keywords
promptTemplate: 'Extract {maxKeywords} key terms from: {context}',
},

// Schema extraction with Zod
schema: {
schema: z.object({
productName: z.string(),
category: z.enum(['electronics', 'clothing']),
}),
instructions: 'Extract product information.',
metadataKey: 'product',
},
},
})

// Example output:
// chunks[0].metadata = {
// documentTitle: "AI in Modern Computing",
// sectionSummary: "Overview of AI concepts and their applications in computing",
// questionsThisExcerptCanAnswer: "1. What is machine learning?\n2. How do neural networks work?",
// excerptKeywords: "1. Machine learning\n2. Neural networks\n3. Training data",
// product: {
// productName: "Neural Net 2000",
// category: "electronics"
// }
// }

Regroupement de documents pour l'extraction du titre
Lien direct vers Regroupement de documents pour l'extraction du titre

Lorsque vous utilisez TitleExtractor, vous pouvez regrouper plusieurs chunks pour l'extraction du titre en indiquant un docId commun dans le champ metadata de chaque chunk. Tous les chunks ayant le même docId recevront le même titre extrait. Si aucun docId n'est défini, chaque chunk est traité comme un document distinct pour l'extraction du titre.

Exemple :

import { MDocument } from '@mastra/rag'

const doc = new MDocument({
docs: [
{ text: 'chunk 1', metadata: { docId: 'docA' } },
{ text: 'chunk 2', metadata: { docId: 'docA' } },
{ text: 'chunk 3', metadata: { docId: 'docB' } },
],
type: 'text',
})

await doc.extractMetadata({ title: true })
// The first two chunks will share a title, while the third chunk will be assigned a separate title.