LangChain DirectoryLoader加载.md文件卡住,报TP_NUM_C_BUFS过小错误
解决LangChain加载Markdown文件卡住及TP_NUM_C_BUFS错误问题
问题现象
使用LangChain的DirectoryLoader搭配UnstructuredMarkdownLoader加载.md文件、构建Chroma向量数据库时,程序卡在documents = loader.load()步骤,仅打印"loader",无法输出"loaded?";但切换为PyPDFLoader加载.pdf文件时流程完全正常。偶尔会触发以下底层错误:
loader 0 [main] python (11932) c:\python312\python.exe: *** fatal error - Internal error: TP_NUM_C_BUFS too small: 50 315 [main] python (11932) c:\python312\python.exe: *** fatal error - Internal error: TP_NUM_C_BUFS too small: 50
核心代码片段:
# loader = DirectoryLoader(self.data_directory+'/', glob="*.pdf", loader_cls=PyPDFLoader) loader = DirectoryLoader(self.data_directory+'/', glob="*.md",loader_cls=UnstructuredMarkdownLoader) print("loader") documents = loader.load() print("loaded? ") text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) texts = text_splitter.split_documents(documents) print("split? ") vectordb = Chroma.from_documents(documents=texts, embedding=self.embedding, persist_directory=self.persist_directory) print("persisted? ") retriever = vectordb.as_retriever() return retriever
解决方案
- 替换轻量Markdown加载器:
UnstructuredMarkdownLoader依赖的unstructured库在Windows环境下兼容性较差,改用LangChain原生的MarkdownLoader即可规避解析卡住的问题,替换后代码:from langchain.document_loaders import MarkdownLoader loader = DirectoryLoader(self.data_directory+'/', glob="*.md", loader_cls=MarkdownLoader) - 降级Python版本:
TP_NUM_C_BUFS too small错误是Python 3.12在Windows系统下的底层兼容性问题,暂时降级到Python 3.11.x可直接解决该报错。 - 禁用多线程加载:若坚持使用
UnstructuredMarkdownLoader,给DirectoryLoader添加use_multithreading=False参数,避免多进程触发的底层异常:loader = DirectoryLoader(self.data_directory+'/', glob="*.md", loader_cls=UnstructuredMarkdownLoader, use_multithreading=False) - 排查异常Markdown文件:部分包含复杂表格、嵌套HTML或特殊字符的.md文件会导致解析卡住,先测试单个简单格式的.md文件,排除文件本身的问题。
内容的提问来源于stack exchange,提问作者ranguy
相关产品推荐
相关产品推荐

