likes
comments
collection
share

LangChain教程:构建基于GPT的应用程序

作者站长头像
站长
· 阅读数 3

ChatGPT和GPT-4的成功表明,通过使用强化学习训练的大型语言模型,可以构建可扩展且功能强大的自然语言处理应用程序。

然而,响应的有用性取决于提示信息,这导致用户探索了提示工程领域。此外,大多数现实世界的自然语言处理用例需要比单个ChatGPT会话更复杂的功能。这就是像LangChain这样的库可以发挥作用的地方!

LangChain是一个Python库,帮助您利用大型语言模型构建定制的自然语言处理应用程序。

在本指南中,我们将探讨LangChain是什么,以及您可以使用它构建什么。我们还将通过使用LangChain构建一个简单的问答应用程序来入门。

让我们开始吧!

LangChain是什么?

LangChain是由Harrison Chase创建的Python库,提供了开箱即用的支持,用于使用LLM(Large Language Models)构建自然语言处理应用程序。您可以连接到各种数据和计算源,并构建在特定领域数据源、私有存储库等上执行自然语言处理任务的应用程序。

截至撰写本文时(2023年3月),LangChain的GitHub存储库拥有超过14,000颗星星,并有来自世界各地的270多名贡献者。

LangChain教程:构建基于GPT的应用程序

使用LangChain可以构建的有趣应用程序包括(但不限于):

  • 聊天机器人

  • 针对特定领域的摘要和问答

  • 查询数据库以获取信息并进行处理的应用程序

  • 解决数学和推理谜题等特定任务的代理程序

LangChain模块概述

接下来,让我们看一下LangChain中的一些模块:

LangChain教程:构建基于GPT的应用程序

LLM(Large Language Models)

LLM是LangChain的基本组件。它实际上是围绕大型语言模型的封装,可以利用特定大型语言模型的功能和能力。

Chains(链式调用)

如前所述,LLM是LangChain中的基本单元。然而,正如LangChain的名字所暗示的那样,您可以根据特定任务来链式调用LLM。

例如,您可能需要从特定URL获取数据,对返回的文本进行

摘要,并使用生成的摘要回答问题。

链式调用也可以很简单。您可能需要读取用户输入,然后用它构建提示信息。然后可以用该提示信息生成响应。

LangChain教程:构建基于GPT的应用程序

提示(Prompts)

提示是任何自然语言处理应用程序的核心。即使在ChatGPT会话中,答案的帮助程度也取决于提示信息。为此,LangChain提供了可以用来格式化输入和执行其他实用功能的提示模板。

文档加载器和工具(Document Loaders and Utils)

LangChain的文档加载器和工具模块方便连接到数据源和计算源。

假设您有一个大型经济学文本语料库,希望构建一个自然语言处理应用程序。您的语料库可能包含各种文本文件、PDF文档、HTML网页、图像等。目前,文档加载器利用Python库Unstructured将这些原始数据源转换为可以进行处理的文本。

工具模块提供了Bash和Python解释器会话等功能。这对于需要直接与底层系统进行交互的应用程序很有用。或者在需要计算特定数学量或解决问题时,需要代码片段,而不是仅计算一次答案。

代理程序(Agents)

我们提到“链式调用”可以帮助将一系列LLM调用链接在一起。然而,在某些任务中,调用的顺序通常不确定。下一步很可能取决于用户输入和先前步骤的响应。

对于这种类型的应用程序,LangChain库提供了“代理程序”,可以根据沿途的输入采取动作,而不是固定的确定性顺序。

除上述之外,LangChain还提供与向量数据库的集成,并具有在LLM调用之间保持状态的内存功能等等。

使用LangChain构建问答应用程序

现在我们对LangChain有了一定的了解,让我们使用LangChain构建一个问答应用程序,以下是五个简单步骤:

第1步 - 设置开发环境

在编码之前,让我们设置开发环境。我假设您已经在工作环境中安装了Python。

您可以使用pip安装LangChain库:

pip install langchain

由于我们将使用OpenAI的语言模型,我们还需要安装OpenAI SDK:

pip install openai

第2步 - 将OPENAI_API_KEY设置为环境变量

接下来,登录您的OpenAI帐户。导航到帐户设置 > 查看API密钥。生成一个密钥并复制它。

在您的Python脚本中,使用os模块并利用环境变量字典os.environ。将"OPENAI_API_KEY"设置为您刚刚复制的密钥:

import osos.environ["OPENAI_API_KEY"] = "your-api-key-here"

第3步 - 使用LangChain进行简单的LLM调用

现在我们已经安装了所需的库,让我们看看如何使用LangChain进行简单的LLM调用。

为此,让我们导入OpenAI包装器。在本例中,我们将使用text-davinci-003模型:

from langchain.llms import OpenAIllm = OpenAI(model_name="text-davinci-003")

“text-davinci-003:具有更好的质量、更长的输出和一致的指令遵循性,可以执行任何语言任务,优于curie、babbage或ada模型。还支持在文本中插入补全。” - OpenAI文档

让我们定义一个问题字符串并生成一个回答:

question = "2023年学习的最佳编程语言是什么?"print(llm(question))
输出 >>很难预测2023年最受欢迎的编程语言是哪个。然而,当今最受欢迎的编程语言是JavaScript、Python、Java、C++和C#,所以它们很可能在可预见的未来保持受欢迎。此外,像Rust、Go和TypeScript等较新的语言正在赢得关注,可能在未来成为受欢迎的选择。

第4步 - 创建提示模板

让我们提出另一个问题,关于学习一门新编程语言的顶级资源,比如Golang:

question = "2023年学习Golang的前4个资源是什么?"print(llm(question))
输出 >>1. The Go Programming Language by Alan A. A. Donovan and Brian W. Kernighan2. Go in Action by William Kennedy, Brian Ketelsen and Erik St. Martin3. Learn Go Programming by John Hoover4. Introducing Go: Build Reliable, Scalable Programs by Caleb Doxsey

虽然这对初学者来说效果不错,

但是当我们试图整理一份学习多种编程语言和技术栈的资源清单时,它很快变得重复。

这就是提示模板发挥作用的地方。您可以创建一个模板,可以使用一个或多个输入变量进行格式化。

我们可以创建一个简单的模板来获取学习任何技术栈的前k个资源。在这里,我们使用"k"和"this"作为输入变量:

from langchain import PromptTemplatetemplate = "2023年学习{k}的前{k}个资源是什么?"prompt = PromptTemplate(template=template, input_variables=['k', 'this'])

第5步 - 运行我们的第一个LLM链

现在我们有了一个LLM和一个可以在多个LLM调用中重复使用的提示模板。

llm = OpenAI(model_name="text-davinci-003")prompt = PromptTemplate(template=template, input_variables=['k', 'this'])

让我们继续创建一个LLMChain:

from langchain import LLMChainchain = LLMChain(llm=llm, prompt=prompt)

现在,您可以将输入作为字典传入,并运行LLM链,如下所示:

input = {'k': 3, 'this': 'Rust'}print(chain.run(input))
输出 >>1. Rust By Example - Rust By Example是学习Rust的一份很好的资源,它提供了一系列交互式练习,教你如何使用该语言及其特性。2. Rust Book - 官方的Rust Book是该语言的全面指南,从基础知识到更高级的主题。3. Rustlings - Rustlings是快速学习Rust的好方法,它提供一系列小练习,帮助你逐步学习该语言。

总结

这就是全部内容!您现在知道如何使用LangChain构建一个简单的问答应用程序。希望您对LangChain的功能有了初步了解。作为下一步,尝试探索LangChain以构建更有趣的应用程序。祝编码愉快!

【微信公号:H5开讲啦】

LangChain教程:构建基于GPT的应用程序