langchain 中的链和可运行对象有什么区别?

问题描述 投票:0回答:1

我是 langchain 和 langserve 的新手。 langserve 的定义是“LangServe 帮助开发人员将 LangChain 可运行对象和链部署为 REST API”。 但无法理解两者之间的基本区别。

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
model = ChatOpenAI()
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
chain = prompt | model

链=提示| model 这是一个链还是可运行的。如果是链,那么runnable是怎么写的,需要什么runnable?

chatbot openai-api runnable langchain py-langchain
1个回答
0
投票

我们可以使用 Runnable 方法创建链的组件。例如,考虑下面的代码:

vectorstore = DocArrayInMemorySearch.from_texts(
    ["harrison worked at kensho", "bears like to eat honey"],
    embedding=OpenAIEmbeddings()
)
retriever = vectorstore.as_retriever()

template = """Answer the question based only on the following context:
{context}

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

retrival = RunnableMap({
    "context": lambda x: retriever.get_relevant_documents(x["question"]),
    "question": lambda x: x["question"]
})

chain = retrival | prompt | model | output_parser

正如您在上面的代码中看到的,runnable 和 chain 都被起诉。但是,我将链的一个组件定义为可运行组件。 这样做是因为现在我可以将两个参数传递给链,而且现在我们可以并行运行这些可运行对象。

因此,runnable 和 chain 无法进行比较,而是可以将链的组件创建为 runnable。

© www.soinside.com 2019 - 2024. All rights reserved.