You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LlamaParse无法解析目录内文档,报file_input参数错误

解决LlamaParse + SimpleDirectoryReader的file_input类型错误

问题根源

SimpleDirectoryReader默认会把文件读成字节流传给自定义提取器,但LlamaParse的解析器不接受这种字节流输入——它只认文件路径字符串、原始文件字节或者特定格式的缓冲区对象,所以直接把LlamaParse实例塞给file_extractor就会触发类型不匹配的报错。

两种可行修复方案

方案1:给LlamaParse套个包装类

写个简单的包装类,让它接收文件路径,再转交给LlamaParse处理:

from llama_parse import LlamaParse
from llama_index.core.readers.base import BaseReader
from typing import List, Dict, Any

class LlamaParsePathReader(BaseReader):
    def __init__(self, result_type: str = "markdown"):
        self.parser = LlamaParse(result_type=result_type)
    
    def load_data(self, file_path: str, extra_info: Dict[str, Any] = None) -> List[Any]:
        # 直接传文件路径给LlamaParse解析
        return self.parser.load_data(file_path)

# 用包装后的类替代原parser
parser = LlamaParsePathReader(result_type="markdown")
file_extractor = {'.pdf': parser}

reader = SimpleDirectoryReader(input_dir='./data', file_extractor=file_extractor, recursive=True).load_data()

方案2:直接用函数作为提取器

不用包装类,写个小函数接收文件路径,内部调用LlamaParse:

from llama_parse import LlamaParse
from llama_index.core.readers import SimpleDirectoryReader

def parse_pdf(file_path: str, **kwargs):
    parser = LlamaParse(result_type="markdown")
    return parser.load_data(file_path)

file_extractor = {'.pdf': parse_pdf}

reader = SimpleDirectoryReader(input_dir='./data', file_extractor=file_extractor, recursive=True).load_data()

为什么这样能解决问题

两种方案都是让LlamaParse直接拿到文件路径,而不是SimpleDirectoryReader默认传递的字节流,完美匹配它的输入要求。你可以先拿单个PDF文件测试下解析是否正常,再批量跑目录里的文件。

内容的提问来源于stack exchange,提问作者verstandskies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:45:01