LangChain 教程:构建 LLM 驱动型应用程序指南
过去几年间,像 GPT-4 和 LLaMA 等这样的大型语言模型 (LLM) 为我们开启了一个充满无限可能的新世界。它们引领了 AI 工具和应用领域的蓬勃发展,ChatGPT 更是一夜之间成为了家喻户晓的名字。但这一切的繁荣,都离不开那些专为新一代应用量身打造、功能强大的工具和框架的支持。
LangChain 就是这样一个框架,它简化了利用现有 LLM 构建新应用的过程。这个框架由机器学习专家 Harrison Chase 开发,并于 2022 年作为开源项目推出。LangChain 在现有语言模型与构建多样化新应用之间搭建了一座重要的桥梁,极大地弥补了两者之间的技术鸿沟。
LangChain 简介
简单地说,LangChain 是一个标准化接口,旨在简化构建 AI 应用的过程。它提供了一系列工具,可帮助您连接不同的组件,从而构建出复杂的工作流。这些工具包括 LLM 以及多种类型的数据源。当用户与应用进行交互时,LangChain 会使用其与 LLM 的连接来处理请求并生成适当的回应。此外,它还能利用文档或数据库等外部来源中的信息和数据,以提供更加精确、更贴合上下文的答案。
例如,当用户提出问题时,LangChain 会利用 LLM 来理解问题并构思回答。同时,它还会整合一个或多个外部数据源中的信息,以丰富和完善其回答。这样,您的应用程序将变得更加智能,能够处理复杂且专业的查询。
从本质上讲,您通过为 LLM 提供与希望它解决的问题更加相关的数据,从而增强了它的能力。
LangChain 既可作为 Python 包也可作为 TypeScript 包使用,并具备以下几项令人瞩目的功能:
模型交互:LangChain 支持与任意语言模型进行交互,有效管理输入,并从输出中提取所需信息。
高效集成:LangChain 能够与 OpenAI 和 Hugging Face 等热门 AI 平台实现高效集成。
灵活性和定制化:LangChain 提供了高度的灵活性和丰富的定制选项,结合强大的组件,能够跨不同行业构建多种应用程序。
核心组件:这个框架的核心包括:LangChain 库、LangChain 模板、LangServe 和 LangSmith,能够极大简化整个应用程序的生命周期。
标准化接口:LangChain 提供了标准化的接口、提示管理和内存功能,使语言模型能够轻松与数据源进行交互。
这些功能的结合赋予了 LangChain 极高的灵活性、快速响应能力、可扩展性以及易用性,对于任何希望涉足 AI 领域的开发人员而言,这无疑是一个令人振奋的好消息。
LangChain 的工作原理
LangChain 是一个与 LLM 集成的模块化框架。它是一个标准化的接口,隐藏了与不同 LLM API 协作的复杂性和难度,无论您想集成 GPT-4、LLaMA 还是其他任何 LLM,都可以通过相同的过程轻松实现。此外,LangChain 还具备动态 LLM 选择功能,这意味着开发人员可以根据使用 LangChain 执行的具体任务,选择最合适的 LLM。
同时,模块化设计还极大地促进了输入数据的处理与转换为可执行输出的过程。它能够处理多种数据类型,涵盖文本、代码以及多媒体格式,并提供预处理、清理和规范化数据的工具。这些步骤旨在确保数据能够被 LLM 有效使用,可能包括词汇切分、数据规范化以及语言识别等处理环节。
此外,LangChain 还能处理 LLM 的输出,将其转换为符合应用或特定任务需求的格式。这包括文本格式化、生成代码片段以及提供复杂数据的摘要等。
LangChain 的核心概念
LangChain 的架构核心在于组件和链的概念。组件是可重复使用的模块,负责执行诸如处理输入数据、生成文本格式、访问外部信息或管理工作流等特定任务。链则是由这些组件组成的序列,它们共同协作以实现更广范围的目标,比如总结文档、生成创意文本格式或是提供个性化推荐等。
组件和模块
在 LangChain 中,“组件”和“模块”这两个词有时可以互换使用,但两者之间确实存在细微的区别:
组件是 LangChain 的核心构建块,代表特定的任务或功能。这些组件通常小且专注,能够在不同的应用程序和工作流中重复使用。
模块则是将多个组件组合起来,以实现更复杂的功能。LangChain 甚至为一些主要模块提供了标准接口,其中包括内存模块(一个可重复使用的构建块,用于存储和管理大型语言模型所需的数据)和代理(一个动态控制单元,能够根据实时反馈和用户交互来编排链)。
与组件类似,模块也具有可重用性,并且可以相互组合以创建更加复杂的工作流。这种由多个组件或模块串联起来以实现特定目标的结构被称为“链”。在LangChain中,链是工作流编排的基础,对于构建能够处理各种任务的高效应用程序至关重要。
与 LLM 集成
LangChain 通过提供标准化接口,实现了与 LLM 的无缝集成。但 LangChain 与 LLM 的集成远不止于提供连接机制。它同时还提供了多项功能,旨在优化 LLM 在构建基于语言的应用程序时的使用效果:
提示管理:LangChain 允许您设计有效的提示,以帮助 LLM 更好地理解任务并生成有用的回应。
动态 LLM 选择:这一功能允许您根据复杂性、准确性要求和计算资源等因素,为不同的任务选择最合适的 LLM。
内存管理集成:LangChain 与内存模块集成,这意味着 LLM 可以访问和处理外部信息。
- 基于代理进行管理:这一功能允许您编排基于复杂的基于 LLM 的工作流,使其能够适应不断变化的环境和用户需求。
工作流管理
在 LangChain 中,工作流管理是指编排和控制链与代理的执行过程,以解决特定问题的活动。这涵盖了数据流的管理、组件执行的协调,以及确保应用程序能够有效响应用户交互和不断变化的环境。以下是工作流管理中的一些关键组件:
链编排:LangChain 可协调链的执行,确保任务按照正确的顺序执行,并在组件之间正确地传递数据。
基于代理进行管理:通过预定义模板和用户友好的界面,简化了代理的使用。
状态管理:LangChain 能够自动跟踪应用程序的状态,为开发人员提供一个统一的界面来访问和修改状态信息。
并发管理:LangChain 能够处理并发执行的复杂性,让开发人员能够专注于任务和交互,而无需担心线程或同步问题。
设置 LangChain
LangChain 的一个优势是入门要求极低。在本指南中,我们将使用 Python,因此您只需在电脑上安装 Python 3.8 或更高版本即可。就这么简单!
安装和配置
第一步是安装核心的 LangChain 框架。为此,最简单的方法是使用下面的 PIP 命令:
pip install langchain
接下来,您需要有一个 LLM,以便 LangChain 与其进行交互。在本示例中,我们将使用 OpenAI,但您可以为应用选择任何您想要的 LLM:
pip install openai
为了使用 OpenAI,您还需要一个 API 密钥来验证您的请求。您可以通过创建一个 OpenAI 账户,进入 API 密钥部分,并选择“Create new secret key”(创建新密钥)来获得一个。获取密钥后,请妥善保管。您很快就会用到它。
最后,创建一个名为 data.txt 的文本文件。这将是您用来为 LLM 提供上下文的外部数据源:
In West Philadelphia born and raised
On the playground was where I spent most of my days
Chillin' out, maxin', relaxin', all cool
And all shootin' some b-ball outside of the school
接下来,让我们进入有趣的环节!
使用 LangChain 开发应用程序
要构建这个 LangChain 应用,您需要打开文本编辑器或您选择的 IDE,并在与 data.txt 相同的位置创建一个新的 Python (.py) 文件。接下来,您将创建一个非常基础的应用,该应用会向 OpenAI 的 GPT-3 LLM 发送一个提示,并打印出响应。
想了解更高级的内容?请查看我们的指南,了解如何将 Amazon Bedrock 与 Elasticsearch 和 Langchain 结合使用。
第 1 步:从 LangChain 导入 OpenAI 类
在 Python 脚本的顶部,添加以下导入语句,以便从 LangChain 的 LLM 模块中引入 OpenAI 类:
from langchain.llms import OpenAI
第 2 步:定义一个从文本文件中读取数据的函数
定义这个函数,确保应用接受文件路径作为参数。这个函数将负责打开指定的文件以进行读取,并返回文件的内容:
def read_data_from_file(file_path):
with open(file_path, 'r') as file:
return file.read()
第 3 步:初始化 OpenAI 模型
使用您从 OpenAI 获取的 API 密钥来创建一个 OpenAI 类的实例,将 YOUR-OPENAI-KEY 替换为您的实际密钥:
gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')
第 4 步:定义一个从 OpenAI 请求响应的函数
编写一个函数,用于接收提示作为参数,并从 GPT-3 模型获取响应后返回该响应:
def get_response(prompt):
return gpt3(prompt)
第 5 步:从文本文件中读取数据
指定文本文件的路径,并使用之前定义的函数来读取该文件的内容。然后,将数据存储到 external_data 变量中:
file_path = 'data.txt'
external_data = read_data_from_file(file_path)
第 6 步:创建一个测试提示
在这一步中,您需要定义要发送给 GPT-3 的提示。在本例中,您将要求 GPT-3 读取文本,并告知您该文本文件讨论的是哪个电视节目:
prompt = f"Based on the following data: {external_data}, what TV show is this about?"
第 7 步:接收并打印 GPT-3 返回的响应
调用一个函数,发送准备好的提示给 GPT-3,然后接收并打印 GPT-3 返回的响应:
print("Response:", get_response(prompt))
第 8 步:运行应用并检查响应
完成所有这些操作后,您就拥有了一个如下所示的 Python 应用:
from langchain.llms import OpenAI
# Function to read data from a file
def read_data_from_file(file_path):
with open(file_path, 'r') as file:
return file.read()
# Initialize the LLM
gpt3 = OpenAI(api_key='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')
def get_response(prompt):
return gpt3(prompt)
# Read data from your text file
file_path = 'data.txt'
external_data = read_data_from_file(file_path)
# Prepare your prompt including the external data
prompt = f"Based on the following data: {external_data}, what TV show is this about?"
# Get the response from GPT-3
print("Response:", get_response(prompt))
现在,剩下的就是运行您的 Python 应用,以确保它正常工作!保存文件后,在终端中使用以下命令来运行应用:
python YOUR-APP-NAME.py
如果一切按计划进行,您会收到一个类似以下这样的回复:
Response:
This is the opening theme song for the popular 1990s TV show "The Fresh Prince of Bel-Air".
用例
这个示例仅是一个高度简化的演示,但 LangChain 的灵活性赋予了构建全新 AI 应用的无限可能。我们不可能在此一一列举,但将通过几个案例研究来重点展示您可以构建的各种应用:
问答应用:创建一个应用,您可以向其询问所需信息,它将在存储的文档中为您找到答案。
文本搜索 (BM25):创建您自己的文本搜索应用,以高效查询大量数据。
矢量搜索:创建一个可搜索数据相似性和筛选元数据的应用。
混合搜索(文本和矢量):开发一个可利用文本和矢量筛选匹配相似文档的 AI。
- 将 LangChain 与您自己的 LLM 结合使用:使用 LangChain 构建一个 AI 应用,以将您自己的 LLM 与外部数据源结合使用。
使用 LangChain 构建 LLM 驱动型应用
通过将 LLM 的强大功能与外部数据源中的上下文和额外信息深度融合,LangChain 无疑为您开启了无限可能的大门。正如本篇 LangChain 教程所示,它也非常容易上手。LangChain 的这种易用性,加之其出色的灵活性和强大功能,使其成为开发多种 AI 应用程序的理想平台。无论您是要构建聊天机器人、问答应用,还是搜索引擎,LangChain 都能助您一臂之力,创建出既创新又高效的解决方案。
本博文所描述的任何特性或功能的发布及上市时间均由 Elastic 自行决定。当前尚未发布的任何特性或功能可能无法按时提供或根本不会提供。
在本博文中,我们可能使用或提到了第三方生成式 AI 工具,这些工具由其各自所有者拥有和运营。Elastic 对第三方工具没有任何控制权,对其内容、操作或使用不承担任何责任或义务,对您使用此类工具可能造成的任何损失或损害也不承担任何责任或义务。在 AI 工具中使用个人、敏感或机密信息时,请务必谨慎。您提交的任何数据都可能用于 AI 训练或其他目的。Elastic 不保证您所提供信息的安全性或保密性。在使用任何生成式 AI 工具之前,您都应自行熟悉其隐私惯例和使用条款。
Elastic、Elasticsearch、ESRE、Elasticsearch Relevance Engine 及相关标志为 Elasticsearch N.V. 在美国和其他国家/地区的商标、徽标或注册商标。所有其他公司和产品名称均为其相应所有者的商标、徽标或注册商标。