使用KnowledgeGraphIndex导入多CSV至知识图谱时遇AttributeError问题求助
问题解决:AttributeError: 'Document' object has no attribute 'get_doc_id'
问题原因
KnowledgeGraphIndex要求每个输入的Document对象具备唯一标识的doc_id,但CharacterTextSplitter.split_documents()生成的文档默认不带该属性,导致索引创建时触发错误。
解决方案
方案1:手动为分割后的文档分配唯一ID
遍历所有分割后的文档,给每个文档添加doc_id属性:
from langchain.document_loaders import CSVLoader from langchain.text_splitter import CharacterTextSplitter import uuid # 加载CSV文件 csv_loader = CSVLoader("/content/Train-Set.csv") data = csv_loader.load() # 分割文档 splitter = CharacterTextSplitter(separator="\n", chunk_size=500, chunk_overlap=0, length_function=len) documents = splitter.split_documents(data) # 为每个文档添加唯一doc_id for doc in documents: doc.doc_id = str(uuid.uuid4())
方案2:用新版LangChain的Document类指定ID(v0.1+)
如果使用LangChain 0.1及以上版本,可重新封装文档时直接指定id参数:
from langchain_core.documents import Document import uuid # 分割文档(步骤同上) documents = splitter.split_documents(data) # 重新封装带ID的文档 documents_with_ids = [] for doc in documents: new_doc = Document( page_content=doc.page_content, metadata=doc.metadata, id=str(uuid.uuid4()) ) documents_with_ids.append(new_doc) # 使用带ID的文档创建索引 index = KnowledgeGraphIndex.from_documents( documents_with_ids, storage_context=storage_context, include_embeddings=True, max_triplets_per_chunk=2, embed_model=embed_model, )
方案3:升级LangChain到稳定版
部分旧版本存在兼容性问题,尝试升级依赖:
pip install --upgrade langchain langchain-community langchain-core
多CSV文件加载扩展
如果要加载目录下所有CSV文件,可使用SimpleDirectoryLoader批量处理:
from langchain.document_loaders import SimpleDirectoryLoader # 加载指定目录下所有CSV loader = SimpleDirectoryLoader( path="/path/to/your/csv/folder", loader_cls=CSVLoader, loader_kwargs={"csv_args": {"delimiter": ","}} ) data = loader.load() # 后续分割、添加ID步骤同上
内容的提问来源于stack exchange,提问作者Nikhita Kanoj
相关产品推荐
相关产品推荐

