目录
LangChain 表达式语言概述
- LangChain 表达式语言(LCEL) 是一种声明式的方法,用于轻松组合链条。LCEL 从第一天开始就设计为支持将原型直接投入生产环境,无需代码更改,从最简单的“提示 + LLM”链条到最复杂的链条(我们已经看到有人在生产环境中成功运行了包含数百个步骤的LCEL链条)。
使用LCEL的理由
- 流式支持:使用LCEL构建链条时,可以获得最佳的首个令牌到达时间(即第一块输出出现的时间)。对于某些链条,这意味着例如我们可以直接从LLM流式传输令牌到流式输出解析器,并以与LLM提供者输出原始令牌相同的速率获取解析后的增量输出块。
- 异步支持:任何使用LCEL构建的链条都可以通过同步API(例如在Jupyter笔记本中原型设计时使用)以及异步API(例如在LangServe服务器中使用)调用。这使得相同的代码可用于原型设计和生产环境,具有出色的性能,并且能够在同一服务器中处理许多并发请求。
- 优化的并行执行:只要你的LCEL链条中有可以并行执行的步骤(例如,如果你从多个检索器获取文档),我们会自动进行处理,无论是在同步还是异步接口中,以实现尽可能小的延迟。
- 重试和备选方案:为LCEL链条的任何部分配置重试和备选方案。这是一种在规模化时使链条更可靠的绝佳方式。我们目前正在努力为重试/备选方案添加流式支持,这样你就可以在不增加任何延迟成本的情况下获得额外的可靠性。
- 访问中间结果:对于更复杂的链条,访问中间步骤的结果在最终输出产生之前往往非常有用。这可以用来让最终用户知道正在发生某些事情,或者仅仅用来调试链条。你可以流式传输中间结果,并且它在每个LangServe服务器上都可用。
- 输入和输出架构:输入和输出架构为每个LCEL链条提供了从链条结构推断出的Pydantic和JSONSchema架构。这可以用于输入和输出的验证,并且是LangServe的一个组成部分。
- 无缝的LangSmith追踪集成:随着链条变得越来越复杂,理解每个步骤究竟发生了什么变得越来越重要。使用LCEL,所有步骤都会自动记录到LangSmith中,以获得最大程度的可观察性和可调试性。
- 无缝的LangServe部署集成:任何使用LCEL创建的链条都可以使用LangServe轻松部署。