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

news2024/9/29 21:24:36

作者: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='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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
$ 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.coloradmin.cn/o/1491437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试题】webpack的五大核心、构建流程、性能优化

【面试题】webpack的五大核心、webpack的构建流程、webpack的性能优化 webpack是什么?webpack的五大核心webpack的构建流程webpack性能优化 webpack是什么? js静态模块打包工具。 功能 将多个文件打包成更小的文件,(压缩)翻译 babal-loader es6进行降级兼容。 …

【pyinstaller打包记录】Linux系统打包可执行文件后,onnxruntime报警告(Init provider bridge failed)

简介 PyInstaller 是一个用于将 Python 程序打包成可执行文件(可执行程序)的工具。它能够将 Python 代码和其相关的依赖项(包括 Python 解释器、依赖的模块、库文件等)打包成一个独立的可执行文件,方便在不同环境中运行…

如何根据企业司法涉诉大数据合理规避风险?

在当前的商业环境中,企业司法涉诉的信息越来越成为衡量一家企业信誉和运营风险的重要标准。大数据时代的到来,让我们有了更加丰富的手段对这些信息进行挖掘与分析,从而对企业可能面临的风险进行预警。本文将探讨如何通过对企业司法涉诉的大数…

服务器硬件监控,保障系统稳健运行的关键策略

服务器硬件在运维中扮演着至关重要的角色,超过一半的网络中断是由硬件故障引起的,这使得硬件性能监控成为运维中不可或缺的一部分。对于一个组织或企业的信息技术基础设施而言,重要性不言而喻: 1. 安全性:服务器硬…

虚拟内存地址动静态库

前言 大家好我是jiantaoyab,这是我所总结作为学习的笔记第5篇,在这里分享给大家,还有一些书籍《[深入理解计算机系统》《计算机组成:结构化方法》《计算机体系结构:量化研究方法》《程序员的自我修养》,今天我们来了解程序的虚拟…

聚观早报 | 2024款腾势D9将发布;岚图汽车2月销量

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 3月2日消息 2024款腾势D9将发布 岚图汽车2月销量 苹果Vision Pro防汗新专利 真我12 Pro正式开售 Redmi K70/Pro…

wvp-gb28181-pro国标设备录像下载

点击【国标设备】,进入设备通道 每个通道右边都有对应的操作, 点击操作栏中的【设备录像】按钮 点击【设备录像】进入录像查看页面,选择要查看的日期即可对录像进行播放和下载 播放:双击录像名称 下载:点击下载按钮 下…

SpringBoot实现分页模糊查询

1. Navicat查询数据 Navicat中查询所有数据 SELECT * FROM sys_user;Navicat中查询前两条数据(俩种方式) SELECT * FROM sys_user LIMIT 2; //从0开始,第一个参数是起始位置即(pageNum-1)*pageSize,第二个参数是步长 SELECT * …

一文搞定Pytorch CUDA Toolkit与Driver的关系

1. 在我们使用Pytorch不同的版本时,有这样一个大致的对应关系,即:Pytorch版本CUDA Toolkit版本NVIDIA Driver 版本。 难点在于CUDA版本与Driver版本的关系,简单通过NVIDIA官网解决:CUDA Compatibility 这里既有关于Li…

JavaScript的`call`方法:实现函数间的调用!

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Golang 程序启动原理详解

一.编译 go源代码首先要通过 go build 编译为可执行文件,然后去机器上直接执行的,在 linux 平台上为 ELF 格式的可执行文件,linux 能直接执行这个文件,而编译阶段会经过编译器、汇编器、链接器三个过程最终生成可执行文件 编译器:*.go 源码通…

基于“xxx” Androidx平台的驱动及系统开发 之 触摸板篇

目录 一、基于全志 A133 Android10平台,适配1366x768 - ilitek2511触摸1、原理图分析2、驱动移植与适配3、补丁和资源文件 二、基于瑞芯微 RK3566 Android11平台,适配GT9XX触摸1、原理图分析2、补丁及资源文件 三、遇到的问题与解决1、基于amlogic Andro…

【Leetcode】1588.所有奇数长度子数组的和

题目描述 思路 题目要求我们求解所有奇数长度数组的和。若暴力循环求解,时间复杂度过高。所以,我们可以采用前缀和优化。 如上图输入arr数组,sum[i]用于计算arr数组中前i个数的和。(在程序中,先给sum[0]赋值,等于arr[0…

python.模块与包

1.模块是什么 本质上是一种python文件,以.py结尾,里面有类,函数,变量等,认为这是一个工具包,每个模块有不同的功能,导入后可以直接使用 2.模块的导入 方法1 import 模块名 使用&#xff1a…

LLM 模型量化推理速度评测

最近了解了下些常见的推理和加速方案: 1、量化方案: gptq、quantization、int8、int4、AWQ、Speculative Decoding、GGUF 2、Attention加速方案: atten的不同种类fused attention 3、内存层面: kv_cache策略、page_attention…

洛谷 P1083 [NOIP2012 提高组] 借教室(二分+差分)

题目链接: P1083 [NOIP2012 提高组] 借教室 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教…

YOLO系列中的“data.yaml”详解!

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、data.yaml介绍 YOLO系列中的data.yaml文件包含了YOLO系列模型运行所需要的数据集路径、数据集中的类别数及标签。数据集路径可以用绝对路径也可以…

计算机系统缺少cv100.dll文件解决方法(最新)

cv100.dll 是一个Windows操作系统中的动态链接库(DLL)文件。DLL文件是包含可由多个程序共享的代码和数据的模块,以减少磁盘空间占用并提高系统性能。根据收集到的信息,cv100.dll 文件可能与图像处理、计算机视觉相关的功能有关。 …

#WEB前端(JS基础语法)

1.实验: 2.IDE:VSCODE 3.记录: (1)数据类型 var,let,const var,let声明变量,const声明常量。var声明的变量具有函数作用域,let声明的变量具有块级作用域,let跟安全更…

鸿蒙实战开发:数据交互【RPC连接】

概述 本示例展示了同一设备中前后台的数据交互,用户前台选择相应的商品与数目,后台计算出结果,回传给前台展示。 样例展示 基础信息 RPC连接 介绍 本示例使用[ohos.rpc]相关接口,实现了一个前台选择商品和数目,后台…