使用 LangChain 简化使用 AI 大语言模型 (LLM) 的应用程序的创建

572 阅读8分钟

image-20230806142850958

使用中途生成

LangChain是一个框架,旨在简化使用大型语言模型(LLM)创建应用程序的过程。它提供了许多功能,可以更轻松地使用LLM,例如:

  • 用于加载和使用LLM的简单API
  • 许多开箱即用的预训练LLM
  • 用于微调LLM的各种工具
  • 支持各种任务,例如聊天机器人、问答和文本生成

LangChain是开源的,可在GitHubgithub.com/langchain-a… LLM 构建应用程序的流行框架,它被许多公司和组织使用。

以下是使用 LangChain 的一些好处:

  • LangChain提供了一个简单的API来加载和使用LLM,这使得LLM更容易入门。
  • 它提供了许多预先训练的LLM.LangChain提供了许多可以开箱即用的预训练LLM。这节省了培训过程中的时间和精力。
  • LangChain提供了各种用于微调LLM的工具,允许您针对特定任务微调LLM。
  • 它支持各种任务。LangChain支持各种任务,例如聊天机器人,问答和文本生成。这使其成为使用 LLM 构建应用程序的通用框架。

如果你有兴趣使用LLM,我建议你看看LangChain。它是一个功能强大的框架,可以更轻松地开始使用LLM并使用它们构建应用程序。让我们回顾一些其他细节。

用于加载和使用LLM的简单API

LangChain提供了一个简单的API来加载和使用LLM。此 API 使您可以轻松开始使用 LLM,即使您不熟悉它们。例如,您可以使用一行代码加载LLM:

model = langchain.load("bert-base-uncased")

加载LLM后,您可以使用它来生成文本,翻译语言,编写不同类型的创意内容,并以信息丰富的方式回答您的问题。

使用一些预先训练的LLM

LangChain提供了许多预先训练的LLM,可以开箱即用。这节省了培训过程中的时间和精力。例如,LangChain为各种任务提供预先训练的LLM,例如:

  • 聊天机器人
  • 问答
  • 文本生成

LangChain提供了多种工具来微调LLM。这允许您针对特定任务微调 LLM。例如,您可以针对特定聊天机器人应用程序或特定问答数据集微调 LLM。

道德黑客和程序员示例

让我们看一个例子。下面的代码也可以在我的一个 GitHub 存储库中找到。您也可以在Google Colab中使用此代码。

首先安装,所需的库与pip install -q transformers einops accelerate langchain bitsandbytes xformers

同时运行该命令。(NVIDIA 系統管理介面)命令是 NVIDIA 提供的一套工具,用於管理和監控 NVIDIA GPU 設備。此工具提供有关系统中安装的 GPU 的详细信息,例如:nvidia-smi``nvidia-smi

  1. GPU 名称和 ID。
  2. 图形处理能力。
  3. 内存使用情况。
  4. 温度。
  5. 驱动程序版本。
  6. 电源使用情况。
  7. 运行 GPU 进程。
  8. 以及许多其他细节。

例如,当您简单地在终端中运行时,您将获得当前 GPU 状态的快照,包括 GPU ID、利用率、内存使用情况、温度、功耗等。nvidia-smi

您还可以与各种标志和选项一起使用,以查询特定信息或更新 GPU 设置。例如,提供更详细的 GPU 状态报告。nvidia-smi``nvidia-smi -q

对于那些使用 NVIDIA GPU 的人来说,这是一个非常有用的工具,特别是对于深度学习、科学计算或任何其他 GPU 密集型操作等任务,可以监控和管理其 GPU 的运行状况和性能。

然后让我们定义模型并使用HuggingFacePipeline

from langchain import HuggingFacePipeline
from transformers import AutoTokenizer, pipeline
import torch

model = "tiiuae/falcon-7b-instruct" # You can also use the larger model falcon-40b-instruct

tokenizer = AutoTokenizer.from_pretrained(model)

pipeline = pipeline(
    "text-generation", #task
    model=model,
    tokenizer=tokenizer,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map="auto",
    max_length=10000,
    do_sample=True,
    top_k=10,
    num_return_sequences=1,
    eos_token_id=tokenizer.eos_token_id
)

上面的代码片段使用拥抱面转换器库设置文本生成管道。让我们逐步浏览代码以了解它的作用:

  1. 导入必要的库:: 好吧,我们在本文中讨论的库;-) HuggingFacePipeline':HuggingFacePipeline允许您从转换器库中加载HuggingFace模型,而无需访问HuggingFace推理API。要使用它,您需要安装 Python 包。langchain``transformers
  2. 转换器库中导入所需的模块:
  • AutoTokenizer:此类用于自动加载指定预训练模型的分词器。
  • pipeline:此函数为各种 NLP 任务创建管道,例如文本生成、情绪分析等。
  • torch:它导入 PyTorch 库。
  • 设置模型和分词器:

将模型标识符“tiiuae/falcon-7b-instruct”(或较大模型的“falcon-40b-instruct”)分配给变量模型

AutoTokenizer.from_pretrained() 方法用于加载与指定模型关联的分词器。此分词器将用于预处理输入文本并将其转换为适合模型的输入格式。

  1. 配置文本生成管道:

调用该函数时带有参数“文本生成”,表示管道将用于文本生成。 参数 、 和 将传递到管道。 设置为 True,因为管道依赖于远程代码执行。 设置为“auto”,表示管道将自动确定用于推理的适当硬件设备 (CPU/GPU)。 设置为 10000,这意味着生成的文本不应超过 10,000 个标记。 设置为 ,这将允许模型在文本生成期间使用采样。 设置为 10,这意味着模型将在采样期间考虑前 10 个最有可能的令牌。 设置为 1,表示将仅生成一个文本序列。 设置为 *,*这可能是用于停止文本生成的序列结束标记 ID。pipeline()``*model*``*tokenizer*``*torch_dtype*``*trust_remote_code*``*device_map*``*max_length*``*do_sample*``True``*top_k*``*num_return_sequences*``*eos_token_id*``*tokenizer.eos_token_id*

该代码使用指定的模型和分词器设置文本生成管道,允许您使用给定模型生成文本。如果向此管道提供输入文本,它将根据配置参数和所用语言模型的行为返回生成的文本。

注意:生成的文本的具体行为和功能将取决于基础模型(例如,“tiiuae/falcon-7b-instruct”或“falcon-40b-instruct”或任何其他模型)以及训练它的数据。

现在让我们定义要使用的温度:

llm = HuggingFacePipeline(pipeline = pipeline, model_kwargs = {'temperature':0})

在 中,代码正在设置要在文本生成期间使用的特定于模型的关键字参数。在这种情况下,它将参数设置为 0。该参数控制文本生成的随机性。较高的值(例如,1.0)使生成的文本更具创造性和多样性,而较低的值(即本例中的0)使文本更具确定性和针对性。model_kwargs = {'temperature':0}``temperature``temperature

现在,让我们创建一些代码来使用 LangChain 创建提示模板。

from langchain import PromptTemplate,  LLMChain

template = """
You are an ethical hacker and programmer. Help the following question with brilliant answers.
Question: {question}
Answer:"""
prompt = PromptTemplate(template=template, input_variables=["question"])

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

question = "Create a python script to send a DNS packet using scapy with a secret payload "

print(llm_chain.run(question))

让我们逐步分解提供的代码:

  1. 导入必要的库。帮助创建文本提示模板的类。PromptTemplate
  2. 定义 : 这是一个多行字符串,其中包含稍后将插入的问题的占位符。它似乎是用于生成提示的预定义格式。template``template``{question}
  3. 创建对象:使用 和 的列表调用该类,其中包含将在模板中用作占位符的变量名称。在这种情况下,只有一个变量,稍后将替换为实际问题。PromptTemplate``PromptTemplate``template``input_variables``"question"
  4. 创建对象:使用之前创建的对象和对象调用该类,该对象似乎是使用拥抱面转换器库的先前定义的语言模型管道 ()。LLMChain``LLMChain``prompt``llm``llm
  5. 定义 : 命名的变量是用一个字符串值定义的,该字符串值表示请求出色答案的问题。该问题与创建 Python 脚本以使用 Scapy 和秘密有效负载发送 DNS 数据包有关。question``question
  6. 生成响应:使用 as 输入调用该方法。此方法可能使用链接的语言模型 () 以及提供的提示来生成对问题的响应。该对象似乎处理基于输入问题和预定义模板生成答案的过程。llm_chain.run(question)``question``llm``llm_chain
  7. 打印生成的响应:生成的响应使用 打印到控制台。print(llm_chain.run(question))

同样,代码示例也可以在我的一个 GitHub 存储库中找到。您也可以在Google Colab中使用此代码。

用于出色模板的文档加载器

在 LangChain 中,文档加载器提供了一种方便的方法,可以从各种来源以不同的格式(如 .txt、.csv、JSON、HTML 和 PDF)检索数据。此上下文中的文档是指一段文本及其关联的元数据。这些加载程序在处理不同类型的数据源时提供了灵活性和易用性。

例如,您可以使用文档加载器加载简单的.txt文件、提取任何网页的文本内容或获取 YouTube 视频的成绩单。

文档加载器提供两种基本方法:

  1. load:此方法用于从指定源获取数据并将其显示为文档。它有效地处理将数据加载到内存中的过程。
  2. lazy load:除了常规加载方法外,某些文档加载器还提供“延迟加载”功能。这意味着数据仅在需要时加载到内存中,从而为大型数据集提供更高效的内存管理。

通过利用 LangChain 中的文档加载器,用户可以轻松访问和处理各种数据源,而无需担心底层格式。此功能使 LangChain 成为以通用和用户友好的方式处理基于文本的数据的强大工具。无论您是处理简单的文本文件、网页还是多媒体脚本,文档加载器都可以简化数据检索过程并提高处理不同任务的整体效率。