TypeError: issubclass() arg 1 在 Flask 中导入 langchain 时必须是一个类

pro*_*out 6 flask python-3.x pydantic py-langchain

我正在使用文档加载器执行微服务,当尝试导入 langchain 的 UnstructedMarkdownLoader 时,应用程序无法在导入级别启动

\n
$ flask --app main run --debug\nTraceback (most recent call last):\n  File "venv/bin/flask", line 8, in <module>\n    sys.exit(main())\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 1063, in main\n    cli.main()\n  File "venv/lib/python3.9/site-packages/click/core.py", line 1055, in main\n    rv = self.invoke(ctx)\n  File "venv/lib/python3.9/site-packages/click/core.py", line 1657, in invoke\n    return _process_result(sub_ctx.command.invoke(sub_ctx))\n  File "venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke\n    return ctx.invoke(self.callback, **ctx.params)\n  File "venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke\n    return __callback(*args, **kwargs)\n  File "venv/lib/python3.9/site-packages/click/decorators.py", line 84, in new_func\n    return ctx.invoke(f, obj, *args, **kwargs)\n  File "venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke\n    return __callback(*args, **kwargs)\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 911, in run_command\n    raise e from None\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 897, in run_command\n    app = info.load_app()\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 308, in load_app\n    app = locate_app(import_name, name)\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 218, in locate_app\n    __import__(module_name)\n  File "main.py", line 5, in <module>\n    from lc_indexer import index_documents\n  File "lc_indexer.py", line 5, in <module>\n    from langchain.document_loaders import UnstructuredMarkdownLoader\n  File "venv/lib/python3.9/site-packages/langchain/__init__.py", line 6, in <module>\n    from langchain.agents import MRKLChain, ReActChain, SelfAskWithSearchChain\n  File "venv/lib/python3.9/site-packages/langchain/agents/__init__.py", line 2, in <module>\n    from langchain.agents.agent import (\n  File "venv/lib/python3.9/site-packages/langchain/agents/agent.py", line 16, in <module>\n    from langchain.agents.tools import InvalidTool\n  File "venv/lib/python3.9/site-packages/langchain/agents/tools.py", line 8, in <module>\n    from langchain.tools.base import BaseTool, Tool, tool\n  File "venv/lib/python3.9/site-packages/langchain/tools/__init__.py", line 42, in <module>\n    from langchain.tools.vectorstore.tool import (\n  File "venv/lib/python3.9/site-packages/langchain/tools/vectorstore/tool.py", line 13, in <module>\n    from langchain.chains import RetrievalQA, RetrievalQAWithSourcesChain\n  File "venv/lib/python3.9/site-packages/langchain/chains/__init__.py", line 2, in <module>\n    from langchain.chains.api.base import APIChain\n  File "venv/lib/python3.9/site-packages/langchain/chains/api/base.py", line 13, in <module>\n    from langchain.chains.api.prompt import API_RESPONSE_PROMPT, API_URL_PROMPT\n  File "venv/lib/python3.9/site-packages/langchain/chains/api/prompt.py", line 2, in <module>\n    from langchain.prompts.prompt import PromptTemplate\n  File "venv/lib/python3.9/site-packages/langchain/prompts/__init__.py", line 3, in <module>\n    from langchain.prompts.chat import (\n  File "venv/lib/python3.9/site-packages/langchain/prompts/chat.py", line 10, in <module>\n    from langchain.memory.buffer import get_buffer_string\n  File "venv/lib/python3.9/site-packages/langchain/memory/__init__.py", line 28, in <module>\n    from langchain.memory.vectorstore import VectorStoreRetrieverMemory\n  File "venv/lib/python3.9/site-packages/langchain/memory/vectorstore.py", line 10, in <module>\n    from langchain.vectorstores.base import VectorStoreRetriever\n  File "venv/lib/python3.9/site-packages/langchain/vectorstores/__init__.py", line 2, in <module>\n    from langchain.vectorstores.analyticdb import AnalyticDB\n  File "venv/lib/python3.9/site-packages/langchain/vectorstores/analyticdb.py", line 16, in <module>\n    from langchain.embeddings.base import Embeddings\n  File "venv/lib/python3.9/site-packages/langchain/embeddings/__init__.py", line 19, in <module>\n    from langchain.embeddings.openai import OpenAIEmbeddings\n  File "venv/lib/python3.9/site-packages/langchain/embeddings/openai.py", line 67, in <module>\n    class OpenAIEmbeddings(BaseModel, Embeddings):\n  File "pydantic/main.py", line 197, in pydantic.main.ModelMetaclass.__new__\n  File "pydantic/fields.py", line 506, in pydantic.fields.ModelField.infer\n  File "pydantic/fields.py", line 436, in pydantic.fields.ModelField.__init__\n  File "pydantic/fields.py", line 552, in pydantic.fields.ModelField.prepare\n  File "pydantic/fields.py", line 663, in pydantic.fields.ModelField._type_analysis\n  File "pydantic/fields.py", line 808, in pydantic.fields.ModelField._create_sub_type\n  File "pydantic/fields.py", line 436, in pydantic.fields.ModelField.__init__\n  File "pydantic/fields.py", line 552, in pydantic.fields.ModelField.prepare\n  File "pydantic/fields.py", line 668, in pydantic.fields.ModelField._type_analysis\n  File "/home/my_username/.pyenv/versions/3.9.16/lib/python3.9/typing.py", line 852, in __subclasscheck__\n    return issubclass(cls, self.__origin__)\nTypeError: issubclass() arg 1 must be a class\n
Run Code Online (Sandbox Code Playgroud)\n

lc_indexer.py这是langchain 导入发生的内容

\n
$ flask --app main run --debug\nTraceback (most recent call last):\n  File "venv/bin/flask", line 8, in <module>\n    sys.exit(main())\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 1063, in main\n    cli.main()\n  File "venv/lib/python3.9/site-packages/click/core.py", line 1055, in main\n    rv = self.invoke(ctx)\n  File "venv/lib/python3.9/site-packages/click/core.py", line 1657, in invoke\n    return _process_result(sub_ctx.command.invoke(sub_ctx))\n  File "venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke\n    return ctx.invoke(self.callback, **ctx.params)\n  File "venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke\n    return __callback(*args, **kwargs)\n  File "venv/lib/python3.9/site-packages/click/decorators.py", line 84, in new_func\n    return ctx.invoke(f, obj, *args, **kwargs)\n  File "venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke\n    return __callback(*args, **kwargs)\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 911, in run_command\n    raise e from None\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 897, in run_command\n    app = info.load_app()\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 308, in load_app\n    app = locate_app(import_name, name)\n  File "venv/lib/python3.9/site-packages/flask/cli.py", line 218, in locate_app\n    __import__(module_name)\n  File "main.py", line 5, in <module>\n    from lc_indexer import index_documents\n  File "lc_indexer.py", line 5, in <module>\n    from langchain.document_loaders import UnstructuredMarkdownLoader\n  File "venv/lib/python3.9/site-packages/langchain/__init__.py", line 6, in <module>\n    from langchain.agents import MRKLChain, ReActChain, SelfAskWithSearchChain\n  File "venv/lib/python3.9/site-packages/langchain/agents/__init__.py", line 2, in <module>\n    from langchain.agents.agent import (\n  File "venv/lib/python3.9/site-packages/langchain/agents/agent.py", line 16, in <module>\n    from langchain.agents.tools import InvalidTool\n  File "venv/lib/python3.9/site-packages/langchain/agents/tools.py", line 8, in <module>\n    from langchain.tools.base import BaseTool, Tool, tool\n  File "venv/lib/python3.9/site-packages/langchain/tools/__init__.py", line 42, in <module>\n    from langchain.tools.vectorstore.tool import (\n  File "venv/lib/python3.9/site-packages/langchain/tools/vectorstore/tool.py", line 13, in <module>\n    from langchain.chains import RetrievalQA, RetrievalQAWithSourcesChain\n  File "venv/lib/python3.9/site-packages/langchain/chains/__init__.py", line 2, in <module>\n    from langchain.chains.api.base import APIChain\n  File "venv/lib/python3.9/site-packages/langchain/chains/api/base.py", line 13, in <module>\n    from langchain.chains.api.prompt import API_RESPONSE_PROMPT, API_URL_PROMPT\n  File "venv/lib/python3.9/site-packages/langchain/chains/api/prompt.py", line 2, in <module>\n    from langchain.prompts.prompt import PromptTemplate\n  File "venv/lib/python3.9/site-packages/langchain/prompts/__init__.py", line 3, in <module>\n    from langchain.prompts.chat import (\n  File "venv/lib/python3.9/site-packages/langchain/prompts/chat.py", line 10, in <module>\n    from langchain.memory.buffer import get_buffer_string\n  File "venv/lib/python3.9/site-packages/langchain/memory/__init__.py", line 28, in <module>\n    from langchain.memory.vectorstore import VectorStoreRetrieverMemory\n  File "venv/lib/python3.9/site-packages/langchain/memory/vectorstore.py", line 10, in <module>\n    from langchain.vectorstores.base import VectorStoreRetriever\n  File "venv/lib/python3.9/site-packages/langchain/vectorstores/__init__.py", line 2, in <module>\n    from langchain.vectorstores.analyticdb import AnalyticDB\n  File "venv/lib/python3.9/site-packages/langchain/vectorstores/analyticdb.py", line 16, in <module>\n    from langchain.embeddings.base import Embeddings\n  File "venv/lib/python3.9/site-packages/langchain/embeddings/__init__.py", line 19, in <module>\n    from langchain.embeddings.openai import OpenAIEmbeddings\n  File "venv/lib/python3.9/site-packages/langchain/embeddings/openai.py", line 67, in <module>\n    class OpenAIEmbeddings(BaseModel, Embeddings):\n  File "pydantic/main.py", line 197, in pydantic.main.ModelMetaclass.__new__\n  File "pydantic/fields.py", line 506, in pydantic.fields.ModelField.infer\n  File "pydantic/fields.py", line 436, in pydantic.fields.ModelField.__init__\n  File "pydantic/fields.py", line 552, in pydantic.fields.ModelField.prepare\n  File "pydantic/fields.py", line 663, in pydantic.fields.ModelField._type_analysis\n  File "pydantic/fields.py", line 808, in pydantic.fields.ModelField._create_sub_type\n  File "pydantic/fields.py", line 436, in pydantic.fields.ModelField.__init__\n  File "pydantic/fields.py", line 552, in pydantic.fields.ModelField.prepare\n  File "pydantic/fields.py", line 668, in pydantic.fields.ModelField._type_analysis\n  File "/home/my_username/.pyenv/versions/3.9.16/lib/python3.9/typing.py", line 852, in __subclasscheck__\n    return issubclass(cls, self.__origin__)\nTypeError: issubclass() arg 1 must be a class\n
Run Code Online (Sandbox Code Playgroud)\n

该文件是从测试项目复制的,在尝试该项目时根本不会发生此类错误,但它是从 CLI 进行测试的,因此可能会更改此处的某些内容。

\n

已经尝试将这些函数和导入复制到main.py文件中,但我得到了同样的错误。

\n

我尝试在 中注释函数的导入lc_indexer.py和调用,并且它启动没有问题。index_documentsmain.py

\n

这里问题的根源是什么?Langchain 要求已安装

\n

小智 13

尝试将typing-extensions模块降级回版本4.5.0

4.6.0在 Poetry 更新依赖项后,我刚刚遇到了版本问题,该问题破坏了我的项目执行。降级了,现在又可以工作了。

  • 我们遇到了同样的问题,并找到了与卢卡斯相同的解决方案。在requirements.txt中,添加`typing_extensions==4.5.0`来固定版本。然后`pip install -rrequirements.txt` (2认同)

小智 5

花了很多时间后我找到了解决方案。我尝试降级TypingExtension==4.5.0 和更多选项,但这对我不起作用。

解决方案是安装这个:

pip install pydantic==1.10.8
pip installtyping-inspect==0.8.0typing_extensions==4.5。
pip 安装 chromadb==0.3.26