【AI大模型应用开发】【LangChain系列】8. 重要组件介绍:如何运用LangChain表达式语言LCEL中的RunnableParallel和RunnablePassthrough?

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 【AI大模型应用开发】【LangChain系列】8. 重要组件介绍:如何运用LangChain表达式语言LCEL中的RunnableParallel和RunnablePassthrough?
  • 大家好,我是同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:


经过几次的LangChain实战,发现其中最常用的两个封装类RunnableParallelRunnablePassthrough。这是LangChain独有的表达式语言(LCEL)中最主要的组件。本文我们来深入学习下这两个组件的原理与使用。

0. 前置推荐阅读

LangChain实战系列:

LangChain表达式语言(LCEL)介绍:

1. RunnableParallel

1.1 基础使用

官方概念如下:

RunnableParallel can be useful for manipulating the output of one Runnable to match the input format of the next Runnable in a sequence.

RunnableParallel 可用于操作一个Runnable的输出,以匹配序列中下一个Runnble的输入格式。

从下面这段示例代码来理解下官方的解释:

from langchain_community.vectorstores import FAISS
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
vectorstore = FAISS.from_texts(
    ["harrison worked at kensho"], embedding=OpenAIEmbeddings()
)
retriever = vectorstore.as_retriever()
template = """Answer the question based only on the following context:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI()
retrieval_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | model
    | StrOutputParser()
)
retrieval_chain.invoke("where did harrison work?")

代码中每个 "|" 前后的元素都可看作是一个Runnable

其中的 {"context": retriever, "question": RunnablePassthrough()} 就是RunnableParallel,它的作用就是将输入组成 contextquestion 为key的字典格式,传递给 prompt

RunnableParallel 的使用可以有以下三种形式,三种形式等价:

{"context": retriever, "question": RunnablePassthrough()}
RunnableParallel({"context": retriever, "question": RunnablePassthrough()})
RunnableParallel(context=retriever, question=RunnablePassthrough())

1.2 并行执行多个Chain

RunnableParallel 可以让我们能够同时执行多个Chain,然后以字典形式返回各个Chain的结果。

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel
from langchain_openai import ChatOpenAI
model = ChatOpenAI()
joke_chain = ChatPromptTemplate.from_template("tell me a joke about {topic}") | model
poem_chain = (
    ChatPromptTemplate.from_template("write a 2-line poem about {topic}") | model
)
map_chain = RunnableParallel(joke=joke_chain, poem=poem_chain)
map_chain.invoke({"topic": "bear"})

以上示例代码中,定义了两个Chain:joke_chainpoem_chain,通过 RunnableParallel 同时执行。

注意 RunnableParallel(joke=joke_chain, poem=poem_chain) 中的key值为 jokepoem,返回的结果中会以这两个值作为每个Chain的key值组织结果。返回结果如下:

{'joke': AIMessage(content="Why don't bears wear shoes?\n\nBecause they have bear feet!"),
 'poem': AIMessage(content="In the wild's embrace, bear roams free,\nStrength and grace, a majestic decree.")}

2. RunnablePassthrough

官方解释:

RunnablePassthrough allows to pass inputs unchanged or with the addition of extra keys. This typically is used in conjuction with RunnableParallel to assign data to a new key in the map.

RunnablePassthrough 允许在不改变或添加额外键的情况下传递输入。这通常与RunnableParallel结合使用,将数据分配给映射中的新键。

还是以一个实例代码和输出来看下它怎么用。

from langchain_core.runnables import RunnableParallel, RunnablePassthrough
runnable = RunnableParallel(
    passed=RunnablePassthrough(),
    extra=RunnablePassthrough.assign(mult=lambda x: x["num"] * 3),
    modified=lambda x: x["num"] + 1,
)
runnable.invoke({"num": 1})

以上代码并行执行了三行代码,其输出结果为:

{'passed': {'num': 1}, 'extra': {'num': 1, 'mult': 3}, 'modified': 2}

(1)第一行代码:passed=RunnablePassthrough(),直接透传输入:'passed': {'num': 1}

(2)第二行代码:extra=RunnablePassthrough.assign(mult=lambda x: x["num"] * 3),除了透传原数据,还加了 mult 的值,通过 assign 函数将两个结果组装输出:'extra': {'num': 1, 'mult': 3}

(3)第三行代码:modified=lambda x: x["num"] + 1,在原值基础上执行+1操作,没使用 assign 函数,因此原数据不组合输出:'modified': 2

3. 参考链接

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

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

如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~


  • 大家好,我是 同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
25天前
|
人工智能 测试技术 API
AI计算机视觉笔记二十 九:yolov10竹签模型,自动数竹签
本文介绍了如何在AutoDL平台上搭建YOLOv10环境并进行竹签检测与计数。首先从官网下载YOLOv10源码并创建虚拟环境,安装依赖库。接着通过官方模型测试环境是否正常工作。然后下载自定义数据集并配置`mycoco128.yaml`文件,使用`yolo detect train`命令或Python代码进行训练。最后,通过命令行或API调用测试训练结果,并展示竹签计数功能。如需转载,请注明原文出处。
|
18天前
|
机器学习/深度学习 人工智能 UED
OpenAI o1模型:AI通用复杂推理的新篇章
OpenAI发布了其最新的AI模型——o1,这款模型以其独特的复杂推理能力和全新的训练方式,引起了业界的广泛关注。今天,我们就来深入剖析o1模型的特点、背后的原理,以及一些有趣的八卦信息。
210 73
|
8天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
13天前
|
存储 人工智能 算法
阿里云AI基础设施升级亮相,模型算力利用率提升超20%
阿里云AI基础设施升级亮相,模型算力利用率提升超20%
105 18
|
7天前
|
人工智能 自然语言处理 API
深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
我们小时候都玩过乐高积木。通过堆砌各种颜色和形状的积木,我们可以构建出城堡、飞机、甚至整个城市。现在,想象一下如果有一个数字世界的乐高,我们可以用这样的“积木”来构建智能程序,这些程序能够阅读、理解和撰写文本,甚至与我们对话。这就是大型语言模型(LLM)能够做到的,比如 GPT-4,它就像是一套庞大的乐高积木套装,等待我们来发掘和搭建。
|
20天前
|
人工智能 自动驾驶 云计算
【通义】AI视界|谷歌大模型被盯上!欧盟最高隐私监管机构对PaLM2模型展开调查~
本文汇总了近24小时内科技领域的五大要闻:欧盟对谷歌PaLM2模型启动隐私合规调查;甲骨文推出Zettascale云计算集群,集成大量NVIDIA GPU强化计算力;红杉资本偏好AI应用投资而非模型构建;夸克新推智能助手CueMe,支持长达2万字内容生成;沃尔沃与NVIDIA合作,未来车型将采用后者先进芯片提升自动驾驶功能。以上内容由通义自动生成。
|
22天前
|
机器学习/深度学习 人工智能 供应链
【通义】AI视界|OpenAI的“草莓”模型预计两周内上线!像人类一样思考!
本文介绍了近期科技领域的五大亮点:OpenAI即将推出的新一代AI模型“草莓”,具备高级推理能力;亚马逊测试AI技术加速有声读物生产,通过语音克隆提高效率;Kimi API新增联网搜索功能,拓宽信息来源;顺丰发布物流行业专用大语言模型“丰语”,提升工作效率;钉钉推出“AI班级群”功能,改善家校沟通体验。更多详情,请访问[通义官网]。
|
26天前
|
人工智能 自然语言处理 数据挖掘
【通义】AI视界|性能超越GPT-4o?最强大的开源AI模型来了……
本文介绍了五项最新AI技术动态,包括性能超越GPT-4o的开源AI模型Reflection70B、智谱清言App限时免费的视频通话功能、哈佛医学院研发的癌症诊断AI模型CHIEF、Replit推出的AI编程助手,以及英特尔与日本AIST合作设立的芯片制造研发中心。这些进展展示了AI领域的快速创新与广泛应用。更多详情,请访问通义官网体验。
|
25天前
|
人工智能 测试技术 PyTorch
AI计算机视觉笔记二十四:YOLOP 训练+测试+模型评估
本文介绍了通过正点原子的ATK-3568了解并实现YOLOP(You Only Look Once for Panoptic Driving Perception)的过程,包括训练、测试、转换为ONNX格式及在ONNX Runtime上的部署。YOLOP由华中科技大学团队于2021年发布,可在Jetson TX2上达到23FPS,实现了目标检测、可行驶区域分割和车道线检测的多任务学习。文章详细记录了环境搭建、训练数据准备、模型转换和测试等步骤,并解决了ONNX转换过程中的问题。
|
6天前
|
人工智能 自然语言处理 Linux
Llama 3.2:开源可定制视觉模型,引领边缘AI革命
Llama 3.2 系列 11B 和 90B 视觉LLM,支持图像理解,例如文档级理解(包括图表和图形)、图像字幕以及视觉基础任务(例如基于自然语言描述在图像中精确定位对象)。
下一篇
无影云桌面