LangChain开发实战 - 第2章: LangChain 表达式语言 (LCEL)

52 阅读2分钟

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI

LangChain 表达式语言 (LCEL) 是 LangChain 的核心,它提供了一种声明式的方式来组合和编排组件,构建从简单到复杂的链 (Chains)。LCEL 的设计哲学是让构建过程透明、可定制且高效。

LCEL 的所有核心组件都实现了一个统一的 Runnable 接口,这使得它们可以轻松地通过管道符 | (pipe) 连接在一起。

image.png

为什么使用 LCEL?

  1. 统一的接口: 所有 LCEL 对象都实现了相同的 Runnable 接口,包含 invokestreambatchainvokeastreamabatch 等方法。这为调用、流式传输、批处理和异步操作提供了统一的标准。
  2. 开箱即用的流式传输 (Streaming) : 当你用 LCEL 构建一个链时,你可以立即获得流式传输的能力。当你调用 .stream() 时,最终的答案会以 token by token 的形式流式返回,极大地提升了用户体验。
  3. 并列执行 (Parallelism) : LCEL 可以智能地将链的某些部分并行执行。例如,如果你有多个并行的检索器,LCEL 会同时调用它们,以提高效率。
  4. 可组合性: 通过管道符 |,你可以像拼接 Linux 命令一样,将不同的组件(提示、模型、输出解析器、检索器等)轻松地组合在一起。
  5. 可观测性与调试: LCEL 链的每一步都可以被观察和调试。结合 LangSmith,你可以清晰地看到每一步的输入和输出,方便你快速定位问题。

核心语法:管道符 |

LCEL 的核心是管道符 |。它的作用是将一个 Runnable 的输出作为下一个 Runnable 的输入。

一个最基础的链通常由三部分组成:

  1. PromptTemplate: 接收用户输入,并将其格式化为一个提示。
  2. LLM 或 ChatModel: 接收提示,并调用模型生成结果。
  3. OutputParser: 接收模型输出,并将其转换为更友好的格式(例如,从字符串转换为 JSON)。

下面是一个简单的例子:

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser

# 1. 定义提示模板
prompt = ChatPromptTemplate.from_template("给我讲一个关于 {topic} 的笑话")

# 2. 定义模型
model = ChatOpenAI(model="deepseek-v3")

# 3. 定义输出解析器
output_parser = StrOutputParser()

# 4. 使用管道符 | 组合成链
chain = prompt | model | output_parser

# 5. 调用链
result = chain.invoke({"topic""程序员"})
print(result)

在本章的示例代码中,我们将更深入地探讨 LCEL 的各种用法,包括 RunnablePassthrough 和 RunnableParallel 等高级特性。

学习资源推荐

如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI