You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

spaCy添加自定义组件时nlp.add_pipe报[E966]错误如何解决?

报错原因

这个ValueError: [E966]报错是spaCy 3.0及以上版本的API调整导致的:3.0之前的版本允许直接将自定义组件的可调用对象传入nlp.add_pipe,3.0之后该接口只接收已经注册的组件工厂的字符串名称,不再支持直接传函数对象。

修复方法

有两种常用修复方案:

方式一:官方推荐的组件注册法(适配所有场景)

  • 先导入Language类,用@Language.component装饰器给你的自定义组件注册唯一的名称
  • 调用nlp.add_pipe时传入你注册的组件名称字符串即可

修复后的完整代码如下:

import spacy
from spacy.language import Language

# 注册自定义组件,指定组件的唯一标识名称
@Language.component("custom_length_printer")
def custom_component(doc):
    # Imprime la longitud del doc en pantalla
    print("longitud del Doc:", len(doc))
    # Devuelve el objeto doc
    return doc

# Crea el objeto nlp
nlp = spacy.load("es_core_news_sm")

# 传入注册的组件名称字符串,而非函数本身
nlp.add_pipe("custom_length_printer", first=True)

# Imprime los nombres de los componentes del pipeline
print("Pipeline:", nlp.pipe_names)

方式二:临时插入法(适合快速测试小脚本)

如果只是临时测试不想做注册操作,可以直接手动往管道列表里插入组件,写法如下:

# 省略前面定义custom_component和加载nlp的代码
nlp.pipeline.insert(0, ("custom_component", custom_component))

该方式不推荐用于正式项目,注册法的兼容性和可维护性更好。

内容的提问来源于stack exchange,提问作者Mercedes Medaly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:54:02