尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LlamaIndex 元数据抽取(Metadata Extraction)使用指南:用 LLM 为节点自动生成摘要、标题与问答元数据
LlamaIndex 元数据抽取Metadata Extraction使用指南用 LLM 为节点自动生成摘要、标题与问答元数据【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index本指南系统讲解 LlamaIndex 中Metadata Extractor模块的使用模式如何利用 LLM 为文档切分后的 Node 自动生成摘要、标题、可回答的问题以及实体等元数据并将其无缝接入IngestionPipeline或VectorStoreIndex.from_documents()的转换链中。读完本文你将掌握四种内置特征提取器的能力边界与参数细节、底层执行原理以及基于 Pydantic 的结构化元数据抽取方案。Metadata Extractor 能做什么在 RAG 流程中检索质量不仅取决于文本切分还取决于每个 Node 上携带的元数据。LlamaIndex 通过Metadata Extractor模块让 LLM 自动为 Node 生成便于区分的元数据。其设计意图在核心实现中有明确说明——生成的元数据专门用于帮助将当前文档或子节与其他相似文档区分开思路类似对比学习contrastive learning参见 metadata_extractors.py。官方文档列出的内置特征提取器feature extractors共有四类覆盖了 Node 级与文档级两类元数据提取器级别抽取内容写入的元数据字段SummaryExtractorNode 级对一组 Node 自动生成摘要section_summary、prev_section_summary、next_section_summaryQuestionsAnsweredExtractorNode 级每个 Node 能够回答的一组问题questions_this_excerpt_can_answerTitleExtractor文档级基于每个 Node 的上下文推断文档标题document_titleEntityExtractorNode 级内容中提到的实体人名、地名、事物名等entities或按类别拆分需要注意EntityExtractor并不在核心包llama-index-core中而是作为一个独立集成包发布llama-index-extractors-entity其实现基于 SpanMarker 命名实体识别模型详见 entity/base.py。而核心包内的可加载提取器为SummaryExtractor、QuestionsAnsweredExtractor、TitleExtractor、KeywordExtractor与PydanticProgramExtractor参见 extractors/init.py。核心概念BaseExtractor 与提取器链所有提取器都继承自 BaseExtractor它本身是TransformComponent的子类这意味着提取器与文本切分器、嵌入模型一样都是IngestionPipeline中的转换组件可以按任意顺序串联。BaseExtractor提供的核心机制包括aextract(nodes)/extract(nodes)对一组 Node 执行抽取返回与节点一一对应的元数据字典列表见 interface.pyaprocess_nodes(nodes)/process_nodes(nodes)将抽取结果写回每个 Node 的node.metadata并支持excluded_embed_metadata_keys/excluded_llm_metadata_keys参数来控制某类元数据是否进入 embedding 或 LLM 上下文见 interface.pyin_place默认True原地修改 Node 还是深拷贝后处理num_workers默认 4异步并发抽取的工作线程数show_progress默认True是否展示进度条metadata_mode默认MetadataMode.ALL抽取时以何种模式读取 Node 内容是否包含元数据文本is_text_node_only默认True是否只处理TextNode。此外BaseExtractor还内置了失败恢复机制max_retries默认 0即失败立即抛出、retry_backoff指数退避基数实际延迟为retry_backoff * 2^attempt以及raise_on_error默认True设为False时重试耗尽后返回空元数据字典并记录警告相关实现见 interface.py。这一行为有专门的测试覆盖例如test_retry_succeeds_after_transient_failure与test_skip_returns_empty_metadata见 test_extractor_resilience.py。抽取完成后aprocess_nodes还会默认重写TextNode的text_template为DEFAULT_NODE_TEXT_TEMPLATE使后续 LLM 调用能看到元数据 正文摘录的组合格式除非设置disable_template_rewriteTrue。将提取器接入节点切分流程官方文档给出的标准用法是将提取器与 node parser 串联放入IngestionPipeline的transformations列表from llama_index.core.extractors import ( TitleExtractor, QuestionsAnsweredExtractor, ) from llama_index.core.node_parser import TokenTextSplitter text_splitter TokenTextSplitter( separator , chunk_size512, chunk_overlap128 ) title_extractor TitleExtractor(nodes5) qa_extractor QuestionsAnsweredExtractor(questions3) # assume documents are defined - extract nodes from llama_index.core.ingestion import IngestionPipeline pipeline IngestionPipeline( transformations[text_splitter, title_extractor, qa_extractor] ) nodes pipeline.run( documentsdocuments, in_placeTrue, show_progressTrue, )流程说明TokenTextSplitter先把文档切成 512 token重叠 128的文本块随后TitleExtractor与QuestionsAnsweredExtractor依次对这些 Node 进行元数据抽取。pipeline.run()返回的每个 Node 的metadata中将带上document_title与questions_this_excerpt_can_answer字段。也可以在不显式构建 Pipeline 的情况下直接把转换链传给索引构建入口from llama_index.core import VectorStoreIndex index VectorStoreIndex.from_documents( documents, transformations[text_splitter, title_extractor, qa_extractor] )VectorStoreIndex.from_documents()内部同样基于IngestionPipeline执行转换因此两种写法等价。无论哪种方式抽取出的元数据都会在后续的 embedding 与检索阶段参与相似度计算或 LLM 上下文构建——前提是这些元数据没有被excluded_embed_metadata_keys排除。内置提取器逐个拆解SummaryExtractor带上下文共享的节点摘要SummaryExtractor是 Node 级提取器它不仅能生成当前节点的摘要还能顺带输出前驱/后继节点的摘要写入三个元数据字段section_summary、prev_section_summary、next_section_summary。其构造参数与校验逻辑参见 metadata_extractors.pysummariesList[str]取值只能是self、prev、next可组合传入其他值会直接抛出ValueError默认[self]prompt_template默认模板要求 LLM总结该小节的关键主题与实体DEFAULT_SUMMARY_EXTRACT_TEMPLATE注意该提取器在aextract中强制要求所有 Node 都是TextNode否则抛ValueError(Only TextNode is allowed for Summary extractor)。from llama_index.core.extractors import SummaryExtractor summary_extractor SummaryExtractor(summaries[self, prev, next])QuestionsAnsweredExtractor生成本段能回答的问题QuestionsAnsweredExtractor为每个 Node 生成一组该节点能回答、且在其他地方不太可能找到答案的问题写入questions_this_excerpt_can_answer字段。默认提示词明确指出要求问题针对上下文特有信息且可利用周边摘要生成更优质的问题DEFAULT_QUESTION_GEN_TMPL。参数方面见 metadata_extractors.pyquestions生成的问题数量默认 5且必须 1embedding_only默认True表示该元数据仅供 embedding 使用prompt_template可自定义。from llama_index.core.extractors import QuestionsAnsweredExtractor qa_extractor QuestionsAnsweredExtractor(questions3)TitleExtractor跨节点推断文档标题TitleExtractor是文档级提取器专门面向长文档它只取每个文档最前面的nodes个节点默认 5nodes 1否则抛ValueError先让 LLM 基于每个节点文本生成候选标题node_template默认DEFAULT_TITLE_NODE_TEMPLATE再把候选标题合并后让 LLM 生成最终文档标题combine_template默认DEFAULT_TITLE_COMBINE_TEMPLATE最终为每个 Node 写入document_title字段。实现中通过separate_nodes_by_ref_id按ref_doc_id分组保证标题推断是按文档维度进行的参见 metadata_extractors.py。from llama_index.core.extractors import TitleExtractor title_extractor TitleExtractor(nodes5)另外TitleExtractor.is_text_node_only False即它可以处理文本与非文本节点混合的场景这是它与多数 Node 级提取器不同的地方。EntityExtractor基于 SpanMarker 的实体抽取独立集成包EntityExtractor不调用 LLM而是加载 Hugging Face 上的命名实体识别模型tomaarsen/span-marker-mbert-base-multinerdSpanMarker 库把实体写入entities元数据字段。核心参数见 entity/base.pymodel_nameSpanMarker 模型名默认tomaarsen/span-marker-mbert-base-multinerdprediction_threshold置信度阈值默认 0.5取值区间[0.0, 1.0]span_joiner多 token 实体的拼接符默认空格label_entities默认False为True时元数据按实体类别分键如persons、locations否则统一写入entitiesdevice模型运行设备如cpu/cuda默认 CPUentity_map实体类别标签到可读名称的映射默认映射表DEFAULT_ENTITY_MAP覆盖了 persons、organizations、locations、animals、diseases、events、foods、plants、vehicles 等 15 类见 entity/base.py。使用前需安装依赖pip install llama-index-extractors-entityfrom llama_index.extractors.entity import EntityExtractor entity_extractor EntityExtractor( prediction_threshold0.5, label_entitiesTrue, )抽取逻辑在aextract中实现先按metadata_mode读取节点文本用 tokenizer默认 NLTKword_tokenize分词交给模型predict过滤掉低于阈值的 span最后把同一类别的实体去重并以列表形式写入元数据见 entity/base.py。补充提取器关键词与 Pydantic 结构化抽取除了官方文档点名的四个提取器核心包中还提供了两个实用提取器一并介绍。KeywordExtractor为每个 Node 抽取一组唯一标识关键词写入excerpt_keywords字段keywords参数控制数量默认 5 1默认提示词要求以逗号分隔输出参见 metadata_extractors.py。PydanticProgramExtractor让 LLM 直接把节点内容抽取为任意 Pydantic 对象并将对象字段model_dump()后作为元数据写入。它接收一个BasePydanticProgramprogram参数与input_key默认input程序模板必须暴露该键抽取模板默认为DEFAULT_EXTRACT_TEMPLATE_STR根据上下文抽取一个 {class_name} 对象实现见 metadata_extractors.py。这一能力可组合llama-index-program-openai等程序化 LLM 调用实现高度可控的结构化元数据。官方示例见 PydanticExtractor.ipynb社区类库示例见 MarvinMetadataExtractorDemo.ipynb。所有内置提取器都可通过load_extractor依据class_name从字典反序列化加载from_dict会自动解析嵌套的llm配置支持把提取器配置序列化后持久化使用见 loading.py。完整实战示例与进阶资源以下是一个切分 摘要 标题 问答全链路示例from llama_index.core.extractors import ( SummaryExtractor, TitleExtractor, QuestionsAnsweredExtractor, ) from llama_index.core.node_parser import TokenTextSplitter from llama_index.core.ingestion import IngestionPipeline documents [...] # 你的 Document 列表 pipeline IngestionPipeline( transformations[ TokenTextSplitter(separator , chunk_size512, chunk_overlap128), SummaryExtractor(summaries[self, prev, next]), TitleExtractor(nodes5), QuestionsAnsweredExtractor(questions3), ] ) nodes pipeline.run(documentsdocuments, show_progressTrue) # 检查某个节点自动生成的元数据 print(nodes[0].metadata.keys()) # 包含 document_title、section_summary、prev_section_summary、 # next_section_summary、questions_this_excerpt_can_answer需要留意两点限制SummaryExtractor仅支持TextNode且其prev/next摘要依赖节点在列表中的相邻顺序因此应放在文本切分器之后使用TitleExtractor按ref_doc_id分组取前 N 个节点推断标题适合长文档场景in_placeTrue会原地修改节点如需保留原始数据可改为False。官方文档还提供了多个可运行的 Notebook 示例覆盖 SEC 文档元数据抽取MetadataExtractionSEC.ipynb、LLM 综述论文抽取MetadataExtraction_LLMSurvey.ipynb、气候实体抽取EntityExtractionClimate.ipynb以及文档上下文抽取DocumentContextExtractor.ipynb。如果想深入源码核心实现集中在 extractors 目录实体抽取集成在 llama-index-extractors-entity。小结Metadata Extractor 是 LlamaIndex 提升检索精度的关键一环通过SummaryExtractor、QuestionsAnsweredExtractor、TitleExtractor和EntityExtractor可以让 LLM或专用 NER 模型自动为每个节点补充摘要、可答问题、文档标题与实体信息。这些提取器本质上是BaseExtractor子类与文本切分器一样作为转换组件可灵活编排进IngestionPipeline或VectorStoreIndex.from_documents()借助PydanticProgramExtractor还可以实现任意结构化元数据的抽取满足复杂的生产级知识库建设需求。【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

WezTerm 配置详解:用 `disable_default_mouse_bindings` 完全掌控鼠标行为

WezTerm 配置详解:用 `disable_default_mouse_bindings` 完全掌控鼠标行为

WezTerm 配置详解:用 disable_default_mouse_bindings 完全掌控鼠标行为 【免费下载链接】wezterm A GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust 项目地址: https://gitcode.com/GitHub_Trending…

📅 2026/9/12 2:52:08
OpenMontage React 性能实战:用 useRef 承载瞬时值,告别高频重渲染

OpenMontage React 性能实战:用 useRef 承载瞬时值,告别高频重渲染

OpenMontage React 性能实战:用 useRef 承载瞬时值,告别高频重渲染 【免费下载链接】OpenMontage Worlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files. …

📅 2026/9/12 2:52:08
用 GoogleMock 触发内存检查失败而真实对象正常怎么排查:给基类加虚析构函数

用 GoogleMock 触发内存检查失败而真实对象正常怎么排查:给基类加虚析构函数

用 GoogleMock 触发内存检查失败而真实对象正常怎么排查:给基类加虚析构函数 【免费下载链接】googletest GoogleTest - Google Testing and Mocking Framework 项目地址: https://gitcode.com/GitHub_Trending/go/googletest 用 GoogleTest/GoogleMock 写 C…

📅 2026/9/12 2:52:08
MORE NEWS

更多资讯

📰

STM32驱动绝对值编码器:从时序解析到多圈标定与滤波实践

简介:面向STM32开发者的绝对值编码器应用资源,整合了基于HAL库的完整工程示例,适合需要精确位置反馈、电机定位与运动控制的嵌入式工程师参考。压缩包共78个文件,以C/C源码头文件为主,辅以启动文件、Keil工程与配置文件…

📰

Mask R-CNN结合char_cnn的停车场车牌识别系统设计与实践

简介:基于Mask R-CNN训练模型与PyQt开发的车牌识别系统完整项目源码,面向人工智能、通信工程、自动化、电子信息等专业的在校生和开发者,适用于毕业设计、课程设计或项目初期演示。项目包含可运行的图形界面、模型权重、车牌数据集与标注文件…

📰

打造STM32舵机库:STS3215串口帧协议与半双工总线控制

简介:针对飞特舵机STS3215的控制库文件,面向机器人、无人机及其他自动化设备开发者,意在简化舵机驱动开发与底层通信管理。压缩包共4个文件,包含2个C源码和2个头文件:源码负责协议解析、指令发送等功能实现&#xff0c…

📰

34mm SiC功率模块:新能源系统高效化与小型化的物理基准

1. 项目概述:为什么34mm SiC模块正在成为新能源系统里的“心脏级”器件最近在几个光伏逆变器客户现场做技术复盘时,反复被问到一个问题:“你们说的‘基本半导体全系34mm SiC模块’,到底和我们原来用的62mm IGBT模块、甚至市面上常…

📰

分岔系统特征提取与MPC自适应控制实战

简介:本资源是一套面向数学、电子信息工程及计算机专业本科生的分岔动态系统预测控制参数特征分析MATLAB仿真代码集,聚焦非线性系统建模与关键参数敏感性识别问题,适用于课程设计、期末大作业及毕业设计等实践环节。压缩包共394个文件&#x…

📰

机动目标跟踪中运动模型失配的本质与IMM解决方案

简介:本资源是一份面向雷达/导航系统开发与目标跟踪算法学习者的MATLAB仿真程序,聚焦于机动目标(含匀速、转弯、加速等多阶段运动)的建模与滤波跟踪问题。适用于自动控制、信号处理、无人系统感知等方向的本科生高年级课程设计、研…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬