什么是LangChain

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情

LangChain 是一个旨在简化使用大型语言模型(LLM)创建应用程序的框架。它提供了许多功能,使与LLM的合作变得更加容易,例如:

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

LangChain 是开源的,可在GitHub上获取( GitHub - langchain-ai/langchain: ⚡ Building applications with LLMs through composability ⚡ )。它是使用LLM构建应用程序的流行框架,被许多公司和组织使用。

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

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

如果您有兴趣与LLM合作,我建议您查看 LangChain。它是一个功能强大的框架,可以让您更轻松地开始使用LLM并使用它们构建应用程序。让我们看一下一些额外的细节。

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

  LangChain提供了一个简单的API来加载和使用LLM。即使您不熟悉LLM,此 API 也能让您轻松    入门。例如,您可以使用一行代码加载 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-smi命令。(NVIDIA System Management Interface)命令nvidia-smi是NVIDIA提供的用于管理和监控NVIDIA GPU设备的工具。此工具提供有关系统中安装的 GPU 的详细信息,例如:

  1. GPU 名称和 ID。
  2. GPU 利用率。
  3. 内存使用情况。
  4. 温度。
  5. 驱动版本。
  6. 电力使用情况。
  7. 运行 GPU 进程。
  8. 还有许多其他细节。

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

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

对于那些使用 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
)

上面的代码片段使用 Hugging Face Transformers 库设置文本生成管道。让我们逐步浏览一下代码以了解它的作用:

  1. 导入必要的库::
    langchain嗯,就是我们在本文中讨论的库;-)
    HuggingFacePipeline`:HuggingFacePipeline 允许您从 Transformer 库加载 HuggingFace 模型,而无需访问 HuggingFace 推理 API。要使用它,您需要transformers安装 Python 包。

2. 从Transformers库导入所需模块:

  • AutoTokenizer:此类用于自动加载指定预训练模型的分词器。
  • pipeline:该函数为各种 NLP 任务创建管道,例如文本生成、情感分析等。
  • torch:它导入 PyTorch 库。

3. 设置模型和分词器:将
模型标识符“ tiiuae/falcon-7b-instruct ”(或较大模型的“ falcon-40b-instruct ”)分配给变量model

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

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

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

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

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

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

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

现在,让我们创建一些代码来使用 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. 定义templatetemplate是一个多行字符串,其中包含{question}稍后插入的问题的占位符。它似乎是用于生成提示的预定义格式。
  3. 创建PromptTemplate对象:使用和 的列表PromptTemplate调用该类,其中包含将在模板中用作占位符的变量名称。在本例中,只有一个变量 ,稍后将用实际问题替换。templateinput_variables"question"
  4. 创建LLMChain对象:使用之前创建的对象和对象LLMChain来调用该类,该对象似乎是之前使用 Hugging Face Transformers 库定义的语言模型管道 ( )。promptllmllm
  5. 定义 a question:用一个字符串值定义一个名为 的变量question,该字符串值代表需要给出精彩答案的问题。问题涉及创建一个 Python 脚本,以使用带有秘密负载的 Scapy 发送 DNS 数据包。
  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 成为以多功能且用户友好的方式处理基于文本的数据的强大工具。无论您是处理简单的文本文件、网页还是多媒体记录,文档加载器都可以简化数据检索过程并提高处理不同任务的整体效率。

您甚至可以集成第三方文档加载器。

Document loaders | 🦜️🔗 Langchain

正如您所看到的,LangChain 是一个多功能框架,旨在构建由语言模型驱动的应用程序。其主要功能是数据感知,支持与外部数据源无缝集成,以及基于代理的方法,允许语言模型与其环境动态交互。

该框架提供了强大的价值主张,包括一系列可简化语言模型使用的组件。这些组件是模块化的,使其易于独立使用或与 LangChain 的其余部分结合使用。此外,LangChain还为特定任务提供即用型、预组装的链,从而简化了应用程序开发流程。

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值