使用 LangChain 构建聊天机器人

在本教程中,我们将学习如何使用 LangChain 构建 Chatbot Webapp。LangChain是一个Python模块。LangChain用于使用标准语言构建应用程序。它为其他文档的通信标准提供了框架,并与各种 API 进行交互。LangChain 的设计宗旨是易于使用,即使开发人员需要更加熟悉语言结构。

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

什么是LangChain?
LangChain是一个开源工具。它是用Python编程语言编写的。LangChain可以使大规模语言模型变得数据敏感和中介。大多数商业法学硕士(例如 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的主要组成部分是Agent。代理正在执行特定任务:创建文本、编写内容、摘要和回答问题。

Chain链:
链是一串代理。它用于完成特定任务。例如,可以在特定主题上使用字符串来编写长文本或回答问题。

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

为什么我们使用LangChain?
使用 LangChain 有几个原因,如下所述 -
1、功能强大:
浪链比人类强大得多。所以,我们使用了LangChain。

2. 易于使用:
LangChain非常容易使用。开发者在不正确了解LangChain的情况下也可以轻松使用LangChain。

3、可扩展:
浪链的重要特点之一就是可扩展。因此,用户可以在LangChain的框架中添加自己的链和代理。

4、灵活:
灵活性是浪链的重要特点之一。灵活的框架可用于构建各种类型的应用程序。

安装
pip install langchain

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

  1. Models
  2. Memory
  3. Prompt
  4. Chain
  5. Agent
  6. Call Backs

现在,我们将简要讨论这些模块,具体如下

1.Model模型
模型是 LangChain 的模块之一。它指的是大型语言模块(LLM)。它们的大小是这些 LLM 的特征。它们拥有参数众多的神经网络,并在大量匿名数据的基础上进行训练。这家科技公司已经生产了多个大型语言模块(LLM),具体如下

  • 谷歌创建了 LaMDA。
  • 谷歌还创建了 BERT。
  • 谷歌创建了 PaLM。
  • OpenAI 开发了 ChatGPT、GPT 3、GPT 3.5 和 GPT 4。
  • Meta AI 开发了 LLaMA。
  • OpenAI 开发了 GPT 4,比 GPT 3 更为成功。

现在我们以 Python 中的 LangChain 模块为例。示例如下

from langchain.llms import OpenAI  
import os  
   
os.environ['OPENAI_API_KEY'] = 'Enter your openAI API key'  
model = OpenAI(temperature=0.8)  
   
p = model("Please Tell me the weather report")  
   
print(p)  

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

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

2.记忆
LangChain 中的链和代理默认以无人值守模式运行。它们自行处理所有查询。但是,在聊天机器人等一些应用中,存储短期和长期的过往交互非常重要。因此,LangChain 需要内存。内存用于存储与代理的通话状态。

LangChain 中有两类记忆内存组件。

  • 首先,LangChain 提供了一项服务,用于管理和控制所设计的先前会话。无论如何使用,它都是标准且有用的。
  • 其次,LangChain 提供了将这些电子设备集成到链中的简便方法。这使得它们在任何情况下都能发挥作用。

在 LangChain 中,有几种实现内存的方法,下面将一一介绍。

I.记忆摘要Summary Memory:
摘要存储器存储任何历史记录的摘要。

II.缓冲存储器Buffer Memory:
缓冲存储器是最简单的存储器形式。它可以轻松地将以前的信息作为缓冲存储器存储起来。

III.序列到序列存储器Sequence to Sequence Memory:
序列到序列内存用于表示对话的历史。这可用于提高语言构造的性能,如回答用户的问题。

现在我们以 Python 中的 LangChain 内存模块为例。示例如下

from langchain.memory import ChatMessageHistory  
  
h = ChatMessageHistory()  
h.add_user_message("Hello coders!!")  
  
h.add_ai_message(
"Welcome to JavaTpoint!!")  
h.messages  

输出:
现在我们用 Python 编译上述代码,编译成功后运行它。输出结果如下
[HumanMessage(content='Hello coders!!', additional_kwargs={}),
 AIMessage(content='Welcome to JavaTpoint!!', additional_kwargs={})]

3.提示
提示是 LangChain 的另一个重要模块。我们知道,指令是我们给任何系统的想法,以便根据我们的数据更有针对性地完善我们的答案。它是一个非常强大的工具。提示报告基于用户输入、其他静态数据和固定字符串。

提示在许多应用中都有使用,下面将对此进行讨论:

I.代码生成:
提示符用于代码生成系统。它可以根据任何自然语言的描述轻松生成代码。

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

III.回答问题
提示器用于回答用户的问题。它能以正确、翔实的方式轻松回答任何问题。

IV.总结文章:
提示语还可用于任何文章的摘要。它可以用一句话轻松概括一篇简短的文章。

from langchain import PromptTemplate  
   
temp = "My favourite programming language is {name}"  
   
prompt = PromptTemplate(input_variables=[
"name"], temp = temp)  
exp = prompt.format(name=
"Python")  
   
print(exp)  

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

My favourite programming language is Python

现在我们再来看一个 Python 中 LangChain 的 Prompt 模块的例子。在这里,我们基本上设置了一个长模板,并检查 prompt 模块是否可以在任何类型的模板中工作。示例如下

from langchain import PromptTemplate  
  
template = ""
I want to join a software company as a programmer. 
What is the good role of a{product}? 
"""  
prompt = PromptTemplate(  
    input_variables=[
"product"],  
    template=template,  
)  
prompt.format(product=
"software company")  

现在我们在 Python 中编译上述代码,编译成功后运行它。输出结果如下
I want to join a software company as a programmer.
What is the good role of a software company

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

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

调用模型后,可以采取措施调用模型。当您想将一个调用的输出作为另一个调用的输入时,这一点尤为重要。在这个链序列中,每个链都有一个输入和一个输出。该输出被用作下一步的输入。这一过程在链序列中持续运行。

现在我们以 Python 中的 LangChain 的 Chain 模块为例。如果您设置了一个带有黑色空格的提示模板,并设置了一个链来填补空白。那么链模块就可以帮助完成这个提示模板的空白填充。示例如下

from langchain.chat_models import ChatOpenAI  
from langchain.prompts.chat import (  
    ChatPromptTemplate,  
    HumanMessagePromptTemplate,  
)  
human_message_prompt = HumanMessagePromptTemplate(  
        prompt=PromptTemplate(template=" I want to join a software company as a programmer. What is the good role of a{name}?",  
            input_variables=[
"name"],  
        )  
    )  
chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt])  
chat = ChatOpenAI(temperature=0.7)  
  
chain = LLMChain(llm=chat, prompt=chat_prompt_template)  
print(chain.run(
"software company "))  

现在我们在 Python 中编译上述代码,编译成功后运行它。输出结果如下
I want to join a software company as a programmer.
What is the good role of a software company

5. Agent:
代理是 LangChain 的另一个重要模块。有些应用可能需要根据用户输入预先确定 LLM/其他工具和不确定性。这类系统包括可以访问各种设备的 "代理"。代理可以访问设备系统,然后根据用户输入决定调用其中的哪些工具。代理可以使用多种工具。它可以利用前一个动作的输出轻松决定模块的下一个动作。它获取前一个操作的输出,然后将其作为下一个操作的输入。

代理主要有以下两种类型
a.计划和执行代理--
计划和执行代理首先决定如何完成一组操作,然后在不更新计划的情况下完成所有工作。

b.行动代理
行动代理用于在每个时间步中利用前一个行动的输出决定下一个行动。

示例 1:
现在我们以 Python 中的 LangChain 代理模块为例。该模块可以帮助回答您的问题。为此,我们需要导入一些模块,即 OpenAI、ConversationChain 和 ConversationBufferMemory。示例如下

from langchain.llms import OpenAI  
from langchain.chains import ConversationChain  
from langchain.memory import ConversationBufferMemory  
import os  
os.environ['OPENAI_API_KEY'] = 'Please enter your api key here'  
   
model = OpenAI(temperature=0.6)  
chain = ConversationChain(llm=model,  
    verbose=True,  
    memory=ConversationBufferMemory()  
    )  
   
print(chain.predict(input="Please tell me something about JavaTpoint"))  


现在我们在 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 构建一个聊天机器人 Webapp。该 Webapp 可用于创建 YouTube 视频的脚本和标题。因此,首先我们需要安装一些模块,以便使用 LangChain 构建该 Web 应用程序。模块如下

! pip install streamlit   
! pip install langchain  
! pip install OpenAI  
! pip install WikipediaAPIWrapper  

步骤 1:
现在设置 OPENAI_API_KEY 环境变量的值。设置为您的 API 密钥。然后,你需要创建一个 OpenAI 账户来获取 API 代码。之后,你将获得 API 代码。环境变量用于存储此任务的配置结果。在本例中,环境变量存储在 API 密钥中。

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

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

import os  
os.environ['OPENAI_API_KEY'] = "Please enter your API key here"  

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

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

当前标题的模板是 "YouTube 视频的名称是{概念}"。文本提示模板的模板是 "使用维基百科研究中的知识和信息,在标题"{title}"下创建一个精美的 YouTube 视频脚本:{wiki_research}"。

因此,现在我们给出如下代码

import streamlit as st  
st.title('JavaTpoint')  
input_text = st.text_input('Please enter your text here: ')  
from langchain.prompts import PromptTemplate  
title_template = PromptTemplate(  
    input_variables = ['concept'],  
    template=' Name of the YouTube video is {concept}'  
)  
script_template = PromptTemplate(  
    input_variables = ['title', 'wiki_research'],  
  template=''''' Create a beautiful YouTube video script under the title "{title}" using knowledge and information from Wikipedia research: {wiki_research}'''  
)  

步骤 3
对于 ConversationBufferMemory 类,我们创建了两个实例。该类存储用户与语言模型之间的对话历史。这些信息可用于提高目标用户的语言理解能力,并创建更好、更综合的回复。memoryP "对象存储名称的会话参数。memoryQ "对象存储文本通信缓冲区。

input_key 参数指定用于存储用户输入的变量。memory_key "参数指定用于在模型中存储通信参数的密钥。

这里我们使用了 LLMChain 类。该类用于链接多条指令。代码会创建两个 LLMChain 类的实例。ChainP 对象用于根据用户输入创建列表。script_chainS "对象用于通过新闻和维基百科搜索生成脚本。

LLM 参数指定用于渲染文本的广义语言模型。prompt 参数指定用于渲染文本的提示符。verbose 参数指定 LLMChain 对象是否打印创建信息。output_key 参数指定用于在模型中存储输出的密钥。

现在我们给出如下代码

memoryP = ConversationBufferMemory(input_key='concept', memory_key='chat_history')  
memoryQ = ConversationBufferMemory(input_key='title', memory_key='chat_history')  
model = OpenAI(temperature=0.9)  
chainP = LLMChain(llm=model, prompt=title_template, verbose=True, output_key='title', memory=memoryT)  
chainQ = LLMChain(llm=model, prompt=script_template, verbose=True, output_key='script', memory=memoryS)  

第 4 步
在这里,我们建立了一个与维基百科应用程序接口交互的界面。它用于从文本中创建文章和维基百科研究报告,使用意义和教育构建文章,并在使用 Streamlit 创建的网页的扩展部分展示文章、文章和维基百科研究报告。代码如下

wikipedia = WikipediaAPIWrapper()  
if input_text:  
    title = chainT.run(input_text)  
    wiki_research = wikipedia.run(input_text)  
    script = chainS.run(title=title, wiki_research=w_research)  
    qp.write(title)  
    qp.write(script)  
    with st.expander('Wikipedia-based exploration: '):  
        qp.info(w_research)  


总结:
在本教程中,我们将学习如何使用 LangChain 构建聊天机器人 Webapp。即使开发人员不熟悉语言结构,LangChain 也能轻松使用。在这里,我们讨论了 LangChain 的所有模块。最后,我们将分享构建聊天机器人 Webapp 的分步步骤。