LangChain系列教程:介绍和入门

大型语言模型(LLMs)在2020年OpenAI发布GPT-3后进入了世界舞台[1]。从那时起,它们在人气上稳步增长。

直到2022年底。对LLMs和更广泛的生成式人工智能学科的兴趣飙升。这可能是因为LLMs方面不断取得重大进展的持续上升势头。

我们看到了关于谷歌的"有思想"的LaMDA聊天机器人的戏剧性新闻。第一个高性能的开源LLM,名为BLOOM,被发布。OpenAI发布了他们的下一代文本嵌入模型以及"GPT-3.5"模型的下一代。

在LLM领域取得了这些巨大进展后,OpenAI发布了ChatGPT,将LLMs推上了舞台。

LangChain也在大约同一时间出现。它的创建者Harrison Chase于2022年10月底提交了第一个版本。在被卷入LLM浪潮之前,只有短短几个月的开发时间。

尽管该库仍处于早期阶段,但已经充满了围绕LLMs核心构建令人惊叹的工具所需的令人难以置信的功能。在本文中,我们将介绍该库,并从LangChain提供的最简单的组件开始------LLMs。

LangChain

在其核心,LangChain是围绕LLMs构建的框架。我们可以将其用于聊天机器人、生成式问答(GQA)、摘要等多种用途。

该库的核心思想是我们可以将不同的组件"链"在一起,以创建更高级的LLMs周围用例。链可以由来自多个模块的多个组件组成:

  • 提示模板:提示模板是不同类型提示的模板,如"聊天机器人"风格的模板,ELI5问答等。

  • LLMs:大型语言模型,如GPT-3、BLOOM等。

  • 代理:代理使用LLMs来决定应采取哪些操作。可以使用工具如Web搜索或计算器,所有这些都被封装成一个逻辑操作的循环。

  • 内存:短期内存,长期内存。

在LangChain手册的后续章节中,我们将更详细地深入探讨这些内容。

现在,我们将从提示模板和LLMs的基础开始。我们还将探索库中提供的两个LLM选项,使用Hugging Face Hub或OpenAI的模型。

我们的第一个提示模板

输入LLMs的提示通常以不同方式结构化,以便获得不同的结果。对于问答,我们可以采取用户的问题并将其重新格式化为不同的问答风格,如传统问答、答案的项目符号列表,甚至是与给定问题相关的问题摘要。

在LangChain中创建提示

让我们创建一个简单的问答提示模板。首先,我们需要安装langchain库。

diff 复制代码
!pip install langchain

从这里,我们导入PromptTemplate类并像这样初始化一个模板:

ini 复制代码
from langchain import PromptTemplate

template = """Question: {question}

Answer: """
prompt = PromptTemplate(
        template=template,
    input_variables=['question']
)

# user question
question = "Which NFL team won the Super Bowl in the 2010 season?"

使用给定的问题和这些提示模板,我们将得到:

问题:哪支NFL球队在2010赛季赢得了超级碗?答案:

目前,这就是我们需要的一切。我们将在Hugging Face Hub和OpenAI LLM生成中都使用相同的提示模板。

Hugging Face Hub LLM

LangChain中的Hugging Face Hub端点连接到Hugging Face Hub并通过其免费推理端点运行模型。我们需要一个Hugging Face账户和API密钥来使用这些端点。

一旦您获得了API密钥,我们将其添加到HUGGINGFACEHUB_API_TOKEN环境变量中。我们可以使用Python来完成这个步骤,如下所示:

lua 复制代码
import os

os.environ['HUGGINGFACEHUB_API_TOKEN'] = 'HF_API_KEY'

接下来,我们必须通过Pip安装huggingface_hub库。

diff 复制代码
!pip install huggingface_hub

现在我们可以使用Hub模型生成文本。我们将使用google/flan-t5-x1模型。

默认的Hugging Face Hub推理API不使用专门的硬件,因此可能会较慢。它们也不适用于运行更大的模型,比如bigscience/bloom-560m或google/flan-t5-xxl(注意xxl与xl的区别)。

In[3]:

ini 复制代码
from langchain import HuggingFaceHub, LLMChain

# initialize Hub LLM
hub_llm = HuggingFaceHub(
        repo_id='google/flan-t5-xl',
    model_kwargs={'temperature':1e-10}
)

# create prompt template > LLM chain
llm_chain = LLMChain(
    prompt=prompt,
    llm=hub_llm
)

# ask the user question about NFL 2010
print(llm_chain.run(question))

Out[3]:

复制代码
green bay packers

对于这个问题,我们得到了正确的答案是"green bay packers"。

提出多个问题

如果我们想提出多个问题,可以尝试两种方法:

  1. 使用generate方法逐一迭代所有问题并逐一回答它们。
  2. 将所有问题放入单个提示中供LLM使用;这只适用于更高级的LLMs。

从选项(1)开始,让我们看看如何使用generate方法:

In[4]:

ini 复制代码
qs = [
    {'question': "Which NFL team won the Super Bowl in the 2010 season?"},
    {'question': "If I am 6 ft 4 inches, how tall am I in centimeters?"},
    {'question': "Who was the 12th person on the moon?"},
    {'question': "How many eyes does a blade of grass have?"}
]
res = llm_chain.generate(qs)
res

Out[4]:

css 复制代码
LLMResult(generations=[[Generation(text='green bay packers', generation_info=None)], [Generation(text='184', generation_info=None)], [Generation(text='john glenn', generation_info=None)], [Generation(text='one', generation_info=None)]], llm_output=None)

在这里,除了第一个问题之外,我们得到的结果都不好。这只是所使用的LLM的一个限制。

如果模型不能准确回答单个问题,将所有查询都分组到单个提示中不太可能奏效。然而,出于实验的目的,让我们尝试一下。

In[6]:

ini 复制代码
multi_template = """Answer the following questions one at a time.

Questions:
{questions}

Answers:
"""
long_prompt = PromptTemplate(template=multi_template, input_variables=["questions"])

llm_chain = LLMChain(
    prompt=long_prompt,
    llm=flan_t5
)

qs_str = (
    "Which NFL team won the Super Bowl in the 2010 season?\n" +
    "If I am 6 ft 4 inches, how tall am I in centimeters?\n" +
    "Who was the 12th person on the moon?" +
    "How many eyes does a blade of grass have?"
)

print(llm_chain.run(qs_str))

Out[6]:

css 复制代码
If I am 6 ft 4 inches, how tall am I in centimeters

如预期的那样,这些结果并不有帮助。我们稍后会看到,更强大的LLMs可以做到这一点。

OpenAI LLMs

LangChain中的OpenAI端点可以直接连接到OpenAI,也可以通过Azure连接。我们需要一个OpenAI账户和API密钥来使用这些端点。

一旦您拥有API密钥,我们可以将其添加到OPENAI_API_TOKEN环境变量中。我们可以使用Python来完成这个操作,如下所示:

lua 复制代码
import os

os.environ['OPENAI_API_TOKEN'] = 'OPENAI_API_KEY'

接下来,我们必须通过Pip安装openai库。

diff 复制代码
!pip install openai

现在我们可以使用OpenAI的GPT-3生成(或完成)模型来生成文本。我们将使用text-davinci-003模型。

ini 复制代码
from langchain.llms import OpenAI

davinci = OpenAI(model_name='text-davinci-003')

或者,如果您正在通过Azure使用OpenAI,您可以执行以下操作:

ini 复制代码
from langchain.llms import AzureOpenAI

llm = AzureOpenAI(
    deployment_name="your-azure-deployment", 
    model_name="text-davinci-003"
)

我们将继续使用与之前Hugging Face示例相同的简单问答提示模板。唯一的变化是现在我们传递给OpenAI的LLM是davinci:

In[15]:

ini 复制代码
llm_chain = LLMChain(
    prompt=prompt,
    llm=davinci
)

print(llm_chain.run(question))

Out[15]:

scss 复制代码
 The Green Bay Packers won the Super Bowl in the 2010 season.

不出所料,我们得到了正确的答案。我们可以使用generate方法来处理多个问题,方法如下:

In[16]:

ini 复制代码
qs = [
    {'question': "Which NFL team won the Super Bowl in the 2010 season?"},
    {'question': "If I am 6 ft 4 inches, how tall am I in centimeters?"},
    {'question': "Who was the 12th person on the moon?"},
    {'question': "How many eyes does a blade of grass have?"}
]
llm_chain.generate(qs)

Out[16]:

vbnet 复制代码
LLMResult(generations=[[Generation(text=' The Green Bay Packer

我们的大部分结果是正确的或具有一定的真实度。该模型无疑比google/flan-t5-xl模型表现得更好。与之前一样,让我们尝试一次性将所有问题输入模型。

In[17]:

ini 复制代码
llm_chain = LLMChain(
    prompt=long_prompt,
    llm=davinci
)

qs_str = (
    "Which NFL team won the Super Bowl in the 2010 season?\n" +
    "If I am 6 ft 4 inches, how tall am I in centimeters?\n" +
    "Who was the 12th person on the moon?" +
    "How many eyes does a blade of grass have?"
)

print(llm_chain.run(qs_str))

Out[17]:

erlang 复制代码
The New Orleans Saints won the Super Bowl in the 2010 season.
6 ft 4 inches is 193 centimeters.
The 12th person on the moon was Harrison Schmitt.
A blade of grass does not have eyes.

当我们不断重新运行查询时,模型偶尔会出错,但在其他时候也会成功全部正确回答。

这就是我们对LangChain的介绍的全部内容------这是一个允许我们构建更高级应用程序的库,这些应用程序围绕着像OpenAI的GPT-3模型或通过Hugging Face提供的开源替代品等LLM展开。

正如前面提到的,LangChain可以做的远不止我们在这里展示的内容。我们将在接下来的文章中介绍这些其他功能。

相关推荐
大厂码农老A2 小时前
3天实现"睡后收入"—— Cursor & Skills打造"全自动出海"Agent
人工智能·aigc·ai编程
树獭叔叔3 小时前
OpenClaw Agents 系统:多代理架构与智能编排的完整技术解析
后端·aigc·openai
树獭叔叔5 小时前
OpenClaw Workspace 文件完整指南:从文件到 AI 行为的完整链路
后端·aigc·openai
德育处主任6 小时前
『NAS』一句话生成网页,在NAS部署UPage
前端·javascript·aigc
刀法如飞7 小时前
AI时代,人人都是需求描述工程师
程序员·aigc·ai编程·需求文档
饼干哥哥18 小时前
这43个OpenClaw Skill,直接干翻跨境电商
aigc
饼干哥哥19 小时前
把n8n逼死后,Openclaw重构了跨境电商的内容创作流程
aigc
刀法如飞19 小时前
AI时代,程序员都应该是需求描述工程师
程序员·aigc·ai编程·需求文档
小兵张健19 小时前
白嫖党的至暗时期
人工智能·chatgpt·aigc
该用户已不存在1 天前
除了OpenClaw还有谁?五款安全且高效的开源AI智能体
人工智能·aigc·ai编程