从 MapReduceDocumentsChain 迁移
MapReduceDocumentsChain 实现了一种针对(可能较长)文本的映射-归约策略。该策略如下:
- 将文本拆分为较小的文档;
- 将一个过程映射到较小的文档上;
- 将过程的结果归约或整合为最终结果。
请注意,映射步骤通常在输入文档上并行化。
在这种情况下应用的一个常见过程是摘要,其中映射步骤对单个文档进行摘要,而归约步骤生成摘要的摘要。
在归约步骤中,MapReduceDocumentsChain
支持摘要的递归“折叠”:输入将根据令牌限制进行分区,并生成分区的摘要。此步骤将重复进行,直到摘要的总长度在所需限制内,从而允许对任意长度文本进行摘要。这对于具有较小上下文窗口的模型特别有用。
LangGraph 支持 map-reduce 工作流,并为此问题提供了许多优势:
- LangGraph 允许单个步骤(例如连续摘要)进行流式处理,从而更好地控制执行;
- LangGraph的检查点支持错误恢复、扩展人机协作工作流,并更容易融入对话应用程序。
- LangGraph的实现更容易扩展,正如我们下面将看到的。
下面我们将介绍MapReduceDocumentsChain
及其相应的LangGraph实现,首先是一个简单的示例以作说明,其次是一个较长的示例文本以演示递归减少步骤。
让我们首先加载一个聊天模型:
- OpenAI
- Anthropic
- Azure
- Cohere
- NVIDIA
- FireworksAI
- Groq
- MistralAI
- TogetherAI
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")
pip install -qU langchain-anthropic
import getpass
import os
os.environ["ANTHROPIC_API_KEY"] = getpass.getpass()
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")
pip install -qU langchain-openai
import getpass
import os
os.environ["AZURE_OPENAI_API_KEY"] = getpass.getpass()
from langchain_openai import AzureChatOpenAI
llm = AzureChatOpenAI(
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
azure_deployment=os.environ["AZURE_OPENAI_DEPLOYMENT_NAME"],
openai_api_version=os.environ["AZURE_OPENAI_API_VERSION"],
)
pip install -qU langchain-google-vertexai
import getpass
import os
os.environ["GOOGLE_API_KEY"] = getpass.getpass()
from langchain_google_vertexai import ChatVertexAI
llm = ChatVertexAI(model="gemini-1.5-flash")
pip install -qU langchain-cohere
import getpass
import os
os.environ["COHERE_API_KEY"] = getpass.getpass()
from langchain_cohere import ChatCohere
llm = ChatCohere(model="command-r-plus")
pip install -qU langchain-nvidia-ai-endpoints
import getpass
import os
os.environ["NVIDIA_API_KEY"] = getpass.getpass()
from langchain import ChatNVIDIA
llm = ChatNVIDIA(model="meta/llama3-70b-instruct")
pip install -qU langchain-fireworks
import getpass
import os
os.environ["FIREWORKS_API_KEY"] = getpass.getpass()
from langchain_fireworks import ChatFireworks
llm = ChatFireworks(model="accounts/fireworks/models/llama-v3p1-70b-instruct")
pip install -qU langchain-groq
import getpass
import os
os.environ["GROQ_API_KEY"] = getpass.getpass()
from langchain_groq import ChatGroq
llm = ChatGroq(model="llama3-8b-8192")
pip install -qU langchain-mistralai
import getpass
import os
os.environ["MISTRAL_API_KEY"] = getpass.getpass()
from langchain_mistralai import ChatMistralAI
llm = ChatMistralAI(model="mistral-large-latest")
pip install -qU langchain-openai
import getpass
import os
os.environ["TOGETHER_API_KEY"] = getpass.getpass()
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="https://api.together.xyz/v1",
api_key=os.environ["TOGETHER_API_KEY"],
model="mistralai/Mixtral-8x7B-Instruct-v0.1",
)