概念指南
本节包含对LangChain关键部分的介绍。
架构
LangChain作为一个框架由多个包组成。
langchain-core
该包包含不同组件的基本抽象以及将它们组合在一起的方法。 核心组件的接口,如大型语言模型、向量存储、检索器等在此定义。 此处未定义任何第三方集成。 依赖项故意保持非常轻量级。
langchain
主要的 langchain
包含链、代理和检索策略,这些构成了应用程序的认知架构。
这些不是第三方集成。
这里的所有链、代理和检索策略并不特定于任何一个集成,而是适用于所有集成的通用策略。
langchain-community
此包包含由 LangChain 社区维护的第三方集成。 关键的合作伙伴包被单独列出(见下文)。 这包含了各种组件(大型语言模型、向量存储、检索器)的所有集成。 此包中的所有依赖项都是可选的,以保持包尽可能轻量。
合作伙伴包
虽然集成的长尾在 langchain-community
中,但我们将流行的集成拆分到各自的包中(例如 langchain-openai
、langchain-anthropic
等)。
这样做是为了改善对这些重要集成的支持。
langgraph
langgraph
是 langchain
的一个扩展,旨在
通过将步骤建模为图中的边和节点,构建强大且有状态的多参与者应用程序。
LangGraph 提供了用于创建常见类型代理的高级接口,以及用于组合自定义流程的低级 API。
langserve
一个将 LangChain 链部署为 REST API 的包。使得快速搭建生产就绪的 API 变得简单。
LangSmith
一个开发者平台,让你能够调试、测试、评估和监控 LLM 应用程序。
LangChain表达式 (LCEL)
LangChain表达式
,或LCEL
,是一种声明式的方法来链接LangChain组件。
LCEL 从第一天起就被设计为支持将原型投入生产,无需代码更改,从最简单的“提示词 + 大型语言模型”链到最复杂的链(我们看到有人成功在生产环境中运行包含数百个步骤的 LCEL 链)。以下是您可能想要使用 LCEL 的一些原因:
-
一流的流式支持: 使用 LCEL 构建链时,您将获得最佳的首次令牌时间(从开始到第一个输出块出现的时间)。对于某些链,这意味着例如我们直接从大型语言模型流式传输令牌到流式输出解析器,您将以与大模型供应商输出原始令牌相同的速度返回解析后的增量输出块。
-
异步支持: 使用 LCEL 构建的任何链都可以通过同步 API(例如,在您的 Jupyter 笔记本中进行原型设计)以及异步 API(例如,在 LangServe 服务器中)进行调用。这使得在原型和生产中使用相同的代码成为可能,具有出色的性能,并能够在同一服务器上处理多个并发请求。
-
优化的并行执行: 每当您的 LCEL 链有可以并行执行的步骤时(例如,如果您从多个检索器获取文档),我们会自动执行,无论是在同步接口还是异步接口中,以实现尽可能小的延迟。
-
重试和回退: 为您的 LCEL 链的任何部分配置重试和回退。这是使您的链在规模上更可靠的好方法。我们目前正在努力为重试/回退添加流式支持,以便您可以在没有任何延迟成本的情况下获得额外的可靠性。
-
访问中间结果: 对于更复杂的链,访问中间步骤的结果通常 非常有用,即使在最终输出生成之前。这可以用来让最终用户知道正在发生某些事情,或者仅仅是为了调试你的链。你可以流式传输中间结果,并且它在每个 LangServe 服务器上都可用。
-
输入和输出模式 输入和输出模式为每个 LCEL 链提供了从链的结构推断出的 Pydantic 和 JSONSchema 模式。这可以用于输入和输出的验证,并且是 LangServe 的一个重要组成部分。
-
无缝的 LangSmith 跟踪 随着你的链变得越来越复杂,理解每一步究竟发生了什么变得越来越重要。 使用 LCEL,所有步骤都会自动记录到 LangSmith 以实现最大程度的可观察性和可调试性。
LCEL 旨在提供行为的一致性和对遗留子类链(如 LLMChain
和 ConversationalRetrievalChain
)的自定义。许多这些遗留链隐藏了重要的细节,如提示,随着更多可行模型的出现,自定义变得越来越重要。
ConversationalRetrievalChain
。许多这些遗留链隐藏了重要的细节,比如提示词,随着更多可行模型的出现,定制化变得越来越重要。
可行模型的出现,定制化变得越来越重要。
如果你目前正在使用这些遗留链中的一种,请参阅 此指南以获取迁移的指导。
有关如何使用LCEL执行特定任务的指南,请查看相关的操作指南。