LangChain 之 【Runnable与LCEL】
目录1.简单代码展示2. Runnable 接口2.1 什么是 Runnable2.2 为什么需要 Runnable2.3 代码印证3. LCELLangChain 表达式语言3.1 什么是 LCEL3.2 什么是 RunnableSequence4. 深入管道符三种等价的“组合”方式5. 数据流转的底层逻辑1.简单代码展示1.1申请 API key与配置环境变量这里是远程调用大模型 API所以需要在对应大模型官网上申请 api_key同时为了后续便捷调用可以将 api_key 与 base_url 设置进环境变量中1.2.安装 OpenAI 包与定义⼤模型命令行输入pip install -U langchain-openai安装 LangChain 官方提供的 OpenAI 集成包# 定义⼤模型 from langchain_openai import ChatOpenAI model ChatOpenAI(modeldeepseek-v4-flash)通过修改配置(上述两个环境变量等)DeepSeek API 可以使用与 OpenAI 兼容的 API 格式1.3.定义消息列表# 定义消息列表 from langchain_core.messages import HumanMessage, SystemMessage messages [ SystemMessage(content请翻译成中文), HumanMessage(contentHello world), ]消息列表参数说明SystemMessage表示系统角色消息。系统消息通常作为输入消息序列中的第一条传入是用来启动 AI 行为的消息HumanMessage表示用户角色消息。是来自用户的、从用户传递到模型的消息1.4.调⽤⼤模型model 是 LangChain Runnable 可运⾏接⼝的实例这意味着 model 提供了⼀个标准接⼝供我们与之交互。要简单地调⽤模型我们可以将 消息列表 传递给 .invoke ⽅法。使⽤ .invoke ⽅法进⾏⼤模型调⽤核⼼代码response model.invoke(messages) print(response)输出结果调试可以看⻅ response 类型为 AIMessageAIMessage(content你好世界, additional_kwargs{refusal: None}, response_metadata{token_usage: {completion_tokens: 54, prompt_tokens: 10, total_tokens: 64, completion_tokens_details: {accepted_prediction_tokens: None, audio_tokens: None, reasoning_tokens: 50, rejected_prediction_tokens: None}, prompt_tokens_details: {audio_tokens: None, cached_tokens: 0}, prompt_cache_hit_tokens: 0, prompt_cache_miss_tokens: 10}, model_name: deepseek-v4-flash, system_fingerprint: fp_8b330d02d0_prod0820_fp8_kvcache_20260402, id: 91d952ef-75ff-4975-acc0-2def7d7a5d11, service_tier: None, finish_reason: stop, logprobs: None}, idrun--019f2f8b-04ef-7a01-9794-0406ca490dd6-0, usage_metadata{input_tokens: 10, output_tokens: 54, total_tokens: 64, input_token_details: {cache_read: 0}, output_token_details: {reasoning: 50}})输出说明AIMessage来自 AI 的消息。从聊天模型返回作为对提示输入的响应。content消息的内容。additional_kwargs与消息关联的其他有效负载数据。对于来自 AI 的消息可能包括模型提供程序编码的工具调用。response_metadata响应元数据。例如响应标头、logprobs、令牌计数、模型名称。侧重于响应本身的信息比如这次请求的 ID、使用的模型版本、以及服务提供商返回的所有原始元数据。它主要用于调试、日志记录和获取请求的上下文信息。usage_metadata消息的使用元数据例如令牌计数。侧重于资源消耗的量化信息即这次请求消耗了多少 Token。它主要用于成本计算、监控和预算控制。1.5.输出解析若只想输出聊天模型返回的结果字符串可以使⽤StrOutputParser输出解析器组件将⼤模型输出结果解析为最可能的字符串。核⼼代码# 定义str字符串输出解析器 from langchain_core.output_parsers import StrOutputParser parser StrOutputParser() print(parser.invoke(result))1.6.链式执行# 定义链 chain model | parser # 执⾏链 response chain.invoke(messages) print(response)2. Runnable 接口2.1 什么是 Runnable官方定义它为使用 LangChain 组件的基础你可以把它想象成我们生活中的USB-C 接口。无论是大模型、解析器、检索器还是复杂的 Agent只要实现了 Runnable 接口它们就拥有了统一的“插拔”标准2.2 为什么需要 Runnable在没有统一标准前调用模型用model.chat()调用解析器用parser.parse()调用检索器用retriever.get()……方法名五花八门Runnable 接口强制规定了一套标准化的方法论。任何一个实现了 Runnable 的组件都天然具备以下四种核心能力能力对应方法作用解释Invoked调用.invoke()最常用。输入一个东西立刻得到一个输出同步执行。Batched批处理.batch()高效处理一批输入比用for循环快得多支持并行。Streamed流式传输.stream()实现 AI 打字机效果数据边生成边输出提升用户体验。Composed组合配合|使用这是 LCEL 的基础允许将自身与另一个 Runnable 串联。2.3 代码印证from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser # ChatOpenAI 是 Runnable 接口的实例 model ChatOpenAI(modelgpt-4o-mini) result model.invoke(messages) # 调用 .invoke() # StrOutputParser 也是 Runnable 接口的实例 parser StrOutputParser() parser.invoke(result) # 同样调用 .invoke()3. LCELLangChain 表达式语言如果说 Runnable 是“积木”那么LCEL 就是把这些积木拼在一起的“说明书”和“胶水”3.1 什么是 LCELLCEL 采用声明式的方法从现有的 Runnable 对象构建出新的 Runnable 对象。它不改变组件内部的逻辑只负责定义数据流动的方向它的核心语法极其简单使用|管道运算符3.2 什么是 RunnableSequence# model 和 parser 都是 Runnable chain model | parser # 检查 chain 的类型class langchain_core.runnables.base.RunnableSequence print(type(chain)) # 因为 RunnableSequence 也是 Runnable所以它也有 .invoke() result chain.invoke(messages)当我们通过 LCEL 将两个或更多的 Runnable 串联起来时LangChain 会在底层生成一个新的对象 ——RunnableSequence可运行序列。关键点来了RunnableSequence本身也完整地实现了 Runnable 接口这是一个典型的“组合模式”应用。这意味着你拼出来的这条“链”Chain和你之前用的单个model拥有完全一样的调用姿势也有.invoke()、.batch()等方法。你可以把拼好的链再当作一个零件去拼进更大的链里实现无限嵌套4. 深入管道符三种等价的“组合”方式三种将组件串联的方法在逻辑上完全等价只是编码风格不同序号写法方式代码示例适用场景1管道符最常用chain model | parser日常开发首选Python 重载了|运算符简洁直观。2显式实例化chain RunnableSequence(firstmodel, lastparser)底层实现原理通常用于框架内部或需要动态构建链时。3.pipe() 方法chain model.pipe(parser)函数式编程风格与管道符完全同义在某些 IDE 中自动补全更友好。5. 数据流转的底层逻辑chain model | parser当你在 LCEL 中执行 chain.invoke(messages) 时输入messages消息列表传入 chain。第一步LCEL 将 messages 传给 model大模型执行 model.invoke(messages)。中间产出model 返回一个 AIMessage 对象包含内容、元数据、Token 用量等。第二步LCEL 自动将上一步的产出AIMessage作为参数传给 parser执行 parser.invoke(AIMessage)。最终输出parser 提取出 AIMessage 中的 content 字段返回纯字符串 你好。核心公式上一个 Runnable 的输出类型 下一个 Runnable 的输入类型

相关新闻

3个核心功能解析:Scarab如何成为空洞骑士模组管理的终极解决方案

3个核心功能解析:Scarab如何成为空洞骑士模组管理的终极解决方案

3个核心功能解析:Scarab如何成为空洞骑士模组管理的终极解决方案 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab Scarab是一个基于Avalonia框架开发的跨平台空洞…

2026/7/6 8:44:46阅读更多 →
GearOS系统优化技巧:10个提升工业控制可靠性的配置方法

GearOS系统优化技巧:10个提升工业控制可靠性的配置方法

GearOS系统优化技巧:10个提升工业控制可靠性的配置方法 【免费下载链接】GearOS GearOS is a real-time enhanced operating system for the industrial control field incubated by the openEuler open-source community Industrial-Control SIG. 项目地址: http…

2026/7/6 8:39:46阅读更多 →
重庆同传Gino小翻译觉得译员应深耕会议传译场景,依托海量多语种语料库和细分行业术语库,搭载先进的语音识别与神经机器翻译技术,可实时适配各类会议场景,精准捕捉发言人语音信息,完成降噪、去杂、语义梳理,

重庆同传Gino小翻译觉得译员应深耕会议传译场景,依托海量多语种语料库和细分行业术语库,搭载先进的语音识别与神经机器翻译技术,可实时适配各类会议场景,精准捕捉发言人语音信息,完成降噪、去杂、语义梳理,

重庆同传Gino小翻译觉得译员应深耕会议传译场景,依托海量多语种语料库和细分行业术语库,搭载先进的语音识别与神经机器翻译技术,可实时适配各类会议场景,精准捕捉发言人语音信息,完成降噪、去杂、语义梳理,…

2026/7/6 8:39:46阅读更多 →
Python接口自动化测试框架搭建:从设计到CI集成的工程实践

Python接口自动化测试框架搭建:从设计到CI集成的工程实践

1. 项目概述:为什么我们需要一个自己的自动化测试框架?在软件研发的日常里,测试环节常常是那个“按下葫芦浮起瓢”的尴尬存在。尤其是接口测试,随着微服务架构的普及,一个业务功能可能横跨十几个甚至几十个服务接口。如…

2026/7/6 9:49:56阅读更多 →
测试开发新范式:大模型工具调用实现意图驱动自动化测试

测试开发新范式:大模型工具调用实现意图驱动自动化测试

1. 项目概述:当测试开发遇上大模型工具调用最近和几个做测试开发的朋友聊天,发现一个挺有意思的现象:大家或多或少都在尝试用大模型来辅助工作,但真正能把大模型“用起来”,让它去调用外部工具、执行自动化任务的&…

2026/7/6 9:49:56阅读更多 →
LIIF 与 MetaSR 对比评测:3大指标剖析任意尺度超分方案优劣

LIIF 与 MetaSR 对比评测:3大指标剖析任意尺度超分方案优劣

LIIF 与 MetaSR 深度对比:技术架构、性能表现与实战选型指南1. 任意尺度超分技术的演进与挑战在数字图像处理领域,超分辨率重建技术始终面临一个核心矛盾:如何平衡离散像素表示与连续视觉世界之间的关系。传统超分方法通常针对固定放大倍数&a…

2026/7/6 9:49:56阅读更多 →
Python+Selenium UI自动化测试框架搭建:从PO模式到Pytest实战

Python+Selenium UI自动化测试框架搭建:从PO模式到Pytest实战

1. 项目概述与核心价值 最近在团队里做技术复盘,发现很多测试同学在尝试UI自动化时,总是一上来就埋头写脚本,结果代码越写越乱,维护成本高到离谱,最后项目不了了之。这让我想起几年前自己踩过的那些坑,所以…

2026/7/6 9:49:56阅读更多 →
Halcon 3D点云与深度图互转:线激光数据处理的5个核心算子详解

Halcon 3D点云与深度图互转:线激光数据处理的5个核心算子详解

Halcon 3D点云与深度图互转:线激光数据处理的5个核心算子详解在工业3D视觉检测领域,线激光测量技术凭借其高精度、高效率的特点,已成为表面轮廓检测的主流方案。作为机器视觉领域的标杆软件,Halcon提供了一套完整的3D视觉处理工具…

2026/7/6 9:49:56阅读更多 →
Web安全实战:SQL注入、XSS、CSRF、SSRF漏洞攻防与防御实践

Web安全实战:SQL注入、XSS、CSRF、SSRF漏洞攻防与防御实践

1. 项目概述:从“知道”到“防住”的实战之路干了这么多年安全,我越来越觉得,Web安全这东西,光看理论、背概念,真到事儿上一点用没有。你背得再熟,知道SQL注入是“通过构造特殊SQL语句来操作数据库”&#…

2026/7/6 9:44:55阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →