#LangChain | RAG | LLM#LangChain LCEL_使用pipe链接runnables,获取LLM 推理结果

Runnable 接口的一个关键优点是,任何两个可运行对象都可以“链接”在一起,形成序列。前一个可运行对象 .invoke() 调用的输出将作为输入传递给下一个可运行对象。这可以使用管道运算符 ( | ) 或更显式 .pipe() 的方法来完成,该方法执行相同的操作。生成的结果是 RunnableSequence 可运行的,这意味着它可以像任何其他可运行对象一样被调用、流式传输或管道传输。

pipe operator

使用提示模板将输入格式化为聊天模型,最后使用输出解析器将聊天消息输出转换为字符串。

from langchain_anthropic import ChatAnthropic
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
model = ChatAnthropic(model_name="claude-3-haiku-20240307")

chain = prompt | model | StrOutputParser()

提示和模型都是可运行的,提示调用的输出类型与聊天模型的输入类型相同,因此我们可以将它们链接在一起。然后,我们可以像调用任何其他可运行序列一样调用结果序列:

chain.invoke({"topic": "bears"})

Coercion 强迫

我们甚至可以将这条链与更多的可运行对象结合起来,以创建另一条链。这可能涉及使用其他类型的可运行对象进行一些输入/输出格式,具体取决于链组件所需的输入和输出。
例如,假设我们想用另一条链组成笑话生成链,该链评估生成的笑话是否有趣。

from langchain_core.output_parsers import StrOutputParser

analysis_prompt = ChatPromptTemplate.from_template("is this a funny joke? {joke}")

composed_chain = {"joke": chain} 
				| analysis_prompt 
				| model 
				| StrOutputParser()

composed_chain.invoke({"topic": "bears"})

函数也将被强制为可运行对象,因此您也可以将自定义逻辑添加到链中。以下链产生与之前相同的逻辑流:

composed_chain_with_lambda = (
    chain
    | (lambda input: {"joke": input})
    | analysis_prompt
    | model
    | StrOutputParser()
)
composed_chain_with_lambda.invoke({"topic": "beets"})

但是,请记住,使用此类函数可能会干扰流式处理等操作。有关详细信息,请参阅此部分

.pipe()方法

我们也可以使用 .pipe() 方法组成相同的序列。

from langchain_core.runnables import RunnableParallel

composed_chain_with_pipe = (
    RunnableParallel({"joke": chain})
    .pipe(analysis_prompt)
    .pipe(model)
    .pipe(StrOutputParser())
)

composed_chain_with_pipe.invoke({"topic": "battlestar galactica"})

对比
在这里插入图片描述

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值