将Confluence数据导入Azure Search向量索引时遇'dict'无'name'属性错误求助
解决Azure Search向量存储添加文档时的'dict' object has no attribute 'name'错误
你的思路方向是对的,但核心问题不是单纯转列表,而是**split_docs中混入了字典类型元素,而Azure Search的LangChain集成要求接收的是纯langchain_core.documents.base.Document对象列表**。
错误原因
LangChain文本分割器正常输出的是Document对象列表,但如果在文档预处理环节(比如从Confluence拉取后序列化、或从文件读取字典格式数据),不小心把Document转成了字典,就会导致split_docs里存在字典元素。Azure Search向量存储在处理文档时,会尝试访问对象的name属性,字典没有这个属性,因此触发报错。
验证问题
先执行以下代码确认split_docs的元素类型:
print([type(doc) for doc in split_docs])
如果输出中包含<class 'dict'>,说明确实存在字典元素。
修复步骤
- 导入
Document类:
from langchain_core.documents.base import Document
- 清理
split_docs,将字典元素重新转为Document对象:
cleaned_docs = [] for doc in split_docs: if isinstance(doc, dict): # 按Document结构重新构造对象 cleaned_doc = Document( page_content=doc['page_content'], metadata=doc['metadata'] ) cleaned_docs.append(cleaned_doc) else: cleaned_docs.append(doc)
- 使用清理后的列表调用添加方法:
vector_store.add_documents(cleaned_docs)
后续注意事项
- 从Confluence拉取数据后,直接构造
Document对象并保持该类型,避免不必要的字典序列化操作。 - 如果是从外部加载字典格式的文档数据,务必在文本分割前完成
Document对象的转换。
内容的提问来源于stack exchange,提问作者shlco
相关产品推荐
相关产品推荐

