代码之家  ›  专栏  ›  技术社区  ›  Gonzapepe

使用Weaviate.add_documents时出现错误“'tuple'对象没有属性'page_content'”

  •  0
  • Gonzapepe  · 技术社区  · 2 年前

    我有以下代码:

    if file.filename.lower().endswith('.pdf'):
                            pdf = ep.PDFLoad(file_path)  # this is the loader from langchain
                            doc = pdf.load()
                            archivo = crear_archivo(doc, file)
    

    在…内 crear_archivo 函数我正在拆分文档并将其发送到 Weaviate.add_documents :

       cliente = db.NewVect()  # This one creates the weaviate.client
        text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
        docs = text_splitter.split_documents(document)
    
        embeddings = OpenAIEmbeddings()
        return Weaviate.add_documents(docs, embeddings, client=client, weaviate_url=EnvVect.Host, by_text=False,      index_name="LangChain") 
    # using this instead of from_documents since I don't want to initialize a new vectorstore         
    
    # Some more logic to save the doc to another database
    

    每当我尝试运行代码时,它都会在 Weaviate.add_documents() 函数提示以下错误: 'tuple' object has no attribute 'page_content' . 我试着检查的类型 docs ,但这似乎没有错,因为它返回了 List[Document] 这与函数接受的类型相同。

    我怎样才能使它工作?我有点追随 this approach 但不同的是,我正在加载PDF、txt等文件。

    0 回复  |  直到 2 年前
        1
  •  1
  •   Rodrigo Vega Moreno    2 年前

    (Tambin soy nuevo ac)

    您得到的错误很可能是因为 docs 不是Document对象。

    AFAIK,a 文件 在LangChain中是一个列表 Document 物体。如果你跑步 type(docs[0]) 你应该得到 langchain.schema.document.Document 。此Document对象是一个具有两个键的字典:一个是 page_content: 它接受字符串值,第二个键是 metadata: 它只接受字典。 {page_content: str, metadata: dict} 。在LangChain的文档中没有很好地解释。

    我对解决你的问题的建议是:

    1. 确保 document 你在这里分手 docs = text_splitter.split_documents(document) ,实际上是一个LangChain文档对象。使用 print(document) ,您应该在第一行中看到这一点: [Document(page_content='your text etc... 在输出的最后,您应该看到 ...end of your text', metadata={'...
    2. 如果 文件 不是LangChain文档,您需要检查它是如何创建的。
    3. 如果 文件 是LangChain文档,请尝试 Weaviate.from_documents() 相反

    希望这能有所帮助,尤恩·阿布拉佐!