LangChain LCEL 起步(一)
LCEL简化了从基础组件构建复杂链的过程,并支持像流处理、并行处理和日志记录等开箱即用的功能。
最简案例: prompt + model + output parser最基本也是最常见的 LCEL 案例就是将一个 Prompt 模版跟一个模型串联起来。下面,我们将创建一条链,它接收一个主题并由此生成一个笑话。
12345678910111213141516from langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAI# Prompt模版prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")# 模型model = ChatOpenAI(model="gpt-4")# 输出解析器output_pa ...
LangChain LCEL 简介
LangChain表达式语言( LCEL),是一种声明式的语言,通过它可以轻松地将链组合在一起。 LCEL 从设计的第一天开始就是为了支持 原型即产品,代码无变更 理念的。从最简单的 “Prompt + LLM” 链到最复杂的链(曾有过成功在生产中运行具有数百个步骤的 LCEL 链的案例)。
以下是几个使用 LCEL 的好处:
支持流式传输 当使用 LCEL 构建链时,用户将获得最佳的首次令牌时间(从开始到第一个输出块出现所消耗的时间)。对于某些链来说,这意味着令牌直接从一个 LLM 流式传输到一个支持流式的输出解析器,用户将以与 LLM 输入方输入原始token的相同速率获得解析后的增量输出块。
支持异步 使用 LCEL 构建的任何链都可以使用同步 API(例如在 Jupyter notebook 中进行的原型开发)以及异步 API(例如在 LangServe 服务器中运行)进行调用。这使得原型开发和生产环境中可以使用相同的代码,它们在生产环境将可以获得出色的性能,以及在同一个服务器上处理许多并发请求。
优化的并行执行 每当 LCEL 链具有可以并行执行的步骤(例如,从多个检索器中获 ...
LangChain LangServe入门
现在我们已经建立了一个应用程序,但如果需要让它对外提供服务,就需要引入 LangServe 。LangServe 帮助开发人员将 LangChain 链部署为 REST API。使用 LangChain 并不一定需要使用 LangServe,但在本指南中,我们将展示如何使用 LangServe 部署您的应用程序。虽然之前大部分程序/示例都是在 Jupyter Notebook 中运行的,现在我们离开那个环境。我们将创建一个 Python 文件,然后从命令行与之交互。
在开始之前,先安装LangServe
1pip install "langserve[all]"
Server端要创建一个LangChain应用服务器,我们首先需要编写一个serve.py文件。该文件包含LangChain应用的服务逻辑,包括:
刚刚构建的链定义
一个 FastAPI 应用(这里使用FastAPI框架)
通过 langserve.add_routes 定义一个链服务提供的路由
123456789101112131415161718192021222324252627282 ...
快速构建 LangChain 应用(四)
四、Agent入门到目前为止,我们创建的所有示例链的每一步都是在事先知道的情况下进行的。最后,我们将学习怎么使用LangChain的agent,在这个例子中,LLM将决定下一步采取哪些步骤。
注意:本文中我们仅展示OpenAI模型来创建的agent,迄今为止,本地化模型在这方面尚不成熟。
在构建Agent时,首先要决定它应该能够访问哪些工具。在这个例子中,我们将给代理提供两个工具:
我们刚刚创建的检索器。这将使它能够轻松回答有关 LangSmith 的问题。
一个搜索工具。这将使它能够轻松回答需要最新信息的问题。
首先,让我们将刚刚创建的检索器设置成一个工具:
1234567from langchain.tools.retriever import create_retriever_toolretriever_tool = create_retriever_tool( retriever, "langsmith_search", "Search for information about LangSmith. For any q ...
快速构建 LangChain 应用(三)
三、会话式检索链到目前为止我们创建的链还只能回答单个问题。我们正在构建的最主要的 LLM 应用程序类型之一是聊天机器人。那么,我们如何将这个链转换成一个能够回答后续问题的链呢?
在这里,我们仍然可以使用 create_retrieval_chain 函数,但是我们需要改变两件事:
检索方法现在不仅应考虑最近的输入,还应考虑整个历史记录。
最终的 LLM 链也应考虑整个历史记录。
更新检索为了更新检索,我们将创建一个新的链。这个链将输入(input)和对话历史记录(chat_history)作为输入,并使用一个 LLM 生成一个搜索查询。
1234567891011from langchain.chains import create_history_aware_retrieverfrom langchain_core.prompts import MessagesPlaceholder# 首先我们需要创建一个提示词,可以将其传递给 一个LLM 来生成这个搜索查询prompt = ChatPromptTemplate.from_messages([ MessagesPlac ...
快速构建 LangChain 应用(二)
二、检索链为了能够正确回答原始问题 (“how can langsmith help with testing?”), 我们需要向 LLM 提供额外的上下文信息。这里,我们可以通过检索来实现这一点。当有太多数据无法直接传递给 LLM 时,检索就非常有用了。您可以使用检索器来获取最相关的内容并将其传递进去。
在这个过程中,我们将从检索器中查找相关的文档,然后将其传递到提示词Prompt中。检索器的背后可以是任何东西 - SQL数据表、互联网等端。下面,我们将使用一个向量存储组件并将其用作检索器。
首先,我们需要加载想要索引的数据。为了实现这一点,我们将使用 WebBaseLoader。在使用它之前,先要安装 BeautifulSoup:
1pip install beautifulsoup4
然后,我们可以引入WebBaseLoader、实例化并加载文档。
1234from langchain_community.document_loaders import WebBaseLoaderloader = WebBaseLoader("https://docs.smith.l ...
快速构建 LangChain 应用(一)
LangChain 使您能够构建连接外部数据和计算资源到大型语言模型(LLM)的应用程序。下面我们将一步步来演示这个构建过程。
首先,我们将从简单的 LLM 链开始,它仅依赖于提示模板中的信息来响应。
接下来,我们将构建一个检索链,该链从单独的数据库中获取数据,并将这些数据传递给提示模板。
然后,我们将加入聊天历史记录,以创建一个会话检索链。这使您能够以聊天的方式与这个 LLM 互动,让它记住之前的问题。
最后,我们将构建一个代理人,该代理人利用 LLM 来判断是否需要检索数据来回答问题。
一、LLM 链1.1、基于OpenAI的实现我们可以通过API来访问LLM,比如OpenAI。在开始之前,需要先安装LangChain x OpenAI 集成包pip install langchain-openai。其次设置环境变量OPENAI_API_KEYexport OPENAI_API_KEY="..."。然后开始初始化。
123from langchain_openai import ChatOpenAIllm = ChatOpenAI() # 也可以通过参数传递o ...
LangChain 库构成
LangChain库提供了一系列组件和集成工具,使得开发者能够更方便地与语言模型进行交互。这些组件是模块化的,易于使用,无论是否使用LangChain框架的其他部分。
此外,LangChain库还提供了现成的链(off-the-shelf chains),这些链是由多个组件组合而成,用于完成更高级别的任务。现成的链可以帮助开发者快速入门,而组件则使得定制现有链和构建新链变得更加容易。
LangChain库由几个不同的包组成:
1、langchain:包含构成应用程序认知架构的链(Chains)、代理(Agents)和检索策略(Retrieval Strategies)。这些组件是构建智能应用的关键,使得开发者能够创建出具有复杂语言处理能力的应用程序。
这是安装LangChain的最基本要求。LangChain的很多价值在于它与各种模型提供商、数据存储等集成。默认情况下,实现这些功能所需的依赖项并未安装,还需要为特定集成分别安装依赖项。
1pip install langchain
2、langchain-community:提供第三方集成,这意味着开发者可以方便地集成和使用来自社 ...
LangChain 应用基本开发流程
LangChain框架的使用涉及多个步骤,这些步骤通常包括设置环境、定义任务和链、配置组件,以及最终运行和评估你的应用程序。下面是一个大致的指南,帮助你了解如何使用LangChain框架:
安装和设置环境:
首先,确保你的开发环境中安装了Python(或JavaScript,取决于你选择的库)。
然后,使用pip(或npm)安装LangChain库。
理解任务和需求:
在开始使用LangChain之前,明确你的应用程序需要完成的任务和目标。
思考哪些语言模型、检索器、生成器等组件最适合你的任务。
定义链和组件:
在LangChain中,链是由一系列组件构成的,这些组件共同完成了特定的任务。
你需要根据你的任务定义链的结构,并配置每个组件的参数。
加载和集成模型:
根据你的需求,加载适当的语言模型(如GPT、BERT等)。
配置模型的输入和输出格式,确保它们与你的链的其他部分兼容。
实现数据处理和特征工程:
如果需要,实现数据预处理步骤,如分词、清洗、编码等。
设计特征提取方法,以便为模型提供有用的上下文信息。
编写和配置链:
使用LangChain的A ...
LangChain 简介
LangChain是一个基于语言模型的应用程序开发框架。它使应用程序能够:
上下文感知能力:将语言模型与上下文来源(如提示指令、少量示例、用于支撑响应的内容等)相连接;
推理能力:依赖于语言模型进行推理(如基于提供的上下文回答问题、以及需要采取什么行动等)。
通过使用LangChain,开发人员能够创建出能够理解用户意图、利用上下文信息、并进行智能推理的应用程序,从而提供更自然、更准确的用户体验。无论是构建聊天机器人、智能助手,还是其他复杂的自然语言处理应用,LangChain都提供了一个强大而灵活的工具集,帮助开发人员快速实现他们的创意和目标。
LangChain主要由以下几个部分组成:
LangChain库提供了一套强大的工具和组件,支持开发者通过Python或JavaScript语言来构建语言模型应用。这些库包含了丰富的接口,集成了许多开发者能够轻松地使用组件,以及一个将这些组件组合成链(Chains)和代理(Agents)的基本运行时环境。此外,LangChain库还提供了现成的链和代理实现,这些实现都是基于经过验证的架构和最佳实践,使得开发者能够快速启动并构建功能强 ...