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 啟用結構化中繼資料擷取。
擷取器參數擷取器參數 的直接連結
TitleExtractorsArgstitleextractorsargs 的直接連結
llm?:
MastraLanguageModel
用於擷取標題的 AI SDK 語言模型
nodes?:
number
要擷取的標題節點數目
nodeTemplate?:
string
用於擷取標題節點的自訂提示詞範本。必須包含 {context} 預留位置
combineTemplate?:
string
用於合併標題的自訂提示詞範本。必須包含 {context} 預留位置
SummaryExtractArgssummaryextractargs 的直接連結
llm?:
MastraLanguageModel
用於擷取摘要的 AI SDK 語言模型
summaries?:
('self' | 'prev' | 'next')[]
要產生的摘要類型清單。只可包含 'self'(目前區塊)、'prev'(上一個區塊)或 'next'(下一個區塊)
promptTemplate?:
string
用於產生摘要的自訂提示詞範本。必須包含 {context} 預留位置
QuestionAnswerExtractArgsquestionanswerextractargs 的直接連結
llm?:
MastraLanguageModel
用於產生問題的 AI SDK 語言模型
questions?:
number
要產生的問題數目
promptTemplate?:
string
用於產生問題的自訂提示詞範本。必須同時包含 {context} 及 {numQuestions} 預留位置
embeddingOnly?:
boolean
若為 true,只產生 embedding,不會產生實際問題
KeywordExtractArgskeywordextractargs 的直接連結
llm?:
MastraLanguageModel
用於擷取關鍵字的 AI SDK 語言模型
keywords?:
number
要擷取的關鍵字數目
promptTemplate?:
string
用於擷取關鍵字的自訂提示詞範本。必須同時包含 {context} 及 {maxKeywords} 預留位置
SchemaExtractArgsschemaextractargs 的直接連結
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.