LangChain 教程:LLM 驱动型应用构建指南

在过去的几年里,GPT-4 和 LLaMA 等大型语言模型 (LLM) 开启了一个充满无限可能的全新世界。它们推动了 AI 工具和应用的蓬勃发展,ChatGPT 也似乎一夜之间成为家喻户晓的名称。但如果没有强大的工具和框架来支持新一代应用的开发,这场繁荣也就无从谈起。
LangChain 就是其中一个框架,它使得使用现有的 LLM 构建新应用程序变得容易。它由机器学习专家 Harrison Chase 开发,并于 2022 年作为开源项目启动。该框架是弥合现有语言模型与构建新颖多样化应用之间的技术鸿沟的重要一步。
LangChain 解释
简单来说,LangChain 是一个标准化接口,可简化 AI 应用的构建过程。它提供多种工具,可用于连接不同组件并创建复杂工作流。这包括 LLM 和各种类型的数据源。当用户与应用交互时,LangChain 会利用其与 LLM 的连接来处理请求并生成适当的响应。它还可以使用来自文档或数据库等外部来源的信息和数据,提供更准确且更符合上下文的答案。
例如,如果用户提出问题,LangChain 会使用 LLM 理解问题并生成响应。但它也会从一个或多个外部数据源中提取信息,以增强回复。这会让您的应用更加智能,并能够处理复杂且专业的查询。
从本质上讲,您是通过向 LLM 提供与您希望它解决的问题更相关的数据来增强其能力。
它既有 Python 版本,也有 TypeScript 版本,并且具有以下几个令人惊艳的功能:
模型交互:LangChain 支持与任何语言模型交互,可管理输入并从输出中提取信息。
高效集成:它可与 OpenAI 和 Hugging Face 等热门 AI 平台高效集成。
灵活性与自定义:LangChain 提供灵活性、自定义选项和强大组件,可用于在不同行业创建各种应用。
核心组件:该框架由 LangChain 库、LangChain 模板、LangServe 和 LangSmith 组成,可简化整个应用生命周期。
标准化接口:它提供标准化接口、提示管理和记忆能力,使语言模型能够与数据源进行交互。
这些功能组合使其灵活、快速、可扩展且易于使用,这对于任何想要开始使用 AI 的开发者来说无疑是个好消息。
LangChain 是如何工作的?
LangChain 是一个可与 LLM 集成的模块化框架。它是一个标准化接口,可抽象化使用不同 LLM API 时的复杂性和难点;无论是与 GPT-4、LLaMA 还是您想使用的任何其他 LLM 集成,流程都是一样的。它还具备动态 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接下来,您需要一个与 LangChain 交互的 LLM。本例中我们将使用 OpenAI,但您可以为您的应用程序使用任何您想要的 LLM:
pip install openai要使 OpenAI 正常工作,您还需要一个 API 密钥来验证您的请求。您可以通过创建 OpenAI 账户、转到 API 密钥部分并选择“创建新密钥”来获取密钥。获得钥匙后,请妥善保管。你很快就会用到它。
最后,创建一个名为 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 模型
使用您的 API 密钥创建 OpenAI 类的实例,用您从 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 的提示。在这个例子中,您将要求它读取文本,并告诉您文本文件中谈论的是什么电视节目:
prompt = f"Based on the following data: {external_data}, what TV show is this about?"第 7 步:获取 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 驱动型应用
到现在应该已经很清楚,LangChain 可将 LLM 的强大能力与外部数据源中的上下文和额外信息相结合,从而为您带来无限可能。正如本 LangChain 教程所示,它也非常容易上手。LangChain 兼具易用性、灵活性和强大能力,是开发各类 AI 应用的理想平台。无论您是在构建聊天机器人、问答应用还是搜索引擎,LangChain 都可以帮助您创建创新且有效的解决方案。
您接下来应该怎么做
当您准备好后,我们可以通过下面四种方法帮助您从业务数据中获取见解:
本文中描述的任何功能或功能性的发布和时间均由 Elastic 自行决定。当前尚未发布的任何功能或功能性可能无法按时提供或根本无法提供。
在本博文中,我们可能使用或提到了第三方生成式 AI 工具,这些工具由其各自所有者拥有和运营。Elastic 对第三方工具没有任何控制权,对其内容、操作或使用不承担任何责任或义务,对您使用此类工具可能造成的任何损失或损害也不承担任何责任或义务。请谨慎使用 AI 工具处理个人、敏感或机密信息。您提交的任何数据都可能用于 AI 训练或其他目的。Elastic 不保证您所提供信息的安全性或保密性。在使用任何生成式 AI 工具之前,您都应自行熟悉其隐私惯例和使用条款。
Elastic、Elasticsearch、ESRE、Elasticsearch Relevance Engine 及相关标志为 Elasticsearch N.V. 在美国和其他国家/地区的商标、徽标或注册商标。所有其他公司和产品名称均为其相应所有者的商标、徽标或注册商标。