如何将参数从一个步骤传递到下一个
在构建包含多个步骤的链时,有时您可能希望将前一步骤的数据原封不动地传递给后续步骤作为输入。RunnablePassthrough
类允许您这样做,通常与RunnableParallel
一起使用,以便在构建的链中将数据传递到后续步骤。
请看下面的示例:
# 安装LangChain和langchain-openai库
%pip install -qU langchain langchain-openai
import os
from getpass import getpass
# 设置环境变量OPENAI_API_KEY
os.environ["OPENAI_API_KEY"] = getpass()
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
# 创建RunnableParallel实例,使用RunnablePassthrough传递数据
runnable = RunnableParallel(
passed=RunnablePassthrough(), # 使用RunnablePassthrough传递数据
modified=lambda x: x["num"] + 1, # 使用lambda表达式修改数据
)
# 调用runnable,传递包含数字1的字典
runnable.invoke({"num": 1})
# 输出结果:{'passed': {'num': 1}, 'modified': 2}
#如上所见,'passed’键使用了RunnablePassthrough(),因此它简单地传递了{‘num’: 1}。
#我们还设置了第二个键’modified’,它使用lambda表达式将num的值加1,结果是’modified’键的值为2。
检索示例
在下面的示例中,我们看到一个更实际的用例,其中我们使用RunnablePassthrough
和RunnableParallel
在链中,以正确格式化输入到提示:
from langchain_community.vectorstores import FAISS
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
# 创建FAISS向量存储实例
vectorstore = FAISS.from_texts(
["harrison worked at kensho"], embedding=OpenAIEmbeddings()
)
# 将向量存储转换为检索器
retriever = vectorstore.as_retriever()
# 定义提示模板
template = "Answer the question based only on the following context:\n{context}\n\nQuestion: {question}"
prompt = ChatPromptTemplate.from_template(template)
# 创建ChatOpenAI模型实例
model = ChatOpenAI()
# 构建检索链
retrieval_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)
# 使用检索链,传递问题"where did harrison work?"
retrieval_chain.invoke("where did harrison work?")
# 输出结果:'Harrison worked at Kensho.'
这里,提示的输入期望是一个包含"context"和"question"键的映射。用户输入只是问题。
因此,我们需要使用检索器获取上下文,并将用户输入传递到"question"键下。
RunnablePassthrough允许我们将用户的问题传递给提示和模型。
总结:
本文介绍了LangChain框架中的RunnablePassthrough
类,它允许将数据从一个步骤原封不动地传递到另一个步骤。通过示例代码,我们学习了如何使用RunnablePassthrough
与RunnableParallel
结合使用,以及如何在实际应用中格式化输入到提示。
扩展知识:
LangChain是一个用于构建和执行复杂模型链的框架,它提供了灵活的组件来处理数据流和模型调用。RunnablePassthrough
是LangChain中用于数据传递的组件之一,它在构建需要数据连续传递的模型链时非常有用。通过本文的学习,读者可以更好地理解如何在LangChain中构建和使用模型链。