LangChain 49 深入理解LangChain 表达式语言十二 Runnable 透传数据保持输入不变 LangChain Expression Language (LCEL)

LangChain系列文章

  1. LangChain 29 调试Debugging 详细信息verbose
  2. LangChain 30 ChatGPT LLM将字符串作为输入并返回字符串Chat Model将消息列表作为输入并返回消息
  3. LangChain 31 模块复用Prompt templates 提示词模板
  4. LangChain 32 输出解析器Output parsers
  5. LangChain 33: LangChain表达语言LangChain Expression Language (LCEL)
  6. LangChain 34: 一站式部署LLMs使用LangServe
  7. LangChain 35: 安全最佳实践深度防御Security
  8. LangChain 36 深入理解LangChain 表达式语言优势一 LangChain Expression Language (LCEL)
  9. LangChain 37 深入理解LangChain 表达式语言二 实现prompt+model+output parser LangChain Expression Language (LCEL)
  10. LangChain 38 深入理解LangChain 表达式语言三 实现RAG检索增强生成 LangChain Expression Language (LCEL)
  11. LangChain 39 深入理解LangChain 表达式语言四 为什么要用LCEL LangChain Expression Language (LCEL)
  12. LangChain 40 实战Langchain访问OpenAI ChatGPT API Account deactivated的另类方法,访问跳板机API
  13. LangChain 41 深入理解LangChain 表达式语言五 为什么要用LCEL调用大模型LLM LangChain Expression Language (LCEL)
  14. LangChain 42 深入理解LangChain 表达式语言六 Runtime调用不同大模型LLM LangChain Expression Language (LCEL)
  15. LangChain 43 深入理解LangChain 表达式语言七 日志和Fallbacks异常备选方案 LangChain Expression Language (LCEL)
  16. LangChain 44 深入理解LangChain 表达式语言八 Runnable接口输入输出模式 LangChain Expression Language (LCEL)
  17. LangChain 45 深入理解LangChain 表达式语言九 Runnable 调用、流输出、批量调用、异步处理 LangChain Expression Language (LCEL)
  18. LangChain 46 深入理解LangChain 表达式语言十 Runnable 调用中间状态调试日志 LangChain Expression Language (LCEL)
  19. LangChain 47 深入理解LangChain 表达式语言十一 Runnable 并行处理 LangChain Expression Language (LCEL)
  20. LangChain 48 终极解决 实战Langchain访问OpenAI ChatGPT API Account deactivated的另类方法,访问跳板机API

在这里插入图片描述

1. 透传数据

通过RunnablePassthrough传递数据允许保持输入不变或添加额外的键。这通常与RunnableParallel一起使用,将数据分配给字典中的新键。

单独调用RunnablePassthrough()将简单地取输入并传递它。

通过assign调用的RunnablePassthrough(RunnablePassthrough.assign(...))将获取输入,并将额外传递给assign函数的参数添加进去。

请参阅下面的示例:

from langchain_core.runnables import RunnablePassthrough
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableParallel


from dotenv import load_dotenv
load_dotenv()
# from langchain.globals import set_debug
# set_debug(True)

runnable = RunnableParallel(
    passed=RunnablePassthrough(),
    extra=RunnablePassthrough.assign(mult=lambda x: x["num"] * 3),
    modified=lambda x: x["num"] + 1,
)

result = runnable.invoke({"num": 1})
print('result >> ', result)

运行输出

 $ python LCEL/runnable_pass_through.py
result >>  {'passed': {'num': 1}, 'extra': {'num': 1, 'mult': 3}, 'modified': 2}

在上面的代码中,我们使用了 RunnablePassthrough() 来调用传递的key,所以它简单地传递了 {'num': 1}

在第二行,我们使用了 RunnablePastshrough.assign 和一个乘以 3 的 lambda 表达式。在这种情况下,额外的键被设置为 {'num': 1, 'mult': 3},这是原始值加上了 mult 键。

最后,我们还在映射中设置了第三个键 modified,它使用一个 labmda 函数来将一个值加 1 到 num,这导致了 modified 键的值为 2。

代码

https://github.com/zgpeace/pets-name-langchain/tree/develop

参考

https://python.langchain.com/docs/expression_language/how_to/passthrough

langchain中,Runnable是一个接口,用于定义可以在单独线程中执行的任务。它是Java中多线程编程的基础之一。 要使用Runnable接口,你需要完成以下几个步骤: 1. 创建一个类并实现Runnable接口。这个类将包含你要在单独线程中执行的任务代码。你需要实现Runnable接口中的run()方法,该方法将在线程启动时被调用。 2. 在你的类中,可以添加其他成员变量和方法来支持你的任务。 3. 创建一个Thread对象,并将你实现了Runnable接口的类的实例作为参数传递给Thread的构造函数。 4. 调用Thread对象的start()方法,启动线程。这将导致run()方法被调用,并在单独线程中执行你的任务代码。 下面是一个简单的示例代码,展示了如何使用Runnable接口: ```java public class MyRunnable implements Runnable { public void run() { // 在这里编写你的任务代码 System.out.println("Hello, World!"); } } public class Main { public static void main(String[] args) { // 创建一个Runnable对象 MyRunnable myRunnable = new MyRunnable(); // 创建一个Thread对象,并将Runnable对象作为参数传递 Thread thread = new Thread(myRunnable); // 启动线程 thread.start(); } } ``` 以上代码中,我们创建了一个名为MyRunnable的类,它实现了Runnable接口,并在run()方法中打印了"Hello, World!"。然后,在主函数中,我们创建了一个Thread对象,并将MyRunnable的实例作为参数传递给Thread的构造函数。最后,我们调用Thread对象的start()方法,启动线程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值