部署LangChain+StreamLit PDF问答应用触发PydanticUserError的解决方法
PDF文档问答应用部署时的Pydantic兼容性错误解决
我用LangChain、OpenAI(嵌入与LLM)、Chroma(向量嵌入存储)和StreamLit构建了PDF文档问答应用,尝试通过StreamLit云服务部署托管。安装完所有必要库和包后,触发如下错误:
PydanticUserError: If you use `@root_validator` with pre=False (the default) you MUST specify `skip_on_failure=True`. Note that `@root_validator` is deprecated and should be replaced with `@model_validator`. For further information visit https://errors.pydantic.dev/2.0.2/u/root-validator-pre-skip
附带回溯信息:
Traceback: File "/opt/render/project/src/.venv/lib/python3.7/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 552, in _run_script exec(code, module.__dict__) File "/opt/render/project/src/app.py", line 3, in <module> from langchain.document_loaders import PyMuPDFLoader, PyPDFLoader File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/__init__.py", line 8, in <module> from langchain.agents import MRKLChain, ReActChain, SelfAskWithSearchChain File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/agents/__init__.py", line 2, in <module> from langchain.agents.agent import Agent File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/agents/agent.py", line 10, in <module> from langchain.chains.base import Chain File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/chains/__init__.py", line 2, in <module> from langchain.chains.conversation.base import ConversationChain File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/chains/conversation/base.py", line 7, in <module> from langchain.chains.conversation.memory import ConversationBufferMemory File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/chains/conversation/memory.py", line 7, in <module> from langchain.chains.conversation.prompt import SUMMARY_PROMPT File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/chains/conversation/prompt.py", line 2, in <module> from langchain.prompts.prompt import PromptTemplate File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/prompts/__init__.py", line 2, in <module> from langchain.prompts.base import BasePromptTemplate File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/prompts/base.py", line 35, in <module> class BasePromptTemplate(BaseModel, ABC): File "/opt/render/project/src/.venv/lib/python3.7/site-packages/langchain/prompts/base.py", line 41, in BasePromptTemplate @root_validator() File "/opt/render/project/src/.venv/lib/python3.7/site-packages/pydantic/deprecated/class_validators.py", line 231, in root_validator code='root-validator-pre-skip',
问题原因
这个错误是LangChain版本与Pydantic v2.x不兼容导致的。LangChain旧版本使用了Pydantic v1.x的@root_validator语法,而Pydantic v2.x对该语法做了严格限制,同时标记@root_validator为废弃,要求替换为@model_validator。
解决方法
方法1:固定Pydantic为v1.x版本
在requirements.txt中指定兼容的Pydantic版本:pydantic==1.10.12然后重新安装依赖:
pip install -r requirements.txt方法2:升级LangChain到兼容Pydantic v2.x的版本
如果想保留Pydantic v2.x,需要升级LangChain到支持该版本的最新版:pip install --upgrade langchain注意:升级后可能需要检查代码中是否有其他依赖兼容问题,部分旧版LangChain的API在新版本中可能有变更。
方法3:使用LangChain的兼容版本分支
对于一些特定场景,可以安装LangChain的pydantic-v2兼容分支:pip install langchain[pydantic-v2]
内容的提问来源于stack exchange,提问作者Shuhul Handoo
相关产品推荐
相关产品推荐

