使用Hugging Face Prompt Injection Identifier遇Pydantic ForwardRef错误求助
问题描述
包版本
- langchain==0.1.14
- langchain-community==0.0.31
- langchain-core==0.1.38
- langchain-experimental==0.0.56
- pydantic==1.10.14
我正尝试按照官方教程实现提示注入识别功能,以下是加载注入识别器的代码片段:
from optimum.onnxruntime import ORTModelForSequenceClassification from transformers import AutoTokenizer, pipeline tokenizer = AutoTokenizer.from_pretrained("ProtectAI/deberta-v3-base-prompt-injection", subfolder="onnx") tokenizer.model_input_names = ["input_ids", "attention_mask"] model = ORTModelForSequenceClassification.from_pretrained("ProtectAI/deberta-v3-base-prompt-injection", export=False, subfolder="onnx", file_name="model_optimized.onnx" ) classifier = pipeline( task="text-classification", model=model, tokenizer=tokenizer, truncation=True, max_length=512, ) from langchain_experimental.prompt_injection_identifier import ( HuggingFaceInjectionIdentifier, ) injection_identifier = HuggingFaceInjectionIdentifier( model=classifier, )
运行后触发如下错误:
ERROR: pydantic.errors.ConfigError: field "model" not yet prepared so type is still a ForwardRef, you might need to call HuggingFaceInjectionIdentifier.update_forward_refs(). CONTEXT: Traceback (most recent call last):
解决方案
这个错误是Pydantic前向引用未解析导致的,直接在初始化HuggingFaceInjectionIdentifier前调用update_forward_refs()方法就能解决。
修改后的代码:
from optimum.onnxruntime import ORTModelForSequenceClassification from transformers import AutoTokenizer, pipeline from langchain_experimental.prompt_injection_identifier import HuggingFaceInjectionIdentifier # 提前导入所有依赖模块,避免前向引用延迟解析 tokenizer = AutoTokenizer.from_pretrained("ProtectAI/deberta-v3-base-prompt-injection", subfolder="onnx") tokenizer.model_input_names = ["input_ids", "attention_mask"] model = ORTModelForSequenceClassification.from_pretrained("ProtectAI/deberta-v3-base-prompt-injection", export=False, subfolder="onnx", file_name="model_optimized.onnx" ) classifier = pipeline( task="text-classification", model=model, tokenizer=tokenizer, truncation=True, max_length=512, ) # 解析前向引用 HuggingFaceInjectionIdentifier.update_forward_refs() injection_identifier = HuggingFaceInjectionIdentifier( model=classifier, )
另外也可以调整导入顺序,把HuggingFaceInjectionIdentifier的导入放在最开头,确保类定义时相关类型已被加载。如果问题依旧,检查依赖包版本是否匹配,尤其是pydantic和langchain-experimental的兼容性。
内容的提问来源于stack exchange,提问作者AndCh
相关产品推荐
相关产品推荐

