如何从一个字符串创建一个LangChain文档

9

我在官方网站的langchain文档中进行了全面搜索,但没有找到如何在Python中使用一个str变量创建langchain文档的方法,所以我在他们的GitHub代码中进行了搜索,我找到了这个:

  doc=Document(
                page_content="text",
                metadata={"source": "local"}
            )


PS:我添加了元数据属性
然后我尝试使用我的链条来处理该文档:
内存和链条:
memory = ConversationBufferMemory(memory_key="chat_history", input_key="human_input")
chain = load_qa_chain(
    llm, chain_type="stuff", memory=memory, prompt=prompt
)


调用方法:
  chain({"input_documents": doc, "human_input": query})

提示模板:

template = """You are a senior financial analyst analyzing the below document and having a conversation with a human.
{context}
{chat_history}
Human: {human_input}
senior financial analyst:"""

prompt = PromptTemplate(
    input_variables=["chat_history", "human_input", "context"], template=template
)

但是我遇到了以下错误:
AttributeError: 'tuple' object has no attribute 'page_content'


当我在使用链式操作之前尝试检查文档对象的类型和页面内容时,我得到了这个结果。
print(type(doc))
<class 'langchain.schema.Document'>
print(doc.page_content)
"text"


4个回答

20
这对我有用:
from langchain.docstore.document import Document

doc =  Document(page_content="text", metadata={"source": "local"})


1
似乎从langchain.schema.document导入也是可行的,而且后者模块是在API文档中指定的那个。 - Sergii Volchkov

3
首先,一些背景信息。根据我目前所了解的,一个文档是一个Document对象的列表。如果你运行type(doc[0]),你会得到langchain.schema.document.Document。这个Document对象是一个由两个键组成的字典:一个是page_content:,它接受字符串值;第二个键是metadata:,它只接受字典。默认情况下(不要引用我说的话:这是经过大量试错和你提到的没有文档的情况下),一个“空”的Document包含了上述两个键,并且在其metadata:中有一个单独的字典,其中只有一个键:{source:},它只接受字符串。你可以通过创建一个Document对象的list来创建一个多个“页面”的文档对象,方法如下:
首先,你必须有一个字符串文本的列表:text_list,以及一个元数据的字典列表:text_list。请确保这两个列表的长度相同。
from langchain.docstore.document import Document

document =  []

for item in range(len(text_string)):
    page = Document(page_content=doc_text_splits[item],
    metadata = metadata_string[item])
    doc.append(page)

此外,您还可以使用LangChain中的任何分割器创建Document对象。
from langchain.text_splitter import CharacterTextSplitter

doc_creator = CharacterTextSplitter(parameters)

document = doc_creator.create_documents(texts = text_list, metadatas = metadata_list)

2
尝试以下代码片段。
from langchain.schema.document import Document
doc =  Document(page_content="text", metadata={"source": "local"})

这个链接和https://dev59.com/o1N1hooBIXSAPYfQJDF3#76651436完全一样。 - Hongbo Miao
这不是同一个Hongbo。它使用了不同的文档库。它来自langchain.schema.document。在标记答案之前,请先检查一下这个。 - undefined
请参考此链接:https://api.python.langchain.com/zh/latest/schema/langchain.schema.document.Document.html - undefined

0
这是我能想到的最好的。
def str_to_doc(text,name):
   folder_name = 'docs'
   if not os.path.exists(folder_name):
       os.makedirs(folder_name)
   file_name = name+'.txt'
   path = os.path.join(folder_name, file_name)
   with open(path, "w") as file:
        file.write(text)
   loader = TextLoader(path)
   return loader.load()



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接