LangChain 语言 —— LCEL


一、概述

 LangChain表达式语言是一种创建任意自定义链的方法。它建立在 Runnable 协议之上。


二、快速开始

 这是所有最重要的LCEL图元的快速参考。

1、invoke 一个 runable

from langchain_core.runnables import RunnableLambda

runnable = RunnableLambda(lambda x: str(x))
runnable.invoke(5)

2、batch 一个 runable

from langchain_core.runnables import RunnableLambda

runnable = RunnableLambda(lambda x: str(x))
runnable.batch([7, 8, 9])

3、stream 一个 runable

from langchain_core.runnables import RunnableLambda

def func(x):
    for y in x:
        yield str(y)

runnable = RunnableLambda(func)

for chunk in runnable.stream(range(5)):
    print(chunk)

# Async variant:
# async for chunk in await runnable.astream(range(5)):
#     print(chunk)

4、将runables组合起来

 langchain 提供一种 Pipe 操作符:|,该操作符 | 的作用是将其前面的 runable 的输出传给后面的 runable 的输入中。

from langchain_core.runnables import RunnableLambda

runnable1 = RunnableLambda(lambda x: {"foo": x})
runnable2 = RunnableLambda(lambda x: [x] * 2)

chain = runnable1 | runnable2

chain.invoke(2)

5、并行调用可运行文件

from langchain_core.runnables import RunnableLambda, RunnableParallel

runnable1 = RunnableLambda(lambda x: {"foo": x})
runnable2 = RunnableLambda(lambda x: [x] * 2)

chain = RunnableParallel(first=runnable1, second=runnable2)

chain.invoke(2)

# 输出为:{'first': {'foo': 2}, 'second': [2, 2]}

6、将任何function转换为可runable

from langchain_core.runnables import RunnableLambda

def func(x):
    return x + 5

runnable = RunnableLambda(func)
runnable.invoke(2)

7、合并输入和输出字典

from langchain_core.runnables import RunnableLambda, RunnablePassthrough

runnable1 = RunnableLambda(lambda x: x["foo"] + 7)

chain = RunnablePassthrough.assign(bar=runnable1)

chain.invoke({"foo": 10})
# {'foo': 10, 'bar': 17}

 这段代码的含义是:

  1. 第三行,创建了一个 RunnableLambda 实例,RunnableLambda 是一个可运行的对象,其核心功能是应用一个函数。这里定义的函数是一个 Lambda 函数,接收一个输入 x,并返回 x[“foo”] 的值加 7。
  2. 第五行,使用 RunnablePassthrough 类的 assign 方法创建了一个新的处理链。RunnablePassthrough 是一个简单的可运行对象,它将输入直接传递给下一个可运行对象。assign 方法将 runnable1 分配给一个新的键 bar,即它会将 runnable1 的输出赋值给 bar。
  3. 这一行代码调用 chain 处理链,输入参数是一个字典 {“foo”: 10}。处理链执行的步骤如下:
    • 首先,RunnablePassthrough 直接传递输入到下一个步骤。
    • 接着,runnable1 被调用,runnable1 计算 x[“foo”] + 7,其中 x[“foo”] 为 10,所以结果是 17。
    • 最后,结果被赋值给新的键 bar,形成输出 {“foo”: 10, “bar”: 17}。

8、将输入字典包含在输出字典中

from langchain_core.runnables import (
    RunnableLambda,
    RunnableParallel,
    RunnablePassthrough,
)

runnable1 = RunnableLambda(lambda x: x["foo"] + 7)

chain = RunnableParallel(bar=runnable1, baz=RunnablePassthrough())

chain.invoke({"foo": 10})
# {'bar': 17, 'baz': {'foo': 10}}

9、添加默认调用参数

from typing import Optional
from langchain_core.runnables import RunnableLambda

def func(main_arg: dict, other_arg: Optional[str] = None) -> dict:
    if other_arg:
        return {**main_arg, **{"foo": other_arg}}
    return main_arg
    
runnable1 = RunnableLambda(func)
bound_runnable1 = runnable1.bind(other_arg="bye")

bound_runnable1.invoke({"bar": "hello"})
#{'bar': 'hello', 'foo': 'bye'}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值