使用LangChain与Pydantic时遭遇no validator found错误求助
解决LangChain + Pydantic 2.x中的"no validator found"错误
问题根源
你使用的LangChain 0.0.284版本的create_extraction_chain_pydantic方法底层依赖Pydantic v1的实现,但当前环境安装的是Pydantic 2.8.2。两者的模型配置逻辑、字段验证机制存在兼容性差异,导致LangChain在生成提取链时无法识别你的Resume模型,抛出"no validator found"错误。
可行解决方案
方案1:降级Pydantic到v1兼容版本
直接将Pydantic降级至LangChain 0.0.284支持的v1版本:
pip install pydantic==1.10.13
降级后无需修改原代码,直接运行即可正常生成提取链。
方案2:不降级Pydantic,改用create_extraction_chain替代
如果需要保留Pydantic 2.x,可使用LangChain的通用提取链方法,手动处理模型转换:
from typing import Optional from pydantic import BaseModel, Field, ValidationError from config import set_environment from langchain.chains import create_extraction_chain # 替换原方法 from langchain.chat_models import ChatOpenAI from langchain.document_loaders import PyPDFLoader class Resume(BaseModel): first_name: Optional[str] = Field(None, description="First Name") last_name: Optional[str] = Field(None, description="Last Name") email: Optional[str] = Field(None, description="Email Address") phone: Optional[str] = Field(None, description="Phone Number") set_environment() # 原有验证代码保持不变 sample_data = { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com", "phone": "123-456-7890" } try: resume = Resume(**sample_data) print("Validation successful:", resume) except ValidationError as e: print("Validation error:", e) # PDF加载部分不变 pdf_file_path = "laverne-resume.pdf" pdf_loader = PyPDFLoader(pdf_file_path) docs = pdf_loader.load_and_split() chat_model = ChatOpenAI(model_name="gpt-3.5-turbo") # 从Pydantic 2模型生成提取schema schema = Resume.model_json_schema() extraction_schema = { "properties": schema["properties"], "required": [] # 根据需求添加必填字段 } chain = create_extraction_chain(schema=extraction_schema, llm=chat_model) resp = chain.run(docs) # 将LLM输出转换为Resume模型实例 resume_instances = [Resume(**item) for item in resp] print(resume_instances)
方案3:升级LangChain到支持Pydantic 2的版本
LangChain 0.1.x及以上版本全面支持Pydantic 2,升级后原代码可直接运行:
pip install --upgrade langchain>=0.1.0
升级后无需修改代码,create_extraction_chain_pydantic方法会自动适配Pydantic 2的模型。
内容的提问来源于stack exchange,提问作者Aravind Yarram
相关产品推荐
相关产品推荐

