实例化llama index的SimpleNodeParser类时遇ValidationError的排查方法
问题
在M1 Mac的虚拟环境中,按照官方文档编写如下代码:
from llama_index.node_parser import SimpleNodeParser from llama_index import SimpleDirectoryReader # load the blogs in using the reader docs = SimpleDirectoryReader('./data').load_data() # chunk up the blog posts into nodes parser = SimpleNodeParser() nodes = parser.get_nodes_from_documents(docs)
运行后出现以下错误:
ValidationError Traceback (most recent call last) Cell In[20], line 8 5 docs = SimpleDirectoryReader('./data').load_data() 7 # chunk up the blog posts into nodes ----> 8 parser = SimpleNodeParser() 9 nodes = parser.get_nodes_from_documents(docs) File ~/Emily/trials/.env/lib/python3.9/site-packages/pydantic/v1/main.py:341, in BaseModel.__init__(__pydantic_self__, **data) 339 values, fields_set, validation_error = validate_model(__pydantic_self__.__class__, data) 340 if validation_error: --> 341 raise validation_error 342 try: 343 object_setattr(__pydantic_self__, '__dict__', values) ValidationError: 1 validation error for SimpleNodeParser text_splitter field required (type=value_error.missing)
排查与解决方法
- 核心原因:当前使用的LlamaIndex版本与参考的官方文档版本不兼容。旧版本中
SimpleNodeParser允许无参数实例化,但新版本(如v0.9及以上)要求必须传入text_splitter参数,否则触发Pydantic的字段缺失验证错误。 - 代码修正方案:显式传入文本分割器,示例如下:
from llama_index.node_parser import SimpleNodeParser from llama_index import SimpleDirectoryReader from llama_index.text_splitter import SentenceSplitter # 加载指定目录下的文档 docs = SimpleDirectoryReader('./data').load_data() # 初始化默认文本分割器(可根据需求调整chunk_size等参数) text_splitter = SentenceSplitter(chunk_size=1024, chunk_overlap=20) # 传入text_splitter实例化节点解析器 parser = SimpleNodeParser(text_splitter=text_splitter) nodes = parser.get_nodes_from_documents(docs)
- 版本适配方案:
- 查看当前LlamaIndex版本:执行
pip show llama-index命令确认版本号。 - 若想沿用旧文档写法,可降级到兼容版本,例如:
pip install llama-index==0.8.65。 - 若使用新版本,需严格按照对应版本的官方文档编写代码。
- 查看当前LlamaIndex版本:执行
内容的提问来源于stack exchange,提问作者superhero
相关产品推荐
相关产品推荐

