跳到主要内容

使用“@chain”装饰器创建一个可运行程序

您还可以通过添加 @chain 装饰器将任意函数转换为链。这在功能上相当于包装在 RunnableLambda 中。

通过正确跟踪您的链,这将具有提高可观察性的好处。对该函数内的可运行对象的任何调用都将被跟踪为嵌套子函数。

它还允许您像任何其他可运行程序一样使用它,将其组合成链等。

让我们来看看实际效果吧!

%pip install --upgrade --quiet  langchain langchain-openai
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import chain
from langchain_openai import ChatOpenAI

prompt1 = ChatPromptTemplate.from_template("Tell me a joke about {topic}")
prompt2 = ChatPromptTemplate.from_template("What is the subject of this joke: {joke}")


@chain
def custom_chain(text):
prompt_val1 = prompt1.invoke({"topic": text})
output1 = ChatOpenAI().invoke(prompt_val1)
parsed_output1 = StrOutputParser().invoke(output1)
chain2 = prompt2 | ChatOpenAI() | StrOutputParser()
return chain2.invoke({"joke": parsed_output1})

custom_chain 现在是可运行的,这意味着您将需要使用 invoke

custom_chain.invoke("bears")
'The subject of this joke is bears.'

如果您检查 LangSmith 跟踪,您应该会在其中看到一个 custom_chain 跟踪,其中对 OpenAI 的调用嵌套在下面