我正在按照llama_index文档中的这个示例进行操作:https://github.com/run-llama/llama_index/blob/main/docs/examples/metadata_extraction/MetadataExtractionSEC.ipynb,以便在我的代码中使用自定义元数据提取器,如下所示:
from llama_index.node_parser import SimpleNodeParserfrom llama_index.node_parser.extractors import ( MetadataExtractor, MetadataFeatureExtractor,)class CustomExtractor(MetadataFeatureExtractor): def extract(self, nodes): metadata_list = [ { "custom": node.metadata["document_title"] + "\n" + node.metadata["excerpt_keywords"] } for node in nodes ] return metadata_listmetadata_extractor = MetadataExtractor( extractors=[ CustomExtractor() ],)
但是运行代码时出现了以下错误:
无法实例化抽象类CustomExtractor,其包含抽象方法class_name
我认为这里没有语法错误。
回答:
MetadataFeatureExtractor
继承自 BaseExtractor
,而 BaseExtractor
继承自 BaseComponent
,后者定义了一个名为 class_name()
的 @abstractmethod
。您需要在自定义提取器中实现这个方法。请尝试
class CustomExtractor(MetadataFeatureExtractor): @classmethod def class_name(cls): return 'CustomExtractor' def extract(self, nodes): metadata_list = [ { "custom": node.metadata["document_title"] + "\n" + node.metadata["excerpt_keywords"] } for node in nodes ] return metadata_list