LCEL和Runnable在Langchain 1.2.0中如何?

摘要:LangChain LCEL学习笔记 本来第三章应该学一下Tools和Agent的,后来发现这两个东西是核心,越学东西越多,于是就让G老师帮忙重新列了一下学习路线,按照G老师的路线,这一段应该学习LCEL相关的信息。回归正题,本文将带您深入
LangChain LCEL学习笔记 本来第三章应该学一下Tools和Agent的,后来发现这两个东西是核心,越学东西越多,于是就让G老师帮忙重新列了一下学习路线,按照G老师的路线,这一段应该学习LCEL相关的信息。回归正题,本文将带您深入探索 LCEL 与 Runnable 接口的奥秘。 1. 引言:从“链”说起 1.1 为什么要了解 LCEL? 在 LangChain 的世界里,有一个词贯穿始终——Chain(链)。 想象一下:用户输入一段文字,你需要先做情感分析,再根据情感结果选择不同的回复策略,最后将结果格式化输出。如果不用 LCEL,你可能需要写一堆嵌套函数、回调逻辑,代码像意大利面条一样纠缠不清。 但有了 LCEL,一切变得清晰优雅: chain = ( sentiment_prompt # 第一步:情感分析 | llm # 第二步:LLM 处理 | output_parser # 第三步:格式化输出 ) 这就是 LCEL 的魅力所在——用管道操作符声明式地组合数据流,让复杂的 AI 工作流变得像搭积木一样简单。 1.2 LCEL 的核心优势 LCEL(LangChain Expression Language)不仅仅是一个语法糖,它为 LangChain 带来了质的飞跃: 优势 说明 声明式 用管道操作符清晰表达数据流,阅读代码如读业务流程 组合性 轻松组合提示词、模型、输出解析器构建复杂链 流式支持 原生支持流式输出,用户体验更佳 并行执行 支持批量和并行处理,性能与效率兼得 错误处理 内置错误处理机制,链更健壮 追踪支持 与 LangSmith 无缝集成,调试不再抓狂 2. LCEL 基础:一切的开始 2.1 核心概念:Runnable 接口 LCEL 的核心是 Runnable 接口。你可以把它想象成 LangChain 世界的“统一身份证”——无论是提示词模板、LLM 模型,还是输出解析器,都实现了这个接口。 这意味着它们都有共同的方法: # 基本调用 chain.invoke(input) # 同步调用 chain.batch(inputs) # 批量调用 chain.stream(input) # 流式调用 # 异步调用 await chain.ainvoke(input) # 异步调用 await chain.abatch(inputs) # 异步批量调用 async for chunk in chain.astream(input): # 异步流式调用 这就是 Runnable 的核心方法三剑客:invoke、batch、stream。无论你组合什么样的链,都用这几种方式调用。 2.2 第一个 LCEL 链 让我们用一个完整的例子来感受 LCEL 的魅力: from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI # 初始化模型 base_url = "https://api.minimax.chat/v1" api_key = "your-api-key" model = ChatOpenAI( model="MiniMax-M2.7", base_url=base_url, api_key=api_key, ) # 构建链 prompt = ChatPromptTemplate.from_template("用{language}翻译:{text}") output_parser = StrOutputParser() chain = prompt | model | output_parser # 调用链 result = chain.invoke({ "language": "中文", "text": "Hello, World!" }) print(result) # 你好,世界! 这就是一个完整的 LCEL 链。数据像水流一样经过三个处理单元:prompt → model → output_parser。
阅读全文