跳至主要內容

ExtractParams

ExtractParams 用來設定如何透過 LLM 分析,從文件區塊擷取中繼資料。

範例
「範例」的直接連結

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"
// }

參數
「參數」的直接連結

extract 參數接受下列欄位:

title?:

boolean | TitleExtractorsArgs
啟用標題擷取。設為 true 可使用預設設定,或提供自訂設定。

summary?:

boolean | SummaryExtractArgs
啟用摘要擷取。設為 true 可使用預設設定,或提供自訂設定。

questions?:

boolean | QuestionAnswerExtractArgs
啟用問題生成。設為 true 可使用預設設定,或提供自訂設定。

keywords?:

boolean | KeywordExtractArgs
啟用關鍵字擷取。設為 true 可使用預設設定,或提供自訂設定。

schema?:

SchemaExtractArgs
使用 Zod schema 啟用結構化中繼資料擷取。

擷取器引數
「擷取器引數」的直接連結

TitleExtractorsArgs
「titleextractorsargs」的直接連結

llm?:

MastraLanguageModel
用於擷取標題的 AI SDK 語言模型

nodes?:

number
要擷取的標題節點數量

nodeTemplate?:

string
擷取標題節點的自訂提示範本。必須包含 {context} 預留位置

combineTemplate?:

string
合併標題的自訂提示範本。必須包含 {context} 預留位置

SummaryExtractArgs
「summaryextractargs」的直接連結

llm?:

MastraLanguageModel
用於擷取摘要的 AI SDK 語言模型

summaries?:

('self' | 'prev' | 'next')[]
要產生的摘要類型清單。只能包含 'self'(目前區塊)、'prev'(上一個區塊)或 'next'(下一個區塊)

promptTemplate?:

string
生成摘要的自訂提示範本。必須包含 {context} 預留位置

QuestionAnswerExtractArgs
「questionanswerextractargs」的直接連結

llm?:

MastraLanguageModel
用於生成問題的 AI SDK 語言模型

questions?:

number
要生成的問題數量

promptTemplate?:

string
生成問題的自訂提示範本。必須同時包含 {context} 與 {numQuestions} 預留位置

embeddingOnly?:

boolean
若為 true,僅產生嵌入,不產生實際問題

KeywordExtractArgs
「keywordextractargs」的直接連結

llm?:

MastraLanguageModel
用於擷取關鍵字的 AI SDK 語言模型

keywords?:

number
要擷取的關鍵字數量

promptTemplate?:

string
擷取關鍵字的自訂提示範本。必須同時包含 {context} 與 {maxKeywords} 預留位置

SchemaExtractArgs
「schemaextractargs」的直接連結

schema:

ZodType
定義待擷取資料結構的 Zod schema。

llm?:

MastraLanguageModel
用於擷取的 AI SDK 語言模型。

instructions?:

string
指示 LLM 要擷取哪些內容。

metadataKey?:

string
擷取結果所要巢狀置入的鍵。若省略,結果會展開至中繼資料物件中。

進階範例
「進階範例」的直接連結

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"
// }
// }

將文件分組以擷取標題
「將文件分組以擷取標題」的直接連結

使用 TitleExtractor 時,你可以在每個區塊的 metadata 欄位指定相同的 docId,將多個區塊組成一組以擷取標題。所有具有相同 docId 的區塊都會收到相同的擷取標題。若未設定 docId,則會將每個區塊視為獨立文件來擷取標題。

範例:

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.