> Discover all available pages from the documentation index: https://mastra.zisheng.pro/zh-TW/llms.txt # ExtractParams ExtractParams 用來設定如何透過 LLM 分析,從文件區塊擷取中繼資料。 ## 範例 ```typescript 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` **llm** (`MastraLanguageModel`): 用於擷取標題的 AI SDK 語言模型 **nodes** (`number`): 要擷取的標題節點數量 **nodeTemplate** (`string`): 擷取標題節點的自訂提示範本。必須包含 {context} 預留位置 **combineTemplate** (`string`): 合併標題的自訂提示範本。必須包含 {context} 預留位置 ### `SummaryExtractArgs` **llm** (`MastraLanguageModel`): 用於擷取摘要的 AI SDK 語言模型 **summaries** (`('self' | 'prev' | 'next')[]`): 要產生的摘要類型清單。只能包含 'self'(目前區塊)、'prev'(上一個區塊)或 'next'(下一個區塊) **promptTemplate** (`string`): 生成摘要的自訂提示範本。必須包含 {context} 預留位置 ### `QuestionAnswerExtractArgs` **llm** (`MastraLanguageModel`): 用於生成問題的 AI SDK 語言模型 **questions** (`number`): 要生成的問題數量 **promptTemplate** (`string`): 生成問題的自訂提示範本。必須同時包含 {context} 與 {numQuestions} 預留位置 **embeddingOnly** (`boolean`): 若為 true,僅產生嵌入,不產生實際問題 ### `KeywordExtractArgs` **llm** (`MastraLanguageModel`): 用於擷取關鍵字的 AI SDK 語言模型 **keywords** (`number`): 要擷取的關鍵字數量 **promptTemplate** (`string`): 擷取關鍵字的自訂提示範本。必須同時包含 {context} 與 {maxKeywords} 預留位置 ### `SchemaExtractArgs` **schema** (`ZodType`): 定義待擷取資料結構的 Zod schema。 **llm** (`MastraLanguageModel`): 用於擷取的 AI SDK 語言模型。 **instructions** (`string`): 指示 LLM 要擷取哪些內容。 **metadataKey** (`string`): 擷取結果所要巢狀置入的鍵。若省略,結果會展開至中繼資料物件中。 ## 進階範例 ```typescript 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`,則會將每個區塊視為獨立文件來擷取標題。 **範例:** ```ts 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. ```