学习 LangChain 的 LCEL

学习 LangChain 的 LCEL

  • [0. 引言](#0. 引言)
  • [1. 基本示例:提示+模型+输出解析器​](#1. 基本示例:提示+模型+输出解析器)
    • [1-1. Prompt​](#1-1. Prompt)
    • [1-2. Model](#1-2. Model)
    • [1-3. Output parser](#1-3. Output parser)
    • [1-4. Entire Pipeline](#1-4. Entire Pipeline)

0. 引言

LCEL(LangChain Expression Language) 可以轻松地从基本组件构建复杂的链,并支持开箱即用的功能,例如流式传输、并行性和日志记录。

1. 基本示例:提示+模型+输出解析器​

最基本和常见的用例是将提示模板和模型链接在一起。为了看看这是如何工作的,让我们创建一个接受主题并生成笑话的链:

复制代码
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")
model = ChatOpenAI(model="gpt-4")
output_parser = StrOutputParser()

chain = prompt | model | output_parser

chain.invoke({"topic": "ice cream"})

请注意这行代码,我们使用 LCEL 将不同的组件拼凑成一个链:

复制代码
chain = prompt | model | output_parser

| 符号类似于 unix 管道运算符,它将不同的组件链接在一起,将一个组件的输出作为下一个组件的输入。

在此链中,用户输入传递到提示模板,然后提示模板输出传递到模型,然后模型输出传递到输出解析器。让我们分别看一下每个组件,以真正了解发生了什么。

1-1. Prompt​

prompt 是一个 BasePromptTemplate ,这意味着它接受模板变量的字典并生成一个 PromptValuePromptValue 是一个完整提示的包装器,可以传递给 LLM (它接受一个字符串作为输入)或 ChatModel (它接受一个序列作为输入的消息)。它可以与任何一种语言模型类型一起使用,因为它定义了生成 BaseMessage 和生成字符串的逻辑。

复制代码
prompt_value = prompt.invoke({"topic": "ice cream"})
prompt_value

prompt_value.to_messages()

prompt_value.to_string()

1-2. Model

然后 PromptValue 被传递给 model 。在本例中,我们的 modelChatModel ,这意味着它将输出 BaseMessage

复制代码
message = model.invoke(prompt_value)
message

如果我们的 modelLLM ,它将输出一个字符串。

复制代码
from langchain_openai.llms import OpenAI

llm = OpenAI(model="gpt-3.5-turbo-instruct")
llm.invoke(prompt_value)

1-3. Output parser

最后,我们将 model 输出传递给 output_parser ,这是一个 BaseOutputParser ,意味着它接受字符串或 BaseMessage 作为输入。 StrOutputParser 特别简单地将任何输入转换为字符串。

复制代码
output_parser.invoke(message)

1-4. Entire Pipeline

请按照以下步骤操作:

  1. 我们将所需主题的用户输入传递为 {"topic": "ice cream"}

  2. prompt 组件获取用户输入,然后在使用 topic 构造提示后,将其用于构造 PromptValue

  3. model 组件获取生成的提示,并传递到 OpenAI LLM 模型进行评估。模型生成的输出是一个 ChatMessage 对象。

  4. 最后, output_parser 组件接收 ChatMessage ,并将其转换为 Python 字符串,该字符串从 invoke 方法返回。

请注意,如果您对任何组件的输出感到好奇,您始终可以测试链的较小版本,例如 promptprompt | model 以查看中间结果:

复制代码
input = {"topic": "ice cream"}

prompt.invoke(input)
# > ChatPromptValue(messages=[HumanMessage(content='tell me a short joke about ice cream')])

(prompt | model).invoke(input)
# > AIMessage(content="Why did the ice cream go to therapy?\nBecause it had too many toppings and couldn't cone-trol itself!")

refer: https://python.langchain.com/docs/expression_language/get_started

相关推荐
南境十里·墨染春水14 分钟前
linux学习进展 进程的内存管理
linux·服务器·学习
小陈phd20 分钟前
多模态大模型学习笔记(三十四)——ChatTTS:新一代中文语音合成工具原理与实战解析
笔记·学习·语音识别
Csvn36 分钟前
🌟 LangChain 30 天保姆级教程 · Day 16|文档加载器大合集!PDF、Word、网页、数据库一键读取,构建你的知识库!
python·langchain
zhangrelay38 分钟前
面向机器人工程的 Linux 发行版:科学选型与深度评测-2026
笔记·学习
网络工程小王1 小时前
【Function Calling详解】(学习笔记)
笔记·学习
新手小新1 小时前
通信工程师学习笔记3-电信网间互联管理规定和网络安全法
网络·笔记·学习
前进的李工1 小时前
智能Agent实战指南:从入门到精通(工具)
开发语言·人工智能·架构·langchain·agent·tool·agentexecutor
chaors1 小时前
LangGraph 入门到精通0x00:HelloLangGraph
langchain·llm·agent
red_redemption1 小时前
自由学习记录(163)
学习
南無忘码至尊1 小时前
Unity学习90天-第2天-认识键盘 / 鼠标输入(PC)并实现WASD 移动,鼠标控制物体转向
学习·unity·c#·游戏开发