LangChain 教程:构建 LLM 支持的应用程序的指南

作者:Aditya Tripathi

GPT-4 和 LLaMA 等大型语言模型 (LLM) 在过去几年中创造了一个充满可能性的世界。 它预示着人工智能工具和应用程序的繁荣,ChatGPT 似乎一夜之间成为家喻户晓的名字。 但如果没有为促进新一代应用程序而创建的强大工具和框架,这种繁荣就不可能实现。

LangChain 就是这些框架之一,它可以轻松地使用现有的 LLMs 构建新应用程序。 它由机器学习专家 Harrison Chase 开发,并于 2022 年作为开源项目推出。 该框架在弥合现有语言模型和构建新的多样化应用程序之间的技术差距方面迈出了巨大的一步。

LangChain 解释

简单来说,LangChain是一个标准化的接口,可以简化构建AI应用程序的过程。 它为你提供了多种工具,可用于连接不同的组件并创建复杂的工作流程。 这包括 LLMs 和各种类型的数据源。 当用户与应用程序交互时,LangChain 使用其与 LLM 的连接来处理请求并生成适当的响应。 它还可以使用来自文档或数据库等外部来源的信息和数据来提供更准确且与上下文相关的答案。

例如,如果用户提出问题,LangChain 将使用 LLM 来理解问题并制定答复。 但它也会从一个或多个外部数据源获取数据以增强其回复。 这使你的应用程序更加智能,并且能够处理复杂和专门的查询。

从本质上讲,你可以通过向 LLM 提供与你希望其解决的问题更相关的数据来增强其能力。

它以 Python 和 TypeScript 包的形式提供,具有几个令人印象深刻的功能:

  • 模型交互:LangChain 允许与任何语言模型交互,管理输入并从输出中提取信息。
  • 高效集成:提供与 OpenAI、Hugging Face 等流行 AI 平台的高效集成。
  • 灵活性和定制性:LangChain 提供灵活性、定制选项和强大的组件来创建跨不同行业的各种应用程序。
  • 核心组件:该框架由 LangChain 库、LangChain 模板、LangServe 和 LangSmith 组成,简化了整个应用程序生命周期。
  • 标准化接口:提供标准化接口、提示管理和记忆能力,使语言模型能够与数据源交互。

这种功能组合使其灵活、快速、可扩展且易于使用,对于任何想要开始使用 AI 的开发者来说,这简直是音乐般的美妙。

LangChain 如何运作?

LangChain 是一个与 LLMs 集成的模块化框架。 它是一个标准化的接口,消除了使用不同 LLM API 的复杂性和困难 - 这与 GPT-4、LLaMA 或你想要使用的任何其他 LLM 集成的过程相同。 它还具有动态 LLM 选择功能,这意味着开发人员可以为他们使用 LangChain 执行的特定任务选择最合适的 LLM。

模块化设计还有助于将输入数据处理和转换为可操作的输出。 它处理各种数据类型,包括文本、代码和多媒体格式,并提供用于预处理、清理和规范化数据的工具。 这是为了确保数据适合 LLMs 使用,并且可能涉及标记化、规范化和语言识别。

LangChain 还处理 LLM 的输出,将其转换为适合应用程序或特定任务要求的格式。 这包括格式化文本、生成代码片段以及提供复杂数据的摘要等。

LangChain 核心概念

LangChain 的架构建立在组件和链的概念之上。 组件表示执行特定任务的可重用模块,例如处理输入数据、生成文本格式、访问外部信息或管理工作流程。 链是一系列组件,它们协同工作以实现更广泛的目标,例如总结文档、生成创意文本格式或提供个性化建议。

组件和模块

在 LangChain 中,术语 "组件(components )" 和 "模块 (modules)" 有时可以互换使用,但两者之间有一个微妙的区别:

  • 组件是 LangChain 的核心构建模块,代表特定的任务或功能。 它们通常较小且集中,可以在不同的应用程序和工作流程中重复使用。
  • 另一方面,模块组合多个组件以形成更复杂的功能。 LangChain 甚至为其一些主要模块提供了标准接口,包括内存模块(一种可重用的构建块,用于存储和管理供大型语言模型使用的数据)和代理(一种动态控制单元,根据实时反馈和信息来协调链及用户交互)。

与组件一样,模块是可重用的,并且可以组合在一起以创建更复杂的工作流程。 这称为链,将组件或模块序列组合在一起以实现特定目标。 链是 LangChain 中工作流程编排的基础,对于构建处理各种任务的有效应用程序至关重要。

与 LLMs 整合

LangChain 通过提供标准化接口与 LLMs 无缝集成。 但 LangChain 与 LLM 的整合不仅仅是提供一个连接机制。 它还提供了多种功能来优化 LLM 的使用,以构建基于语言的应用程序:

  • 提示管理:LangChain 使你能够制作有效的提示,帮助 LLMs 理解任务并生成有用的响应。
  • 动态 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 密钥部分并选择 "Create new secret key" 来获取密钥。 拿到密钥后,请将其存放在安全的地方。 你很快就会需要它。

最后,创建一个名为 data.txt 的文本文件。 这将是你用来为 LLM 提供上下文的外部数据源:

vbnet 复制代码
1.  In West Philadelphia born and raised
2.  On the playground was where I spent most of my days
3.  Chillin' out, maxin', relaxin', all cool
4.  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 结合使用的指南

步骤一:从 LangChain 导入 OpenAI 类

在 Python 脚本的顶部,添加此导入语句以从 LangChain 的 LLM 模块中提取 OpenAI 类:

javascript 复制代码
from langchain.llms import OpenAI

步骤二:定义从文本文件读取数据的功能:

定义该函数,以便应用程序将文件路径作为参数。 这将打开文件进行读取并返回其内容:

python 复制代码
1.  def read_data_from_file(file_path):
2.      with open(file_path, 'r') as file:
3.          return file.read()

步骤三:初始化 OpenAI 模型

使用你的 API 密钥创建 OpenAI 类的实例,将 YOUR-OPENAI-KEY 替换为你从 OpenAI 获取的实际密钥:

ini 复制代码
gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')

步骤四:定义一个函数来请求 OpenAI 的响应

编写一个函数,将提示作为参数并返回 GPT-3 模型的响应:

python 复制代码
1.  def get_response(prompt):
2.      return gpt3(prompt)

步骤五:从文本文件中读取数据

指定文本文件的路径并使用你之前定义的函数来读取其内容。 然后,你将数据存储在 external_data 变量中:

ini 复制代码
1.  file_path = 'data.txt'
2.  external_data = read_data_from_file(file_path)

步骤六:创建测试提示

你可以在此处定义要发送到 GPT-3 的提示。 在此示例中,你将要求它读取文本并告诉你文本文件正在谈论哪个电视节目:

ini 复制代码
prompt = f"Based on the following data: {external_data}, what TV show is this about?"

步骤七:获取 GPT-3 的响应并打印

调用发送准备好的提示的函数,然后检索并打印来自 GPT-3 的响应:

bash 复制代码
print("Response:", get_response(prompt))

步骤八:运行应用程序并检查响应

完成所有这些后,你将拥有一个如下所示的 Python 应用程序:

test.py

python 复制代码
1.  from langchain.llms import OpenAI

3.  # Function to read data from a file
4.  def read_data_from_file(file_path):
5.      with open(file_path, 'r') as file:
6.          return file.read()

8.  # Initialize the LLM
9.  gpt3 = OpenAI(api_key='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')

11.  def get_response(prompt):
12.      return gpt3(prompt)

14.  # Read data from your text file
15.  file_path = 'data.txt'
16.  external_data = read_data_from_file(file_path)

18.  # Prepare your prompt including the external data
19.  prompt = f"Based on the following data: {external_data}, what TV show is this about?"

21.  # Get the response from GPT-3
22.  print("Response:", get_response(prompt))

所以现在剩下要做的就是运行你的 Python 应用程序以确保它正常工作! 保存文件,并在终端中使用以下命令运行你的应用程序:

python YOUR-APP-NAME.py
vbnet 复制代码
1.  $ python test.py 
2.  /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/langchain/llms/__init__.py:548: LangChainDeprecationWarning: Importing LLMs from langchain is deprecated. Importing from langchain will no longer be supported as of langchain==0.2.0. Please import from langchain-community instead:

4.  `from langchain_community.llms import OpenAI`.

6.  To install langchain-community run `pip install -U langchain-community`.
7.    warnings.warn(
8.  /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: The class `langchain_community.llms.openai.OpenAI` was deprecated in langchain-community 0.0.10 and will be removed in 0.2.0. An updated version of the class exists in the langchain-openai package and should be used instead. To use it run `pip install -U langchain-openai` and import as `from langchain_openai import OpenAI`.
9.    warn_deprecated(
10.  /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: The function `__call__` was deprecated in LangChain 0.1.7 and will be removed in 0.2.0. Use invoke instead.
11.    warn_deprecated(
12.  Response: 

14.  The TV show is "The Fresh Prince of Bel-Air".

用例

这个例子是一个过于简化的演示,但 LangChain 的灵活性意味着构建新的AI应用程序有无限的可能性。 我们不可能尝试在这里将它们全部列出,但我们将通过一些案例研究来强调你可以构建的各种东西:

使用 LangChain 构建 LLM 支持的应用程序

现在应该很清楚了,通过将 LLMs 的力量与外部数据源中的上下文和额外信息相结合,LangChain 为你提供了无限的可能性。 正如本教程所示,它也非常容易上手。 LangChain 的易用性与灵活性和强大功能相结合,使其成为开发各种人工智能应用程序的理想平台。 无论你是构建聊天机器人、问答应用程序还是搜索引擎,LangChain 都可以帮助你创建创新且有效的解决方案。

接下来你应该做什么

只要你准备好,我们可以通过以下四种方式帮助你从业务数据中获取见解:

  1. 开始免费试用,看看 Elastic 如何帮助你的业务。
  2. 浏览我们的解决方案,了解 Elasticsearch 平台的工作原理以及我们的解决方案如何满足你的需求。
  3. 了解如何将生成式人工智能融入企业中
  4. 与你认识并喜欢阅读本文的人分享这篇文章。 通过电子邮件、LinkedIn、Twitter 或 Facebook 与他们分享。

原文:LangChain Tutorial: An Intro to Building LLM-powered apps | Elastic Blog

相关推荐
J心流5 小时前
Git常用命令总结
大数据·git·elasticsearch
呆萌的代Ma6 小时前
python操作Elasticsearch执行增删改查
python·elasticsearch·jenkins
乄bluefox6 小时前
关于easy-es对时间范围查询遇到的小bug
java·数据库·spring boot·elasticsearch·搜索引擎·bug
m0_748229997 小时前
Goland:专为Go语言设计的高效IDE
ide·elasticsearch·golang
liupenglove7 小时前
Elasticsearch检索之三:官方推荐方案search_after检索实现(golang)
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客9 小时前
Lucene 漏洞历险记:修复损坏的索引异常
大数据·elasticsearch·搜索引擎·全文检索·lucene·全文搜索
Elastic 中国社区官方博客10 小时前
从 ELK Stack 到简单 — Elastic Cloud Serverless 上的 Elastic 可观察性
大数据·数据库·elk·elasticsearch·搜索引擎·云原生·serverless
运维&陈同学10 小时前
【Beats02】企业级日志分析系统ELK之Filebeat 收集日志及案例一
大数据·linux·运维·elk·elasticsearch·devops·filebeat
vvw&13 小时前
如何在 Ubuntu 22.04 上安装 Elasticsearch
linux·运维·服务器·后端·ubuntu·elasticsearch·搜索引擎
不能放弃治疗17 小时前
第 28 章 - ES 源码篇 - Elasticsearch 启动与插件加载机制解析
elasticsearch