note06-LCEL

126 阅读2分钟

LCEL简介

LCEL(Langchain Expression Language)是Langchain提供的一种专门的表达式,它可以用简洁和灵活的串联语法,使代码更为简洁。

chain = prompt | llm
result = chain.invoke({'season': '春天', 'type': '绝句'})
print(result)

虽然,LCEL语法看上去更简洁了,但是跟 Python 常规语法结构差异较大,学习成本较高,在项目中可以考虑酌情使用。

LCEL的主要特点

LCEL的主要特点包括:

  • 流式支持:LCEL提供一流的流式支持,确保在构建链条时获得最佳的首个令牌时间,即输出的第一块内容出现之前的经过时间。

    blog.csdn.net

  • 异步支持:使用LCEL构建的链条可以通过同步和异步API调用,这使得在原型设计和生产环境中使用相同的代码成为可能,具有出色的性能,并能够在同一服务器上处理多个并发请求。

    blog.csdn.net

  • 优化的并行执行:LCEL自动优化并行执行链条中的步骤,例如从多个检索器获取文档,以尽可能减少延迟。

    blog.csdn.net

  • 重试和回退机制:LCEL允许为链条的任何部分配置重试和回退机制,提高链条在大规模生产环境中的可靠性。

    blog.csdn.net

  • 访问中间结果:对于更复杂的链条,LCEL支持在最终输出生成之前访问中间步骤的结果,这对于调试和提高用户可见性非常有用。

    blog.csdn.net

  • 输入和输出模式:LCEL为每个链条提供了从其结构中推断出的Pydantic和JSONSchema模式,可用于输入和输出的验证,是LangServe不可或缺的一部分。

    blog.csdn.net

  • 无缝集成:LCEL与LangSmith和LangServe无缝集成,所有步骤都会自动记录到LangSmith,以实现最大的可观察性和可调试性。

    blog.csdn.net

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

以下是一个使用LCEL将提示模板、模型和输出解析器链接在一起的示例代码:

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

# 提示
prompt = ChatPromptTemplate.from_template("请讲一个关于{topic}的笑话")
# 模型(大语言模型)
model = ChatOpenAI(model="gpt-4")
# 输出解析器
output_parser = StrOutputParser()
# 组合成链
chain = prompt | model | output_parser
# 运行
response = chain.invoke({"topic": "冰激凌"})
# 打印结果
print(response)

在上述代码中,promptmodeloutput_parser通过LCEL的管道符号(|)组合成一个链,类似于Unix的管道操作符。这种方式使得将不同的组件集成到单个链中变得直观且简洁。

blog.csdn.net

LCEL的设计初衷是简化复杂链条的构建过程,并提供开箱即用的功能,如流式处理、并行执行和日志记录,使开发者能够更高效地开发和部署大语言模型应用。