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
相关产品推荐
相关产品推荐

