前言
本章,我们开始介绍LangChain框架。
LangChain是一个由大型语言模型 (LLM) 驱动的应用程序开发框架。可以说,目前在整个行业的地位应该数一数二。
当然难度也有点高。
知识点
- LangChain框架构成
基础知识
LangChain免费且开源,Apache License模式。你可以简单的认为LangChain是一套开发LLM
官方网站:https://www.langchain.com/
LangChain 简化了 LLM 应用程序生命周期的每个阶段:
- 开发:使用 LangChain 的开源构建块和组件构建您的应用程序。使用第三方集成和模板快速开始运行。
- 生产化:使用LangSmith检查、监控和评估您的链,以便您可以不断优化和自信地部署。
- 部署:使用LangServe将任何链转变为 API 。
以下是整体产品布局图
具体来说,该框架由以下开源库组成:
langchain-core
:基础抽象和LangChain表达语言。langchain-community
:第三方集成。- 合作伙伴包(例如
langchain-openai
、langchain-anthropic
等):一些集成被进一步拆分成自己的仅依赖于的轻量级包langchain-core
。
- 合作伙伴包(例如
langchain
:构成应用程序认知架构的链、代理和检索策略。- langgraph:通过将步骤建模为图中的边和节点,使用 LLM 构建健壮且有状态的多参与者应用程序。
- langserve:将 LangChain 链部署为 REST API。
- LangSmith:一个开发人员平台,可让您调试、测试、评估和监控 LLM 应用程序
Official release官方版本安装
要安装 LangChain,请运行:
pip install langchain
这将安装 LangChain 的最低要求。LangChain 的很多价值在于将其与各种模型提供程序、数据存储等集成。默认情况下,不会安装执行此操作所需的依赖项。您需要单独安装特定集成的依赖项。
from source
如果您想从源代码安装,您可以通过克隆 repo 来实现,并确保目录正在PATH/TO/REPO/langchain/libs/langchain
运行:
pip install -e .
LangChain Core
该langchain-core
软件包包含 LangChain 生态系统其余部分使用的抽象基类以及 LangChain 表达语言。它由 自动安装langchain
,但也可以单独使用。使用以下方式安装:
pip install langchain-core
LangChain Community
该langchain-community
软件包包含第三方集成。安装时使用:
pip install langchain-community
LangChain experimental
该langchain-experimental
软件包包含实验性的 LangChain 代码,旨在用于研究和实验用途。安装:
pip install langchain-experimental
LangGraph
langgraph
是一个使用 LLM 构建有状态、多参与者应用程序的库,它建立在 LangChain 之上(并计划与其一起使用)。使用以下方式安装:
pip install langgraph
LangServe
LangServe 帮助开发人员将 LangChain 可运行对象和链部署为 REST API。LangServe 由 LangChain CLI 自动安装。如果不使用 LangChain CLI,请使用以下命令安装:
pip install “langserve[all]”
适用于客户端和服务器依赖项。或者pip install "langserve[client]"
适用于客户端代码和pip install "langserve[server]"
服务器代码。
LangChain CLI
LangChain CLI 适用于处理 LangChain 模板和其他 LangServe 项目。安装方式:
pip install langchain-cli
LangSmith SDK
LangSmith SDK 由 LangChain 自动安装。如果不使用 LangChain,请使用以下命令安装:
pip install langsmith
LCEL介绍
LangChain 表达式语言 (LangChain Expression Language, or LCEL) 是一种声明式的链接 LangChain 组件的方法。
LCEL 从第一天开始就被设计为支持将原型投入生产,无需更改代码,从最简单的“prompt + LLM”链到最复杂的链(我们已经看到人们在生产中成功运行了包含 100 多个步骤的 LCEL 链)。以下是您可能想要使用 LCEL 的几个原因:
一流的流式支持 当您使用 LCEL 构建链时,您将获得最佳的第一个令牌时间(直到第一个输出块出现为止所经过的时间)。对于某些链,这意味着例如我们将令牌直接从 LLM 流式传输到流式输出解析器,然后您会以与 LLM 提供程序输出原始令牌相同的速率获得解析后的增量输出块。
异步支持 使用 LCEL 构建的任何链都可以使用同步 API(例如在原型设计时在 Jupyter 笔记本中)以及异步 API(例如在LangServe服务器中)调用。这使得原型和生产中使用相同的代码成为可能,具有出色的性能,并且能够在同一服务器中处理许多并发请求。
优化并行执行 每当您的 LCEL 链具有可以并行执行的步骤时(例如,如果您从多个检索器获取文档),我们都会在同步和异步接口中自动执行此操作,以尽可能减少延迟。
重试和回退 为 LCEL 链的任何部分配置重试和回退。这是让您的链在规模上更可靠的好方法。我们目前正在努力添加对重试/回退的流式支持,这样您就可以获得额外的可靠性而无需任何延迟成本。
访问中间结果 对于更复杂的链,在产生最终输出之前访问中间步骤的结果通常非常有用。这可用于让最终用户知道正在发生的事情,甚至只是调试您的链。您可以流式传输中间结果,并且它在每个LangServe服务器上都可用。
输入和输出模式 输入和输出模式为每个 LCEL 链提供从链结构推断出的 Pydantic 和 JSONSchema 模式。这可用于验证输入和输出,是 LangServe 不可或缺的一部分。
无缝 LangSmith 跟踪 随着您的链条变得越来越复杂,了解每一步究竟发生了什么变得越来越重要。使用 LCEL,所有步骤都会自动记录到LangSmith,以实现最大的可观察性和可调试性。
无缝 LangServe 部署 使用 LCEL 创建的任何链都可以使用LangServe轻松部署。
可运行接口
为了尽可能轻松地创建自定义链,我们实现了“Runnable”协议。许多 LangChain 组件都实现了该Runnable
协议,包括聊天模型、LLM、输出解析器、检索器、提示模板等。还有几个用于处理 Runnable 的有用原语,您可以在下面阅读。
这是一个标准接口,可以轻松定义自定义链并以标准方式调用它们。标准接口包括:
stream
:流回响应块invoke
:在输入上调用链batch
:在输入列表上调用链
它们还具有相应的异步方法,应与asyncio await
语法一起使用以实现并发:
astream
:异步流回响应块ainvoke
:在输入异步时调用链abatch
:异步调用输入列表上的链astream_log
:除了最终响应之外,还流回中间步骤的发生astream_events
:链中发生的betalangchain-core
流事件(在0.1.14 中引入)
输入类型和输出类型因组件而异:
Component | Input Type | Output Type |
---|---|---|
Prompt | Dictionary | PromptValue |
ChatModel | Single string, list of chat messages or a PromptValue | ChatMessage |
LLM | Single string, list of chat messages or a PromptValue | String |
OutputParser | The output of an LLM or ChatModel | Depends on the parser |
Retriever | Single string | List of Documents |
Tool | Single string or dictionary, depending on the tool | Depends on the tool |
所有可运行对象都公开输入和输出模式以检查输入和输出:
input_schema
:从 Runnable 结构自动生成的输入 Pydantic 模型output_schema
:从 Runnable 结构自动生成的输出 Pydantic 模型
组件
LangChain 为各种组件提供标准、可扩展的接口和外部集成,这些组件可用于使用 LLM 进行构建。有些组件是 LangChain 实现的,有些组件我们依赖第三方集成,还有一些则是混合的。
RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/6754