使用 LangChain 构建聊天机器人 Web 应用

2024年8月28日 | 阅读 12 分钟

引言

在本教程中,我们将学习如何使用 LangChain 构建聊天机器人 Web 应用程序。LangChain 是一个 Python 模块。LangChain 用于使用标准语言构建应用程序。它提供了一个与其他文档进行通信的标准框架,并与各种 API 交互。LangChain 旨在易于使用,即使开发人员对语言结构不熟悉也能轻松上手。

大型语言模型 (LLM) 和人工智能技术已经发展到人类可以轻松与聊天机器人交互的水平,类似于人与人之间的交互。不久,聊天机器人将成为我们日常生活中重要的组成部分。它可以用于解决各种类型的问题。

什么是 LangChain?

LangChain 是一个开源工具。它使用 Python 编程语言编写。LangChain 可以使大型语言模型具有数据敏感性和可调解性。大多数商业 LLM,例如 GPT-3.5 和 GPT-4,在它们处理的信息方面存在局限性。例如,如今,ChatGPT 是一种热门的 AI 工具。但 ChatGPT 只能回答它以前见过的问题。因此,如果你给它任何未知编程或竞争性代码,那么 ChatGPT 将无法回答这些问题。LangChain 是一个框架。它可以协调一系列提示以实现所需的结果。

2021 年 9 月之后的一切仍待确定。这是 LangChain 解决的主要问题。无论是 Word 文档还是单个 PDF,我们都可以将文档输入到 LLM 中。输入文档后,我们可以获得类似人类的响应。它封装了向量数据库、聊天模型和嵌入函数等工具,使得仅使用 LangChain 即可轻松构建 AI 应用程序。LangChain 是一个 LLM 环境。

描述 LangChain 的工作原理。

LangChain 通过提供一套抽象来促进与语言结构的交互。LangChain 的工作原理如下:

Agent (代理)

LangChain 的主要组成部分是代理。代理执行特定任务:创建文本、编写内容、总结和回答问题。

链是一系列代理。它用于完成特定任务。例如,可以将一个链用于特定主题以编写长文本或直接回答问题。

记忆

记忆用于存储对代理调用的状态。这允许代理从过去的交互中学习并在未来做出更好的决策。因此,通过使用记忆,LangChain 可以提高其性能。

为什么我们使用 LangChain?

使用 LangChain 的原因有几个,如下所述:

1. 强大

LangChain 比人类强大得多。因此,我们使用 LangChain。

2. 易于使用

LangChain 非常易于使用。开发人员即使不完全了解它也可以轻松使用 LangChain。

3. 可扩展

LangChain 的重要特性之一是它具有可扩展性。因此,用户可以在 LangChain 框架中添加自己的链和代理。

4. 灵活

灵活性是 LangChain 的重要特性之一。灵活的框架可用于构建各种类型的应用程序。

LangChain 的安装

因此,要在 LangChain 中运行任何程序,您必须安装 LangChain 模块。您可以使用以下命令轻松安装 LangChain 模块:

!pip install langchain

LangChain 中有哪些模块?

LangChain 中有各种模块。通过使用这些模块,开发人员可以轻松构建应用程序。模块名称如下所示:

  1. 型号
  2. 内存
  3. Prompt
  4. 代理商
  5. 回调

现在我们简要讨论这些模块,如下所述:

1. 模型

模型是 LangChain 的模块之一。它指的是大型语言模型 (LLM)。这些 LLM 的特点是它们的大小。它们具有许多参数的神经网络,并经过大量匿名数据训练。科技公司已经生产了许多大型语言模型 (LLM),如下所示:

  1. Google 创建了 LaMDA。
  2. Google 还创建了 BERT。
  3. Google 创建了 PaLM。
  4. OpenAI 开发了 ChatGPT、GPT-3、GPT-3.5、GPT-4。
  5. Meta AI 开发了 LLaMA。
  6. OpenAI 开发的 GPT-4 比 GPT-3 更成功。

示例

现在我们给出 LangChain 在 Python 中的 Models 模块的一个示例。该示例现在如下所示:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

Q: What is the weather report for today?
A: Saturday, 10:00 am, Haze, 31°C

2. 记忆

LangChain 中的链和代理默认以无人值守模式运行。它们自行处理所有查询。然而,在某些应用程序(例如聊天机器人)中,存储短期和长期历史交互非常重要。因此,LangChain 需要记忆。记忆用于存储对代理调用的状态。

LangChain 中存在两种类型的记忆组件。首先,LangChain 提供了一项服务来管理和控制先前设计的对话。它是标准的且有用的,无论它们如何使用。其次,LangChain 提供了一种将这些电子设备集成到链中的简单方法。这使它们在任何情况下都具有通用性。

LangChain 中有几种实现记忆的方法,如下所述:

一、摘要记忆

摘要记忆存储任何历史的摘要。

二、缓冲记忆

缓冲记忆是最简单的记忆形式。它可以轻松地将以前的消息存储为缓冲区。

三、序列到序列记忆

序列到序列记忆用于表示对话的历史记录。这用于提高语言结构的性能,例如回答用户的问题。

示例

现在我们给出 LangChain 在 Python 中的 Memory 模块的一个示例。该示例现在如下所示:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

[HumanMessage(content='Hello coders!!', additional_kwargs={}),
 AIMessage(content='Welcome to JavaTpoint!!', additional_kwargs={})]

3. 提示

提示是 LangChain 的另一个重要模块。我们知道指令是我们给任何系统以根据我们的数据更具体地完善我们的答案的想法。它是一个非常强大的工具。提示报告基于用户输入、其他静态数据和固定字符串。提示用于许多应用程序,如下所述:

一、代码生成

提示用于代码生成系统。它可以轻松地从任何自然语言的描述生成代码。

二、聊天机器人

提示也用于创建聊天机器人。聊天机器人可以轻松理解用户的查询,然后根据此查询生成结果。

三、回答问题

提示用于回答用户的问题。它可以轻松地以正确和信息丰富的方式回答任何问题。

四、文章总结

提示也用于文章总结。它可以轻松地在一句话中总结一篇简短的文本。

示例 1

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

My favourite programming language is Python

示例 2

现在我们给出 LangChain 在 Python 中的 Prompt 模块的另一个示例。这里我们基本上设置了一个长模板,并检查 Prompt 模块是否可以在任何类型的模板中工作。该示例现在如下所示:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

I want to join a software company as a programmer.
What is the good role of a software company

4. 链

链是 LangChain 的另一个重要模块。链是一种将各种组件组合成统一应用程序的方式。例如,您可以创建一个使用用户输入的链。创建它用于使用 PromptTemplate。然后它将响应发送到 LLM。可以通过将多个链与其他产品组合来创建多个链。链可以轻松解决任何复杂的任务。

LLMChain 是广泛使用的平台之一。根据当前模型,它可以格式化两种类型的键:输入键和内存键(如果有)。之后,格式化的字符串发送到 LLM。然后由 LLM 创建返回对象。

调用模型后,可以采取步骤来调用模型。这在您希望将一个调用的输出用作另一个调用的输入时尤其重要。在此链序列中,每个链都有一个输入和一个输出。此输出用作下一个步骤的输入。此过程在链序列中连续运行。

示例 1

现在我们给出 LangChain 在 Python 中的 Chain 模块的一个示例。如果您设置了一个带有空白的提示模板,并设置了一个链来填充此空白。那么 Chain 模块将帮助通过填充空白来完成此提示模板。该示例现在如下所示:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

I want to join a software company as a programmer.
What is the good role of a software company

5. 代理

代理是 LangChain 的另一个重要模块。某些应用程序可能需要预先确定 LLM/其他工具,并根据用户输入存在不确定性。此类系统包括可访问各种设备的“代理”。代理可以访问设备的系统,然后根据用户输入决定应该调用这些工具中的哪些。代理可以使用多种工具。这可以轻松地使用上一个操作的输出来决定模块的下一个操作。它以上一个操作的输出作为下一个操作的输入。代理主要有两种类型:

a. 计划和执行代理 -

计划和执行代理首先决定如何完成一系列操作,然后执行所有工作而不更新计划。

b. 动作代理 -

动作代理用于在每个时间步使用上一个动作的输出来决定下一个动作。

示例 1

现在我们给出 LangChain 在 Python 中的 Agent 模块的一个示例。此模块有助于回答您的查询。为此,我们需要导入一些模块,包括 OpenAI、ConversationChain 和 ConversationBufferMemory。该示例现在如下所示:

输出

现在我们在 Python 中编译上述代码,并在成功编译后运行它。然后输出如下:

> Entering the new chain......
Prompt after formatting:
The following is a friendly conversation between people and AI. AI is talkative. It can provide a lot of unique content. If the AI does not know the answer to a question, it will say it doesn't.
Current conversation:
Human: Please tell me something about JavaTpoint.
AI:
> Finished chain.
 Sure! JavaTpoint offers many programming languages and technologies for people who want to learn and master. After checking the website constantly, I can confidently say that JavaTpoint has great content and features that make it the go-to place for programmers of all levels. Programming languages such as Java, Python, and C+ are well documented, with extensive tutorials, templates, and clear explanations to help develop the necessary skills. 

使用 LangChain 构建聊天机器人 Web 应用

通过本文,我们了解了 LangChain 的所有模块。我们还在这里学习了聊天机器人。现在我们需要使用 LangChain 构建一个聊天机器人 Web 应用程序。这个 Web 应用程序可以用于构建 YouTube 视频的脚本和标题。因此,首先我们需要安装一些模块才能使用 LangChain 构建这个 Web 应用程序。模块如下所示:

步骤 1

现在设置 OPENAI_API_KEY 环境变量的值。它被设置为您的 API 密钥。然后您需要创建一个 OpenAI 帐户以获取 API 代码。之后,您将获得您的 API 代码。环境变量用于存储此任务的配置结果。在这种情况下,环境变量存储在 API 密钥中。

必须将 API 密钥设置为环境变量,因为当您使用 API 时,它需要身份验证。通过将 API 密钥存储为环境变量,您可以安全轻松地访问代码而无需编码。此过程有助于将 API 密钥等敏感数据与数据中心分开。它还可以帮助降低泄露的风险。

现在我们编写程序代码来设置 OPENAI_API_KEY 环境变量的值。因此,代码现在如下所示:

步骤 2

在下面的代码中,第一行导入了“streamlit”模块。“streamlit”模块用于构建任何 Web 应用程序。然后我们将 Web 应用程序标题设置为“JavaTpoint”。第三行创建用户可以输入文本的文本输入字段。为了创建提示模板,我们使用了“PromptTemplate”类。它是用于创建提示的字符串。第一个标准现在用于创建 YouTube 视频的标题。第二个提示模板用于生成 YouTube 视频的脚本。“PromptTemplate”类的“input_variables”参数指定了提示模板中使用的变量。

各种方法用于收集用户输入。“wiki_research”变量用于存储来自维基百科的研究结果。“PromptTemplate”类的模板参数指定了提示模板的文本。

当前标题的模板是“YouTube 视频名称是 {concept}”。文本提示模板的模板是“使用维基百科研究的知识和信息,以标题‘{title}’创建一个漂亮的 YouTube 视频脚本:{wiki_research}”。

所以,现在我们给出以下代码:

步骤 3

对于 ConversationBufferMemory 类,我们创建了两个实例。此类存储用户和语言模型之间的对话历史记录。此信息可用于改善目标用户的语言理解,并创建更好、更集成的响应。“memoryP”对象存储名称的会话参数。memoryQ 对象存储文本通信缓冲区。

input_key 参数指定用于存储用户输入的变量。“memory_key”参数指定用于在模型中存储通信参数的键。

这里我们使用了 LLMChain 类。此类用于链接多个指令。然后代码创建了 LLMChain 类的两个实例。ChainP 对象用于根据用户输入创建列表。 “script_chainS”对象从新闻和维基百科搜索中生成脚本。

LLM 参数指定用于渲染文本的通用语言模型。prompt 参数指定用于渲染文本的提示。verbose 参数指定 LLMChain 对象是否打印有关其创建的信息。output_key 参数指定用于在模型中存储输出的键。

所以,现在我们给出以下代码:

步骤 4

在这里,我们构建了一个与维基百科 API 交互的界面。它用于从文本创建文章和维基百科研究,使用意义和教育构建文章,并在使用 Streamlit 创建的网页的扩展部分中呈现文章、文章和维基百科研究。因此,代码现在如下所示:

结论

因此,在本教程中,我们正在学习如何使用 LangChain 构建聊天机器人 Web 应用程序。LangChain 旨在易于使用,即使开发人员不熟悉语言结构。这里我们讨论了 LangChain 的所有模块。最后,我们分享了构建聊天机器人 Web 应用程序的分步过程。