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

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

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

# INDEX DOCUMENTS
import os
from os.path import join, isfile

from langchain.document_loaders import UnstructuredMarkdownLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import TokenTextSplitter, CharacterTextSplitter
from langchain.vectorstores import Chroma


def index_documents(source_directories: list[str], persist_directory: str, chunk_size: int = 1000,
                    chunk_overlap: int = 15):
    """
    Indexe les documents venant des répertoires fournis

    :param source_directories: list[str]
    :param persist_directory: str
    :param chunk_size: int = 1000
    :param chunk_overlap: int = 15
    :return:
    """

    only_files = []
    for directory in source_directories:
        my_path = f'{directory}'
        for f in os.listdir(my_path):
            if isfile(join(my_path, f)):
                only_files.append(f'{my_path}/{f}')

    embeddings = OpenAIEmbeddings()
    for file in only_files:
        index_file_to_chroma(file, persist_directory, embeddings, chunk_size, chunk_overlap)


def index_file_to_chroma(file: str, persist_directory: str, embeddings: OpenAIEmbeddings, chunk_size: int, chunk_overlap: int):
    """
    Indexe un document dans Chroma

    :param embeddings: OpenAIEmbeddings
    :param file: str
    :param persist_directory: str
    :param chunk_size: int
    :param chunk_overlap: int
    :return:
    """

    loader = UnstructuredMarkdownLoader(file_path=file, encoding='utf8')
    docs = loader.load()
    text_splitter = CharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=0)
    pages = text_splitter.split_documents(docs)
    text_splitter = TokenTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
    texts = text_splitter.split_documents(pages)
    db = Chroma.from_documents(texts, embeddings, persist_directory=persist_directory)
    db.persist()
    print(f'Indexed file {file} for module {persist_directory}')
    db = None
# /INDEX DOCUMENTS

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

我已经try 将这些函数和导入复制到main.py文件中,但我收到了相同的错误.

我已经try 注释了lc_indexer.py的导入和对main.pyindex_documents函数的调用,但没有启动任何问题.

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

推荐答案

try 将typing-extensions模块降级到版本4.5.0.

我刚刚遇到了一个问题,在Pory更新了依赖项之后,版本4.6.0中断了我的项目执行.降级了,现在它又开始起作用了.

Python-3.x相关问答推荐

Numpy argmin()以查找最近的元组

如何计算累积几何平均数?

aiogram机器人中处理文本输入异常而不是按钮点击的回调函数.

将自动文本转换为 DataFrame

使用 Python 在特定组的列中设置上限

考虑到Pandas 系列中的不同索引,如何正确估计两列的百分比变化? Python相关

正则表达式来识别用 Python 写成单词的数字?

如何使用 Selenium by class_name 从大学橄榄球数据中抓取图像 url 列表

`pyspark mllib` 与 `pyspark ml` 包

使用 Python 解析 JSON 嵌套字典

Python - 如何从同一台客户端机器运行多个Flask应用程序

内部如何使用 Python 语法?

创建日志(log)文件

如何配置 Atom 以运行 Python3 脚本?

如何在 Selenium 和 Python 中使用类型查找元素

如何从 Python 3 导入 FileNotFoundError?

map 对象不是 JSON 可序列化的

Windows 下 Python 3.x 的 OpenCV

python 3中最快的标准输入/输出IO?

在archlinux上管理多个Python版本的正确方法