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 提供上下文的外部数据源:

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 结合使用的指南。

步骤一:从 LangChain 导入 OpenAI 类

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

from langchain.llms import OpenAI

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

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

def read_data_from_file(file_path):with open(file_path, 'r') as file:return file.read()

步骤三:初始化 OpenAI 模型

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

gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')

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

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

def get_response(prompt):return gpt3(prompt)

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

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

file_path = 'data.txt'
external_data = read_data_from_file(file_path)

步骤六:创建测试提示

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

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

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

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

print("Response:", get_response(prompt))

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

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

test.py

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='YourOpenAIkey')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
$ python test.py 
/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:`from langchain_community.llms import OpenAI`.To install langchain-community run `pip install -U langchain-community`.warnings.warn(
/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`.warn_deprecated(
/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.warn_deprecated(
Response: The TV show is "The Fresh Prince of Bel-Air".

用例

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

  • 聊天机器人:构建你自己的聊天机器人,你可以在其中用自然语言提问并维护对话历史记录。
  • 问答应用程序:创建一个应用程序,你可以在其中询问所需的信息,它会从存储的文档中找到答案。
  • 文本搜索(BM25):创建你自己的文本搜索应用程序来查询大量数据。
  • 向量搜索:构建一个搜索数据相似性并过滤元数据的应用程序。
  • 混合搜索(文本和向量):开发人工智能,使用文本和矢量过滤来匹配相似文档。
  • LangChain 与你自己的 LLM:使用 LangChain 构建一个 AI 应用程序,该应用程序使用你自己的 LLM 和外部数据源。

使用 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/526771.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Windows系统使用固定tcp公网地址ssh远程Kali系统

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

变频器学习

西门子变频器 SINAMICS V20 入门级变频器 SINAMICS G120C

【Godot4自学手册】第二十二节完成主人公的闪现功能

这一节我们主要自学主人公的闪现功能,当按下鼠标右键,我们的主人公根据不同的方向进行瞬间移动,并在身后留下一串残影,具体效果如下: 一、新建ghost场景 新建Node2D场景,命名为Ghost,存储到S…

KEIL调试模式

step1: step2: step:3推荐使用硬件的在线仿真模式 step4:启动调试模式之前需要将硬件连接STM32然后编译项目确保工程项目是没有问题的 编译结果没有问题 step5:点击keil中的放大镜图标进入调试模式 进入调试模式后界面展示 外设资源查看功能

Linux网络套接字之UDP网络程序

(。・∀・)ノ゙嗨!你好这里是ky233的主页:这里是ky233的主页,欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 实现一个简单的对话发消息的功能! 目录…

Stable diffusion(一)

Stable diffusion 原理解读 名词解释 正向扩散(Fixed Forward Diffusion Process):反向扩散(Generative Reverse Denoising Process) VAE(Variational AutoEncoder):一个用于压缩图…

快速上手:使用Hexo搭建并自定义个人博客

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

再探再报 除 0 这件事有不同

首先,在数学中,一个数除以0是没有意义的。 其次,在计算机中,对于除零,传统概念里是会上报一个异常。首先是CPU内部实现会报异常。最早学组成原理和汇编的时候,都是说CPU寄存器中有个表示除零异常的位。在L…

上位机图像处理和嵌入式模块部署(qmacvisual二维码识别)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 如果说条形码在商品上使用比较多的话,那么二维码识别是一个更加使用频繁的场合。为什么使用这样频繁,我想很多一部分原因来…

渗透测试——信息收集

信息收集 前言 信息收集是在做渗透时找尽可能的多的信息,为之后的渗透做铺垫。信息收集的方法有很多 比如,页面、真实的IP、域名/子域名、敏感目录/文件、端口探测、CMS指纹识别、操作系统识别 1. 页面信息收集 拿到域名后,从网站的url中…

Bee Mobile组件库重磅升级

Bee Mobile组件库重磅升级! 丰富强大的组件移动预览快速上手create-bee-mobile Bee Mobile组件库重磅升级! Bee Mobile组件库最新 v1.0.0 版本,支持最新的 React v18。 主页:Bee Mobile 丰富强大的组件 一共拥有50多个组件&…

基于javaweb+springboot开发的城市地名地址信息管理系统设计和实现

基于javaweb(springboot)城市地名地址信息管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…