Skip to main content

Passing data through

可运行的透传本身允许您保持输入不变。通常与可运行的并行结合使用,将数据传递到地图中的新键。

请看下面的例子。

%pip install --upgrade --quiet  langchain langchain-openai
from langchain_core.runnables import RunnableParallel, RunnablePassthrough

runnable = RunnableParallel(
passed=RunnablePassthrough(),
modified=lambda x: x["num"] + 1,
)

runnable.invoke({"num": 1})
{'passed': {'num': 1}, 'extra': {'num': 1, 'mult': 3}, 'modified': 2}

如上所示, 传递的键名为RunnablePassthrough(),所以它只是传递了{'num': 1}。

我们还在地图中设置了第二个键为“modified”。这个键使用了一个lambda表达式,将num加1来设置一个单个值,结果是“modified”键的值为2。

Retrieval Example

在下面的示例中,我们看到了一个使用案例,其中我们使用了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

vectorstore = FAISS.from_texts(
["harrison worked at kensho"], embedding=OpenAIEmbeddings()
)
retriever = vectorstore.as_retriever()
template = """Answer the question based only on the following context:
{context}

Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI()

retrieval_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)

retrieval_chain.invoke("where did harrison work?")
'Harrison worked at Kensho.'

在此,期望提示的输入是一个具有键“context”和“question”的映射。用户输入只是问题。因此,我们需要使用我们的检索器获取上下文,并将用户输入传递给“question”键。在这种情况下,RunnablePassthrough允许我们将用户的问题传递给提示和模型。


Help us out by providing feedback on this documentation page: